@ciqol/resenv 0.1.0-beta.1 → 0.1.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,505 +1,61 @@
1
- # Dependency review
1
+ # Dependencies
2
2
 
3
- ## Release tools admitted with bounded controls - 2026-10-10
3
+ resenv has no runtime npm dependencies. Build, test and release tools are
4
+ development-only and excluded from the consumer archive. Exact versions live
5
+ in the [source manifest](https://github.com/ciqol/resenv/blob/beta/package.json);
6
+ the lockfile pins their resolved artifacts.
4
7
 
5
- The current release pipeline and launch state are documented in [releasing](releasing.md).
6
- The release-tool review and expiring advisory policy are in [release security](release-security.md).
7
- Earlier dated entries below remain historical evidence and are superseded where
8
- the current release guide describes a different state.
8
+ ## Tool choices
9
9
 
10
-
11
- Entries record decisions at the stated dates. Older version plans and install
12
- policies are historical; the release guide and CONTRIBUTING describe the current
13
- workflow. Release-tool intake below is not dependency admission.
14
-
15
- ## Semantic-release intake, not installed - 2026-10-08
16
-
17
- The user selected semantic-release for beta releases. The existing toolchain
18
- has no commit-derived release engine; adding one is justified for versions,
19
- release notes and branch/channel handling. Release-please was considered for
20
- 0.x support, and a custom engine was rejected as unnecessary maintenance.
21
- Semantic-release's normal initial line is 1.0.0-beta.1 / 1.0.0. The checked-in
22
- configuration is a preview draft; no release dependencies or workflow are enabled.
23
-
24
- Registry intake inspected these exact published artifacts:
25
-
26
- | Package | Version | Release date | Downloads in the last month | Maintainers |
27
- | --- | --- | --- | --- | --- |
28
- | semantic-release | 25.0.9 | 2026-08-05 | 12,515,497 | 3 |
29
- | @semantic-release/commit-analyzer | 13.0.1 | 2025-01-03 | 12,542,138 | 3 |
30
- | @semantic-release/release-notes-generator | 14.1.1 | 2026-05-08 | 12,802,125 | 3 |
31
-
32
- All three artifacts include MIT license text, match their canonical source
33
- repositories in the [semantic-release organization](https://github.com/semantic-release),
34
- contain no install lifecycle scripts, and expose registry integrity, signatures
35
- and provenance attestations. The release engine requires Node ^22.14.0 or
36
- >=24.10.0; the repository's Node 24.19.0 qualifies. The initial lock-only review
37
- stopped at audit; the isolated follow-up verification is recorded below.
38
- MFA and historical ownership continuity were not independently verified.
39
- The analyzer is an older stable component still required by the current engine;
40
- that alone does not establish its continued maintenance or security.
41
-
42
- A separate temporary lock-only project resolved 447 package entries, with no
43
- `hasInstallScript` entries. Its audit reported 10 high and two moderate findings,
44
- including propagated parent-package findings. The tree also needs complete
45
- license review; one bundled qrcode-terminal entry lacks license metadata.
46
- No install scripts or release tooling code were executed during the initial
47
- lock-only intake.
48
-
49
- The blocking dependency is `braces@3.0.3`, through `micromatch`, with the
50
- [high-severity stack-exhaustion advisory](https://github.com/advisories/GHSA-vfj7-8cjw-p6xm).
51
- The registry's latest braces release is 3.0.3 and the advisory lists no patched
52
- version. Other findings include brace-expansion, http-cache-semantics, undici,
53
- ip-address and postcss-selector-parser. They do not remove the braces blocker.
54
- A normal install of this set would fail the repository's required high-severity
55
- audit. No audit exception, blanket override, unsupported downgrade or lockfile
56
- change was applied.
57
-
58
- ### Follow-up verification for the requested beta
59
-
60
- The user authorized a beta release on October 8. The tooling was installed only
61
- in a temporary intake directory, using the inspected lockfile and normal npm
62
- lifecycle behavior. No install lifecycle hooks were found in the installed tree.
63
- `npm audit signatures` verified 447 registry signatures and 121 attestations.
64
- The bundled qrcode-terminal artifact, whose metadata omitted a license, includes
65
- Apache-2.0 license text. Complete transitive license review and dependency
66
- admission remain unfinished; these checks do not approve the vulnerable tree.
67
-
68
- A separate temporary clone of the repository history used a local bare Git
69
- remote, `dryRun: true`, no publishing plugins, and an environment without
70
- registry or GitHub credentials. The real semantic-release engine and commit
71
- analyzer calculated `1.0.0-beta.1`, channel `beta`, from the 22 commits through
72
- `a461ce49903d620ced4c18ce1a90157b46591fc6`. The release-notes generator was then
73
- called separately with the canonical repository URL. No tag was created, even
74
- in the temporary remote. This verifies version calculation, not hosted release
75
- authentication, stable promotion, or publication.
76
-
77
- The braces advisory affects recursive parsing of deeply nested **patterns**.
78
- In the inspected upstream branch expansion, the pattern is `branch.name` from
79
- release configuration; remote branch names are subjects. In commit analysis,
80
- patterns come from release rules, while commit fields are subjects. The current
81
- draft uses fixed literal branch names and the analyzer's default rules. This
82
- suggests narrower exposure than accepting arbitrary user-supplied patterns,
83
- but it is not a complete reachability audit of the transitive tree. Other
84
- advisories remain as well. No exception has been approved or applied, and the
85
- repository's required high-severity audit is unchanged. The beta prerelease of
86
- semantic-release also retains micromatch, so switching to it does not remove
87
- this blocker.
88
-
89
- Sources: [branch expansion](https://github.com/semantic-release/semantic-release/blob/v25.0.9/lib/branches/expand.js),
90
- [commit matching](https://github.com/semantic-release/commit-analyzer/blob/v13.0.1/lib/analyze-commit.js),
91
- [default rules](https://github.com/semantic-release/commit-analyzer/blob/v13.0.1/lib/default-release-rules.js).
92
-
93
- After an acceptable upstream fix or an explicitly reviewed alternative,
94
- re-run intake and pin exact direct versions plus the lockfile. Keep these tools
95
- in development dependencies, preserve the five-package runtime closure, and
96
- verify registry signatures/provenance, licenses, install hooks, audits and a
97
- real dry run before enabling them. CODEOWNERS remains responsible for review;
98
- Dependabot can maintain admitted versions. Removing the release configuration
99
- and dev tooling would restore the existing manual candidate checks if the tool
100
- must later be replaced. The requested beta publication is authorized, but still
101
- needs dependency admission and registry setup. The project license was selected
102
- as MIT on October 8, 2026, with copyright held by ciqol contributors.
103
-
104
- ### Reference comparison and audit refresh - 2026-10-08
105
-
106
- The reference `ciqol/sonarqube-api-client` uses the same semantic-release engine
107
- and analyzer family, plus npm and GitHub plugins. Reusing its configuration
108
- does not establish admission of that tree. A fresh registry audit of the existing
109
- isolated intake lockfile still reported 10 high and two moderate findings,
110
- including `braces@3.0.3` through micromatch. No release dependency was added,
111
- no dependency version changed and the audit gate remains enforced. The selected
112
- normal release branch is now `beta`, with npm channel `beta`; this branch change
113
- does not change the dependency findings. See [the reference comparison](releasing.md#reference-sonarqube-api-client).
114
-
115
-
116
- ## Installation policy - 2026-10-07
117
-
118
- At the user's request, standard setup, CI and clean-consumer checks use normal
119
- npm lifecycle behavior. The root `.npmrc` no longer disables scripts, and pack
120
- commands do not suppress lifecycle hooks. No dependency version or integrity
121
- entry changed as part of this policy update.
122
-
123
- The installed Node 24/macOS tree was inspected for `preinstall`, `install` and
124
- `postinstall` scripts and implicit `binding.gyp` builds; none were present. The
125
- lockfile marks optional `fsevents@2.3.3` with `hasInstallScript`, but its installed
126
- artifact declares no such script and contains no `binding.gyp`. Platform-specific
127
- behavior still requires the hosted Linux/macOS clean-install checks. A fresh
128
- local install on npm 11.17.0 completed and warned that the lockfile's optional
129
- fsevents entry is not covered by an `allowScripts` decision; no approval or
130
- blanket script override was added.
131
-
132
- Review scripts and native setup whenever dependencies change. A lockfile pins
133
- dependency bytes but does not make executing their code safe. Explicit build,
134
- advisory, signature and package checks remain part of validation. Older entries
135
- below describe the installation policy used at the time of those reviews.
136
-
137
- ## Vitest unit runner - 2026-10-07
138
-
139
- The user requested Vitest with unit specs beside each source module. Added
140
- `vitest` and `@vitest/coverage-v8`, both exactly 4.1.11, as development-only
141
- dependencies. Both distributed licenses are MIT; the runner's bundled notices
142
- also cover BSD-3-Clause and ISC code. The isolated tree contains MIT, ISC,
143
- BSD-3-Clause, Apache-2.0 and MPL-2.0 packages. MPL applies to unmodified
144
- Lightning CSS development binaries; none of this tooling is redistributed
145
- in resenv's archive. Existing runtime dependencies are unchanged.
146
-
147
- - **Need and fit:** Node's test runner remains suitable for process tests but
148
- cannot run the requested TypeScript specs and Vitest mocks directly. Keeping
149
- Node alone or using Jest were alternatives; Vitest matches the requested
150
- workflow without adding a second TypeScript transform configuration.
151
- Version 4.1.11 retains Node 20 support, while Vitest 5 requires Node 22.12+.
152
- The resolved Vite 8.3.3 requires Node 20.19+ or 22.12+, covered by the actual
153
- test matrix and Node 24 development runtime.
154
- - **Health:** npm reported 454,419,379 Vitest downloads and 167,168,819 coverage
155
- provider downloads for September 5 through October 4, 2026. Vitest has five
156
- registry maintainers. Public repository metadata showed 17,188 stars,
157
- 357 open issues/PRs and a push on October 6. Version 4.1.11 was released on
158
- August 18; Vitest 5.0.3 was released September 30. Published security reports
159
- have patched-version ranges; 4.1.11 fixes the redirect-mock advisory
160
- GHSA-82fw-gwwq-j7x9. Browser/UI packages are not installed or enabled.
161
- - **Provenance:** package metadata points to the canonical vitest-dev/vitest
162
- source, and both artifacts declare provenance attestations. The isolated
163
- installation verified 64 registry signatures and 31 attestations. npm
164
- integrity pins authenticate archive bytes; account MFA and complete ownership
165
- history are not exposed by this review.
166
- - **Security and capabilities:** the isolated tree reported zero known
167
- vulnerabilities. Installation disables scripts, including the optional
168
- fsevents hook. Tests execute local code with filesystem/process permissions;
169
- no real credentials are supplied. The runner uses Node mode with API and
170
- browser servers disabled. Native transform binaries are development tooling.
171
- The lock contains 88 dependency entries including platform-specific packages;
172
- 64 were installed on this machine. This is a larger development tree than
173
- the previous Node-only runner and is accepted for the requested testing setup.
174
- - **Control:** the maintainer's request authorizes this addition. Exact direct
175
- versions and lockfile integrity pin the tree. ciqol maintainers own updates
176
- through the existing dependency review process and advisory checks. Removal
177
- means returning unit specs to Node's runner with an explicit TypeScript
178
- compilation step. Clean-consumer checks ensure this tooling is not shipped.
179
-
180
- Sources: [Vitest 4 requirements](https://v4.vitest.dev/guide/),
181
- [registry metadata](https://www.npmjs.com/package/vitest/v/4.1.11),
182
- [coverage provider](https://www.npmjs.com/package/@vitest/coverage-v8/v/4.1.11),
183
- and [redirect-mock fix](https://github.com/vitest-dev/vitest/security/advisories/GHSA-82fw-gwwq-j7x9).
184
-
185
- ## TypeScript implementation build - 2026-10-06
186
-
187
- The requested migration needs compiler integration and Node API declarations.
188
- These additions are development dependencies only:
189
-
190
- | Package | Version | Distributed license | Purpose |
191
- | --- | --- | --- | --- |
192
- | @rollup/plugin-typescript | 12.3.0 | MIT | Compile TypeScript and emit declarations through Rollup |
193
- | @types/node | 24.19.1 | MIT | Type-check Node APIs against the development runtime |
194
- | tslib | 2.8.1 | 0BSD | Required peer of the TypeScript plugin |
195
-
196
- - **Need and alternatives:** the existing compiler can emit JavaScript before
197
- Rollup, but the requested library-build standard uses Rollup's maintained
198
- TypeScript plugin. This avoids a custom transpilation plugin. Handwritten
199
- Node declarations would be incomplete. A declaration bundler was considered;
200
- generated declaration files with format-specific entry facades need no extra
201
- bundler. `rollup-plugin-dts` was inspected but is not installed.
202
- - **Fit:** the plugin supports Rollup 4 and TypeScript >=3.7; all tools fit the
203
- Node 24 development environment. Production remains Node >=20 and is tested
204
- separately. The compiler target uses native language features, so tslib must
205
- not be imported by or bundled into the distributable. Package checks enforce
206
- that build dependencies stay outside the consumer tree.
207
- - **Usage and health:** npm reported 13,833,923 plugin downloads, 1,776,524,012
208
- tslib downloads and 1,843,836,518 Node-types downloads for September 5 through
209
- October 4, 2026. Releases are dated 2025-10-23, 2024-10-31 and 2026-10-01.
210
- The plugin has four registry maintainers, tslib eight, and Node types use
211
- DefinitelyTyped's shared publisher. Their source projects have active issue
212
- and contribution histories. The older tslib release is accepted as a stable
213
- compiler helper peer; the chosen target requires no emitted helper imports.
214
- - **Provenance:** all three archives matched npm SHA-512 metadata. The official
215
- plugin release points to `973054d`; tslib metadata identifies source commit
216
- `d72d6f70b36286bc3f94a3dda1e64dcb568b1370`. Node types identify the canonical
217
- DefinitelyTyped source directory. The isolated tree verified 19 registry
218
- signatures and four attestations. These checks authenticate registry
219
- artifacts; they do not establish reproducible builds for every addition.
220
- Public metadata does not establish account MFA or complete transfer history.
221
- - **Licenses and capabilities:** licenses were read from the downloaded
222
- archives. The plugin runs compiler code with local build permissions; Node
223
- types are declarations. Neither needs provider credentials. Installation
224
- disables lifecycle scripts. No new component is vendored into runtime output.
225
- The isolated tree's audit found zero known vulnerabilities; advisory checks
226
- are not an independent code audit.
227
- - **Weight and control:** the isolated tree has 19 installed packages including
228
- the already-reviewed compiler and Rollup. Direct unpacked sizes are about
229
- 160 KB, 2.61 MB and 90 KB respectively. Exact versions and lockfile integrity
230
- fix the tree. ciqol maintainers own updates through the existing dependency
231
- review process. Removal means returning to compiler emit before Rollup while
232
- retaining strict implementation and packed-consumer checks.
233
-
234
- Sources: [Rollup plugin and requirements](https://github.com/rollup/plugins/tree/master/packages/typescript),
235
- [plugin release](https://github.com/rollup/plugins/releases/tag/typescript-v12.3.0),
236
- [tslib release](https://github.com/microsoft/tslib/releases/tag/v2.8.1),
237
- [Node types source](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node).
238
-
239
- ## Lint enforcement - 2026-10-06
240
-
241
- Selected for the requested TypeScript standards review. These are development
242
- tools; neither is included in the generated package or loaded at runtime.
243
-
244
- | Package | Pinned version | Distributed license | Purpose |
245
- | --- | --- | --- | --- |
246
- | eslint | 10.12.0 | MIT | Enforce JavaScript correctness and local style rules |
247
- | typescript-eslint | 8.71.1 | MIT | Parse declarations and enforce public TypeScript contracts |
248
-
249
- - **Need:** prose alone did not enforce declaration consistency or catch empty
250
- error handlers. Node's compiler does not enforce those style rules.
251
- - **Alternatives and fit:** a checker built on the existing TypeScript parser
252
- would avoid dependencies but require maintaining our own lint rules. ESLint
253
- directly supports the standards' established rules. Other lint engines would
254
- require a separate rule mapping. The development toolchain uses Node 24;
255
- ESLint also supports the tested Node 20.20.2 and 22 versions. The TypeScript
256
- integration supports the existing TypeScript 6.0.3 compiler. Runtime support
257
- and dependencies do not change.
258
- - **Usage and maintenance:** npm reported 672,661,327 ESLint downloads and
259
- 374,467,603 typescript-eslint downloads for September 5 through October 4,
260
- 2026. The releases were published October 2 and October 5 respectively.
261
- Registry maintainers are `openjsfoundation` / `eslintbot` and `jameshenry` /
262
- `bradzacher`; both projects have public teams and active release histories.
263
- At review their issue trackers showed 97 and 174 open issues. Their advisory
264
- pages listed no published advisories. These signals do not establish safety.
265
- - **Provenance:** both downloaded archives matched npm's SHA-512 metadata.
266
- All 411 distributed ESLint JavaScript/license files matched source commit
267
- `a438ec39512c3381f4785a1f3058982ce9845970`. ESLint supplied registry signatures
268
- but no provenance attestation for this version. typescript-eslint supplied
269
- provenance; the isolated tree verified all 95 signatures and 30 attestations.
270
- Account MFA and a complete ownership-transfer history are not publicly
271
- established by these checks and are not claimed as verified.
272
- - **License:** the two distributed LICENSE files are MIT. The isolated tree
273
- contains MIT, Apache-2.0, BSD-2-Clause, BSD-3-Clause, ISC and BlueOak-1.0.0;
274
- no license field was missing. The Blue Oak notice requirement was reviewed.
275
- These tools and their notices stay in the development installation, outside
276
- the runtime archive. Reassess obligations if vendoring or redistribution changes.
277
- - **Security and weight:** the isolated review installed 95 packages, including
278
- the already-used TypeScript compiler. No install lifecycle scripts were
279
- declared and installation disabled scripts. `npm audit` reported zero known
280
- vulnerabilities. ESLint is about 2.95 MB unpacked; the TypeScript wrapper is
281
- about 43 KB before its parser/plugin dependencies. Lint runs local JavaScript
282
- configuration with the developer/CI account's filesystem permissions; it has
283
- no provider credentials or publishing grant in CI. No telemetry operation was
284
- observed in the reviewed setup; this is not a full transitive-code audit.
285
- - **Control and exit:** exact direct versions and lockfile integrity pin the
286
- tree. ciqol maintainers review the existing weekly Dependabot updates. Remove
287
- these tools, the lint configuration and CI step together if replacing them;
288
- public declaration and installed-package tests must remain.
289
-
290
- Sources: [ESLint release](https://eslint.org/blog/2026/10/eslint-v10.12.0-released/),
291
- [TypeScript integration support](https://typescript-eslint.io/users/dependency-versions/),
292
- [ESLint source](https://github.com/eslint/eslint/tree/a438ec39512c3381f4785a1f3058982ce9845970),
293
- [TypeScript lint source](https://github.com/typescript-eslint/typescript-eslint),
294
- [ESLint advisories](https://github.com/eslint/eslint/security/advisories),
295
- [TypeScript lint advisories](https://github.com/typescript-eslint/typescript-eslint/security/advisories),
296
- [npm ESLint metadata](https://registry.npmjs.org/eslint/10.12.0),
297
- [npm TypeScript lint metadata](https://registry.npmjs.org/typescript-eslint/8.71.1).
298
-
299
- ## First public release preparation - 2026-10-06
300
-
301
- The planned first public version is `0.1.0`; earlier versions identify private
302
- prototypes. npm dependency versions are unchanged. `npm audit` found no known
303
- advisories in the installed tree; `npm audit signatures` verified ten registry
304
- signatures and seven attestations. These results do not establish a security audit.
305
-
306
- Two CI-only actions carry one built package between jobs:
307
-
308
- | Action | Release | Pinned commit | License |
309
- | --- | --- | --- | --- |
310
- | actions/upload-artifact | v7.0.1 | `043fb46d1a93c77aae656e7c1c64a875d1fc6a0a` | MIT |
311
- | actions/download-artifact | v8.0.1 | `3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c` | MIT |
312
-
313
- - **Need and alternatives:** the compatibility jobs must test the same archive.
314
- Rebuilding per job would not prove that contract. GitHub's own artifact actions
315
- avoid custom authenticated upload/download code.
316
- - **Source and maintenance:** the official release pages resolve to the pinned,
317
- GitHub-signed commits. Both releases are from 2026, maintained by GitHub, and
318
- already used in the reference client. At review the repositories showed about
319
- 1,100 and 734 forks respectively; these are adoption signals only.
320
- - **License and execution:** the tagged LICENSE files are MIT; action metadata
321
- runs bundled JavaScript on Node 24. No action code is shipped in resenv.
322
- A reproducible build of those bundles and account MFA were not verified.
323
- - **Authority and limits:** upload receives only the package archive, excludes
324
- hidden files and expires after seven days. Download selects that artifact
325
- from the same run and fails on a digest mismatch. Jobs have read-only
326
- repository permission, no provider credentials, and no OIDC publishing grant.
327
- - **Advisories:** the upload advisory page lists none. Download's published
328
- extraction advisory, GHSA-cxww-7g56-2vh6, affects versions >=4.0.0 and <4.1.3;
329
- v8.0.1 is outside that range. Bundled dependency advisories were not separately
330
- audited, so npm's clean result above does not cover these actions.
331
- - **Control:** ciqol maintainers review pinned updates proposed by Dependabot.
332
- Removing the actions requires replacing artifact transfer or returning to
333
- independent per-job builds and narrowing the validation claim.
334
-
335
- Sources: [upload release](https://github.com/actions/upload-artifact/releases/tag/v7.0.1),
336
- [download release](https://github.com/actions/download-artifact/releases/tag/v8.0.1),
337
- [upload license](https://github.com/actions/upload-artifact/blob/v7.0.1/LICENSE),
338
- [download license](https://github.com/actions/download-artifact/blob/v8.0.1/LICENSE),
339
- [upload inputs](https://github.com/actions/upload-artifact/blob/v7.0.1/action.yml),
340
- [download inputs](https://github.com/actions/download-artifact/blob/v8.0.1/action.yml),
341
- [upload advisories](https://github.com/actions/upload-artifact/security/advisories),
342
- [download advisory](https://github.com/actions/download-artifact/security/advisories/GHSA-cxww-7g56-2vh6).
343
-
344
- Version 0.6.0 renamed the package to `@ciqol/resenv` on 2026-10-04 without
345
- changing dependency versions. Earlier review entries retain the original name.
346
-
347
- ## Doppler support — 2026-10-01
348
-
349
- No npm dependency was added for Doppler. Node's built-in HTTPS `fetch`, child
350
- process and buffer APIs provide the required operations. Adding the full MCP
351
- server or SDK would add an unnecessary runtime surface for three authentication
352
- operations and one public secret-read endpoint. The existing crypto/build
353
- dependency versions remain unchanged.
354
-
355
- The documented [Doppler MCP package](https://docs.doppler.com/docs/mcp) identified
356
- `@dopplerhq/mcp-server` as the official npm package. Version 1.0.5 was downloaded
357
- for read-only inspection without installation or script execution. The tarball
358
- matched npm's SHA-512 integrity metadata. Its `dist/device-auth.js` describes
359
- GET `/v3/auth/cli/generate/2` and POST `/v3/auth/cli/authorize`, including the
360
- 409 pending response. The separately inspected `@dopplerhq/node-sdk` 1.3.0
361
- artifact also matched registry integrity and confirmed the public API's
362
- computed-value response and token-revocation request shape. Neither package's
363
- implementation is vendored or installed. Registry integrity establishes artifact
364
- consistency; it is not an independent audit or provenance attestation.
365
-
366
- envref implements these wire operations using the standard library. Browser
367
- login is isolated because its protocol is not in Doppler's public API contract.
368
- The live challenge endpoint accepted envref's own `v0.4.1` version on the review
369
- date. No browser approval or user secret was used for this probe. Maintainers
370
- must recheck the protocol if Doppler changes it; the supported CLI fallback and
371
- explicit token mode are the exit paths.
372
-
373
- Optional platform tools are macOS `/usr/bin/security` (shipped with the OS),
374
- Linux `/usr/bin/secret-tool`, and the user's existing Doppler CLI. envref does
375
- not download or install them. The local macOS manual and CLI help were checked
376
- for stdin command input, keychain lookup and the documented credential lookup.
377
- A unique dummy keychain item was written, read back and deleted successfully.
378
- Linux Secret Service behavior is covered with process mocks, not a live Linux
379
- keyring. Host administrators own these platform binaries and their updates.
380
- Fallback executables use fixed system/Homebrew paths, arguments and a filtered
381
- environment; no repository-provided command is evaluated.
382
-
383
- The ciqol maintainers own this integration. It can be removed by deleting the
384
- Doppler mode while retaining encryption and explicit command mode. See
385
- [Doppler setup](doppler.md) for credential permissions, fallback behavior and
386
- the remaining trust boundaries.
387
-
388
- ## Rollup build and declaration checks
389
-
390
- Reviewed on 2026-09-29 for the user-requested `.mjs` source migration and dual
391
- CommonJS/ESM package. These tools are development dependencies only and are
392
- omitted from the generated package manifest.
393
-
394
- | Package | Version | Distributed license | Purpose |
395
- | --- | --- | --- | --- |
396
- | rollup | 4.63.5 | MIT | Compile the JavaScript source and ESM facades |
397
- | typescript | 6.0.3 | Apache-2.0 | Check CJS and ESM consumer declarations |
398
-
399
- - **Need and alternatives:** Node cannot emit CommonJS from ESM source. Rollup
400
- was explicitly requested and provides module parsing and output generation
401
- without a custom source rewriter. esbuild or tsup could perform this build,
402
- but add an alternate toolchain without a requirement. No TypeScript Rollup
403
- plugin is needed for `.mjs` input. The TypeScript compiler checks the existing
404
- public declaration contract; file-existence checks alone cannot validate
405
- consumer type resolution.
406
- - **Fit and weight:** Rollup supports Node >=18 and TypeScript supports Node
407
- >=14.17; both cover envref's Node >=20 range. Rollup's registry artifact is
408
- about 2.9 MB unpacked. TypeScript 6.0.3 is the JavaScript compiler with no
409
- runtime dependencies; it avoids adopting the newer native compiler's
410
- platform dependency tree for these small declaration checks. The isolated
411
- macOS installation contains five packages. Its lockfile includes 30 package
412
- entries, including optional platform variants. Rollup's tree adds
413
- `@types/estree` 1.0.9, optional `fsevents` 2.3.3, native `@rollup/*` packages
414
- pinned to 4.63.5, and optional `@napi-rs/lzma-linux-x64-gnu` 1.5.1. Their
415
- package licenses are MIT. The upstream source explains the lzma dependency
416
- as part of its native cross-compilation toolchain.
417
- - **Usage and health:** npm reported 140,333,279 Rollup downloads and
418
- 330,811,370 TypeScript downloads for September 21-27, 2026. Rollup lists five
419
- maintainers; TypeScript 6.0.3 lists six. Rollup 4.63.5 was published September
420
- 24; TypeScript 6.0.3 was published April 16. Both canonical repositories had
421
- activity on the review date. GitHub reported 26,310/111,270 stars and
422
- 610/5,053 open issues plus pull requests, respectively. These counts are
423
- maintenance signals, not a claim that every issue was reviewed.
424
- - **Source and provenance:** Rollup's official release tag and npm `gitHead`
425
- agree on `3722484c33c58b3ab0cbbfcca09b8f267d420329`; TypeScript's agree on
426
- `050880ce59e30b356b686bd3144efe24f875ebc8`. Both tarball SHA-512 digests were
427
- verified against registry metadata, and licenses were read from those
428
- artifacts. `npm audit signatures` verified all five installed packages and
429
- two provenance attestations. TypeScript does not publish a provenance
430
- attestation for this version, and the source commit is unsigned. Its trust
431
- evidence is the verified registry signature, Microsoft-controlled release
432
- linking the npm distribution, and matching release/source metadata; a
433
- reproducible compiler build was not performed. Registry MFA enforcement and
434
- complete ownership histories are not publicly established by these checks.
435
- - **Security and capabilities:** OSV reported no advisories for either exact
436
- top-level version; npm audit reported none for the isolated dependency tree.
437
- That review installed with scripts disabled. Setup and CI now use normal
438
- npm lifecycle behavior; see the installation-policy update above. Rollup
439
- loads native parser code and reads/writes
440
- build files; TypeScript reads consumer fixtures and declarations. Neither
441
- receives application credentials in CI. Configuration files are executable
442
- build code and must be reviewed. These checks are not a security audit.
443
- - **Control and exit:** the user requested Rollup; the ciqol maintainers own
444
- subsequent updates. Exact direct versions and the committed lockfile fix the
445
- tree. Updates require license, advisory, provenance and consumer checks.
446
- No dependency updater or publication is enabled. A replacement bundler only
447
- needs to preserve the tested package exports, shared implementation and
448
- declaration contract; TypeScript can be replaced by a reviewed compiler
449
- release independently of the runtime.
450
-
451
- Evidence: [Rollup release](https://github.com/rollup/rollup/releases/tag/v4.63.5),
452
- [Rollup package source](https://github.com/rollup/rollup/blob/v4.63.5/package.json),
453
- [TypeScript release](https://github.com/microsoft/TypeScript/releases/tag/v6.0.3),
454
- [Rollup registry metadata](https://registry.npmjs.org/rollup/4.63.5), and
455
- [TypeScript registry metadata](https://registry.npmjs.org/typescript/6.0.3).
456
-
457
- Reviewed on 2026-09-28 for the private, unpublished envref prototype.
458
-
459
- ## Runtime dependencies
460
-
461
- As of October 12, 2026, resenv has no runtime npm dependencies. Removed
462
- `eciesjs` 0.5.0 and its four transitive crypto packages with dotenvx decryption.
463
- Doppler resolution uses Node's HTTPS fetch and built-in process/credential
464
- helpers. The lockfile and clean-consumer check enforce the empty runtime tree.
465
-
466
- ## CI actions
467
-
468
- Reviewed on 2026-09-29. These actions run only in the test workflow; they are
469
- not distributed with the npm package.
470
-
471
- | Action | Version and pinned commit | Purpose |
10
+ | Packages | Purpose | License |
472
11
  | --- | --- | --- |
473
- | actions/checkout | v6.1.0, `d23441a48e516b6c34aea4fa41551a30e30af803` | Check out the repository |
474
- | actions/setup-node | v6.5.0, `249970729cb0ef3589644e2896645e5dc5ba9c38` | Install the Node version in `.nvmrc` |
475
-
476
- Both are maintained by GitHub, use the MIT license, and run committed JavaScript
477
- bundles on the Actions Node 24 runtime. GitHub's API confirmed the release tags
478
- and commit pins. The release dates were July 20 and July 14, 2026 respectively;
479
- both repositories had activity within the preceding day. The review observed
480
- 8,916 stars for checkout and 4,976 for setup-node. These are usage signals,
481
- not security guarantees. Maintainer account MFA and the full ownership history
482
- were not independently verified.
483
-
484
- The checkout release hardens pull-request checkout behavior. The setup-node
485
- release includes cache and dependency security updates. Both repositories'
486
- public security-advisory endpoints returned no entries on the review date;
487
- that does not establish the absence of vulnerabilities.
488
-
489
- Handwritten checkout and Node installation scripts would duplicate credential
490
- handling and platform-specific setup. The official actions provide those
491
- operations across the Linux and macOS test matrix without adding runtime
492
- dependencies. The workflow grants read-only contents access to the job, does
493
- not persist checkout credentials, disables package-manager caching and install
494
- scripts, and has a ten-minute timeout. It has no publication step or registry
495
- credentials.
496
-
497
- Updates require manual review of the source, release notes, licenses and
498
- advisories, followed by new commit pins and a test run. The ciqol maintainers
499
- own that review; either action can be replaced by another reviewed checkout or
500
- runtime setup step without changing envref's package or API.
501
-
502
- Evidence: [checkout release](https://github.com/actions/checkout/releases/tag/v6.1.0),
503
- [checkout source](https://github.com/actions/checkout/tree/d23441a48e516b6c34aea4fa41551a30e30af803),
504
- [setup-node release](https://github.com/actions/setup-node/releases/tag/v6.5.0), and
505
- [setup-node source](https://github.com/actions/setup-node/tree/249970729cb0ef3589644e2896645e5dc5ba9c38).
12
+ | `rollup`, `@rollup/plugin-typescript` | Compile TypeScript, preserve the module graph and generate declarations | MIT |
13
+ | `typescript` | Strict implementation, spec and consumer type checks | Apache-2.0 |
14
+ | `tslib` | Helpers used by the TypeScript build plugin | 0BSD |
15
+ | `@types/node` | Node platform types for the pinned development runtime | MIT |
16
+ | `eslint`, `typescript-eslint` | Lint source and tooling, including rules that use type information | MIT |
17
+ | `vitest`, `@vitest/coverage-v8` | Colocated unit tests and source coverage | MIT |
18
+ | `@semantic-release/commit-analyzer`, `@semantic-release/release-notes-generator` | Official Conventional Commit classification and release notes | MIT |
19
+
20
+ The [Doppler CLI](doppler.md) is a separately installed authentication helper,
21
+ owned and updated by the user. resenv does not download or vendor it. Supplying
22
+ `DOPPLER_TOKEN` avoids the CLI dependency.
23
+
24
+ ## Installation policy
25
+
26
+ Use the Node version in `.nvmrc`, `npm ci` and normal npm lifecycle behavior.
27
+ Do not disable scripts globally. Review published install hooks and implicit
28
+ native builds when dependencies change. Rollup uses platform-specific optional
29
+ binaries; keep the Linux/macOS clean-install checks. The lockfile marks optional
30
+ `fsevents` as having an install script, although its reviewed artifact has no
31
+ install hook or `binding.gyp`; npm may warn about that metadata.
32
+
33
+ The committed `.npmrc` sets `omit=peer`. The two release plugins export the
34
+ standalone functions the planner uses, but declare the full `semantic-release`
35
+ engine as a peer for their usual integration. Omitting that unused peer also
36
+ keeps its npm/GitHub publisher dependency graph off disk. Audit and planning
37
+ guards require those modules to be unresolvable from the project and both
38
+ plugins. See [release security](release-security.md).
39
+
40
+ npm still resolves omitted peers into the lockfile. `npm ls` reports the
41
+ deliberately missing engine peers; an audit with `--include=peer` can report
42
+ vulnerabilities in those uninstalled entries. Do not conceal the peer warning
43
+ with `--force`, `--legacy-peer-deps` or an alias package. Restoring the engine
44
+ requires a dependency/security review and a deliberate guard change.
45
+
46
+ ## Updating dependencies
47
+
48
+ Maintainers own dependency admission and updates. Keep direct versions exact
49
+ and review the manifest and lockfile diff, upstream source and release notes,
50
+ distributed licenses, provenance, advisories and install hooks. Keep Vitest and
51
+ its coverage provider compatible. Changes to release plugins also require
52
+ reviewing their standalone exports and executable guards.
53
+
54
+ Run `npm ci`, `npm run audit`, `npm audit signatures` and `npm run verify`.
55
+ Review hosted matrix checks before release. Record review evidence and check
56
+ results in the PR and CI; update this guide only when a lasting choice or
57
+ installation requirement changes. Do not append dated intake or test logs.
58
+
59
+ Official `actions/*` and `github/*` actions use exact release tags under the
60
+ repository's GitHub publisher trust policy. Other remote actions require full
61
+ commit SHAs. Review action source, permissions and license when updating them.