@ciqol/resenv 0.1.0-beta.1 → 0.1.0
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.
- package/CONTRIBUTING.md +41 -19
- package/README.md +36 -20
- package/SECURITY.md +20 -20
- package/bin/resenv.cjs +21 -23
- package/docs/build.md +29 -26
- package/docs/dependencies.md +65 -502
- package/docs/doppler.md +69 -60
- package/docs/maintainer-handoff.md +30 -102
- package/docs/release-security.md +64 -134
- package/docs/releasing.md +72 -137
- package/docs/security-exceptions.json +2 -135
- package/doppler/auth.cjs +4 -110
- package/doppler/http.cjs +3 -8
- package/doppler/system.cjs +26 -75
- package/package.json +2 -2
- package/types/src/doppler/auth.d.ts +2 -17
- package/types/src/doppler/http.d.ts +1 -3
- package/types/src/doppler/system.d.ts +3 -8
- package/docs/maturity.md +0 -61
- package/docs/public-readiness.md +0 -138
- package/docs/security-performance-review.md +0 -150
- package/docs/validation.md +0 -700
package/docs/validation.md
DELETED
|
@@ -1,700 +0,0 @@
|
|
|
1
|
-
# Validation
|
|
2
|
-
|
|
3
|
-
## October 12, 2026 — delivery and session handoff review
|
|
4
|
-
|
|
5
|
-
Reviewed the resolver, command opt-in, provider and credential boundaries,
|
|
6
|
-
dual-module package, documentation and CI staging/recovery paths. No new
|
|
7
|
-
runtime blocker was identified. Native browser login remains unverified end
|
|
8
|
-
to end; this review does not establish an independent security audit.
|
|
9
|
-
|
|
10
|
-
Local checks passed typed lint, source/spec type checks, Rollup, 94 Vitest
|
|
11
|
-
tests, 40 process tests, 16 installed-package runtime checks and two typed
|
|
12
|
-
consumers. The initial package check could not write to the local npm cache;
|
|
13
|
-
the build and package check passed with a separate writable temporary cache.
|
|
14
|
-
Runtime audit: zero findings. The development audit matched the 12 reviewed
|
|
15
|
-
advisory IDs with the existing November 9 expiry. Registry verification passed
|
|
16
|
-
for 605 signatures and 185 attestations.
|
|
17
|
-
|
|
18
|
-
The maintained source still meets the static maturity checklist. Generated
|
|
19
|
-
package findings remain as explained in [maturity](maturity.md). Session and
|
|
20
|
-
release recovery instructions now live in [the handoff](maintainer-handoff.md).
|
|
21
|
-
|
|
22
|
-
At review time, GitHub private vulnerability reporting was disabled. The
|
|
23
|
-
earlier CI candidate was still staged and had not been approved on npm. The
|
|
24
|
-
maintainer had removed the accidental public `1.0.0`; `0.0.0-stage` remained.
|
|
25
|
-
Check live provider state before treating any of these observations as current.
|
|
26
|
-
|
|
27
|
-
## October 12, 2026 — first CI beta preparation
|
|
28
|
-
|
|
29
|
-
Removed dotenvx decryption, `eciesjs` and its four transitive dependencies.
|
|
30
|
-
The runtime dependency tree is empty. Retained Doppler references and explicit
|
|
31
|
-
command opt-in; original and fetched `encrypted:` strings remain literal.
|
|
32
|
-
|
|
33
|
-
Local validation passed lint, strict implementation/spec type checks, the
|
|
34
|
-
Rollup build, 94 Vitest tests, 40 process tests, 16 installed-package runtime
|
|
35
|
-
checks and two typed consumers. The runtime audit reported zero findings; the
|
|
36
|
-
12 reviewed release-tool advisories retain their November 9 expiry.
|
|
37
|
-
|
|
38
|
-
The beta planner starts at `0.1.0-beta.1`, ignores the old stable version,
|
|
39
|
-
skips unchanged/docs-only history and increments real beta tags. Tests cover
|
|
40
|
-
malformed beta tags, unchanged source refs, staging receipts, failure ordering,
|
|
41
|
-
registry integrity conflicts and release recording after approval.
|
|
42
|
-
|
|
43
|
-
CI stages the exact tested archive using the existing stage-only OIDC
|
|
44
|
-
publisher. npm maintainer approval and public availability are required before
|
|
45
|
-
recording its tag or removing npm versions `1.0.0` and `0.0.0-stage`. Hosted
|
|
46
|
-
validation and actual publication are separate evidence from these local checks.
|
|
47
|
-
|
|
48
|
-
## Release pipeline candidate - 2026-10-10
|
|
49
|
-
|
|
50
|
-
The normal `beta` branch planner computed `1.0.0` without tags or publication.
|
|
51
|
-
The final distribution manifest was generated at that version before packing;
|
|
52
|
-
the root remained private. Strict types, lint, 98 colocated Vitest tests,
|
|
53
|
-
43 process tests, installed-package runtime checks and typed consumers passed.
|
|
54
|
-
Registry verification passed for 606 signatures and 186 attestations.
|
|
55
|
-
|
|
56
|
-
The runtime audit is clean. The development tree has 10 high and two moderate
|
|
57
|
-
affected-package findings, covering 12 active advisory IDs. These are admitted
|
|
58
|
-
only with the exact paths, versions, callable guards and November 9 expiry in
|
|
59
|
-
[the release security review](release-security.md). Tests reject unknown
|
|
60
|
-
findings, runtime occurrences, drift, expired policy and malformed audit data.
|
|
61
|
-
|
|
62
|
-
The native publisher tests cover archive substitution, source mismatch, event
|
|
63
|
-
and workflow restrictions, npm failure before tag creation, registry integrity
|
|
64
|
-
collision, tag collision, recovery and removal of inherited credentials/config.
|
|
65
|
-
No publication was performed by these local tests. The npm package lookup is
|
|
66
|
-
still 404; npm requires an existing package to configure OIDC trust. See
|
|
67
|
-
[the current release guide](releasing.md) for launch and recovery steps.
|
|
68
|
-
Earlier dated entries below describe their historical state.
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
This is a chronological validation log. Older entries describe earlier APIs,
|
|
72
|
-
names, versions and installation policies. Use the README for the current
|
|
73
|
-
`resolve()` / `replace` API and the release guide for the current release plan.
|
|
74
|
-
|
|
75
|
-
## Normal release branch beta - 2026-10-08
|
|
76
|
-
|
|
77
|
-
Changed the semantic-release draft to one normal release branch,
|
|
78
|
-
`{ name: 'beta', channel: 'beta' }`, without a `prerelease` property. CI checks
|
|
79
|
-
`beta` and the current `titan/beta` preparation branch. This supersedes the
|
|
80
|
-
earlier version plan: the initial candidate is `1.0.0` on npm's `beta` channel,
|
|
81
|
-
rather than a `1.0.0-beta.1` prerelease.
|
|
82
|
-
|
|
83
|
-
An isolated local remote held only `beta` at source commit
|
|
84
|
-
`a182ec0c04034f84c01b2f770631970256dd30d1`. The real semantic-release engine,
|
|
85
|
-
using the checked-in branch configuration and the existing temporary intake
|
|
86
|
-
installation, calculated version `1.0.0`, tag `v1.0.0`, channel `beta` from
|
|
87
|
-
26 commits. It used only the analyzer plugin, with dry-run enabled and no
|
|
88
|
-
registry/GitHub credentials. Assertions confirmed unchanged remote refs and
|
|
89
|
-
no tags. The initial fixture attempt had a dangling remote HEAD after removing
|
|
90
|
-
its older branches; setting the fixture's HEAD to `beta` corrected the fixture.
|
|
91
|
-
|
|
92
|
-
Compared the reference repository at `100f323544ec0a517eeabd978c60fe5eb7170ca6`;
|
|
93
|
-
the release guide records the reusable contracts and required adaptations.
|
|
94
|
-
A refreshed audit of the isolated release-tool tree still reported 10 high and
|
|
95
|
-
two moderate findings. No dependency was admitted and no publishing job was
|
|
96
|
-
enabled. Visibility, default-branch selection and older-branch deletion remain
|
|
97
|
-
separate settings changes.
|
|
98
|
-
|
|
99
|
-
Lint, the dual-format build, 16 packed runtime checks and two typed consumers
|
|
100
|
-
passed on Node 24.19.0. Static workflow parsing verified the branch triggers,
|
|
101
|
-
unchanged read-only job permissions and timeouts; local documentation links
|
|
102
|
-
resolved. No package or lockfile dependency changed.
|
|
103
|
-
|
|
104
|
-
## MIT license - 2026-10-08
|
|
105
|
-
|
|
106
|
-
Added the MIT license with copyright 2026 ciqol contributors. The root manifest,
|
|
107
|
-
lockfile root entry and generated distribution manifest declare MIT. Current
|
|
108
|
-
usage, contribution, build and release docs reflect the selection; earlier
|
|
109
|
-
entries below retain their historical license status.
|
|
110
|
-
|
|
111
|
-
The Node 24.19.0 build and packed-consumer checks passed: 16 runtime probes and
|
|
112
|
-
two typed consumers covering CommonJS and ESM. An additional archive check
|
|
113
|
-
verified that `package/LICENSE` matches the source license byte for byte and
|
|
114
|
-
that the packed manifest remains private. The lockfile comparison confirmed
|
|
115
|
-
that dependency entries and versions are unchanged. No visibility change, tag,
|
|
116
|
-
release, PR or npm publication was made.
|
|
117
|
-
|
|
118
|
-
## CI-only publication clarification - 2026-10-08
|
|
119
|
-
|
|
120
|
-
The user confirmed that npm publication must run through GitHub Actions with
|
|
121
|
-
npm-side trusted publishing configured by the maintainer. Local npm login and
|
|
122
|
-
the earlier `ENEEDAUTH` result are not release blockers for that design. Agent
|
|
123
|
-
instructions, contributor guidance and the release checklist now record this
|
|
124
|
-
contract. The intended publisher is `ciqol/resenv`'s `ci.yml` workflow.
|
|
125
|
-
|
|
126
|
-
This documentation change does not enable a publishing job, admit release
|
|
127
|
-
dependencies, configure npm or GitHub protection settings, or publish a package.
|
|
128
|
-
The license, release-tooling review and CI release implementation remain
|
|
129
|
-
unfinished. npm provenance is distinct from OIDC authentication and requires
|
|
130
|
-
public source; repository visibility remains private.
|
|
131
|
-
|
|
132
|
-
## Beta release preflight - 2026-10-08
|
|
133
|
-
|
|
134
|
-
After the user requested the beta release, `npm run release:check` passed on
|
|
135
|
-
Node 24.19.0: lint, strict source/spec type checks, the dual-format build,
|
|
136
|
-
73 unit tests, 43 process tests, 16 installed-package runtime probes, two typed
|
|
137
|
-
consumers and `npm pack ./dist --dry-run`. `npm audit --audit-level=high`
|
|
138
|
-
reported zero vulnerabilities in the existing project tree. The latest hosted
|
|
139
|
-
CI at source commit `a461ce49903d620ced4c18ce1a90157b46591fc6` also passed.
|
|
140
|
-
|
|
141
|
-
A temporary release-tool installation verified 447 registry signatures and
|
|
142
|
-
121 attestations, with no install lifecycle hooks found. An isolated local
|
|
143
|
-
Git clone and local bare remote, without publishing plugins or credentials,
|
|
144
|
-
then produced a real semantic-release dry-run result of `1.0.0-beta.1` on
|
|
145
|
-
channel `beta` for that source commit. No tag was created. Release notes were
|
|
146
|
-
generated separately from the analyzed commits. This supersedes the earlier
|
|
147
|
-
entry's statement that no dry run had been performed, while leaving hosted
|
|
148
|
-
authentication, stable promotion and actual publication unverified.
|
|
149
|
-
|
|
150
|
-
No dependency was admitted into the project, and the audit gate is unchanged.
|
|
151
|
-
The release-tool tree still has an unpatched high-severity braces advisory and
|
|
152
|
-
other findings. npm authentication and the separate license choice are also
|
|
153
|
-
pending. The full check exercised the private prototype archive, not a final
|
|
154
|
-
publication candidate. No release, tag or registry publication was created.
|
|
155
|
-
|
|
156
|
-
## Default preload command isolation and beta configuration - 2026-10-08
|
|
157
|
-
|
|
158
|
-
The canonical and compatibility cloud preloads are now each checked through
|
|
159
|
-
both `--require` and `--import` with a whole-value command that would create a
|
|
160
|
-
file if executed. All four must preserve the exact expression and leave the
|
|
161
|
-
file absent, even with RESENV_COMMANDS=true. A throwing credential worker
|
|
162
|
-
confirms that plain command text triggers no provider work.
|
|
163
|
-
|
|
164
|
-
The semantic-release beta configuration is a draft with dryRun enabled.
|
|
165
|
-
No tooling dependency was admitted, no GitHub workflow or publication was
|
|
166
|
-
enabled, and a semantic-release dry run is not claimed. The isolated temporary
|
|
167
|
-
intake audit identified an unpatched high-severity dependency; see dependencies.md.
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
## Concise resolver API - 2026-10-08
|
|
171
|
-
|
|
172
|
-
The public function is now `resolve(env = process.env, options = {})`.
|
|
173
|
-
`replace: true` opts into updating the input; the default remains `false`, and
|
|
174
|
-
successful calls always return an independent copy. The earlier `resolveEnv`
|
|
175
|
-
name and `inPlace` option are removed from this unpublished candidate. Preload
|
|
176
|
-
paths remain unchanged. Shell commands remain explicit opt-in trusted code;
|
|
177
|
-
provider output is never evaluated recursively.
|
|
178
|
-
|
|
179
|
-
Lint, strict source/spec type checks, the dual-format build, 73 unit tests,
|
|
180
|
-
43 process tests, 16 installed-package runtime probes and two typed consumers
|
|
181
|
-
passed on Node 24.19.0. Consumer tests reject the removed function and option,
|
|
182
|
-
check the shared CommonJS/ESM export, and enforce boolean `replace` values.
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
## Inferred provider selection - 2026-10-08
|
|
186
|
-
|
|
187
|
-
`resolveEnv()` now infers Doppler from original `doppler://` values without a
|
|
188
|
-
provider option, matching the canonical preload and CLI. The `doppler` option
|
|
189
|
-
is removed. Copy mode remains the default; `inPlace: true` commits replacements
|
|
190
|
-
only after success. `commands: true` explicitly permits shell execution, including
|
|
191
|
-
commands that supply a Doppler token in the same resolution pass.
|
|
192
|
-
|
|
193
|
-
Lint, strict source/spec checks, the dual-format build, 73 Vitest unit tests and
|
|
194
|
-
43 process tests passed on Node 24.19.0. The packed package passed 16 runtime
|
|
195
|
-
probes and two typed consumers. Consumer compilation rejects the removed
|
|
196
|
-
`doppler` option and non-boolean replacement/command options. Added checks cover
|
|
197
|
-
library defaults in CommonJS and ESM, no-reference startup without credential
|
|
198
|
-
access, invalid references before command execution, atomic cloud failures,
|
|
199
|
-
cloud-provided decryption keys and literal cloud output with commands enabled.
|
|
200
|
-
All provider requests use isolated stubs and dummy credentials.
|
|
201
|
-
|
|
202
|
-
## Unified resolver API - 2026-10-08
|
|
203
|
-
|
|
204
|
-
The public API exposes one `resolveEnv(env = process.env, options = {})`
|
|
205
|
-
function. It always returns an independent resolved copy. `inPlace` defaults
|
|
206
|
-
to `false`; setting it to `true` also commits replacements to the input after
|
|
207
|
-
all resolution and target checks succeed. The earlier `resolveEnvInPlace`
|
|
208
|
-
export is removed from this unpublished candidate. Preloads explicitly enable
|
|
209
|
-
replacement; the CLI uses the returned copy for its child process.
|
|
210
|
-
|
|
211
|
-
`npm run verify` passed on Node 24.19.0: lint, strict implementation/spec
|
|
212
|
-
type checks, dual-format build, 68 Vitest unit tests, 40 process tests,
|
|
213
|
-
16 installed runtime probes and two typed consumers. Added checks cover frozen
|
|
214
|
-
inputs in copy mode, independent results in replacement mode, no-reference
|
|
215
|
-
copies, default `process.env` behavior and the removed export in both module
|
|
216
|
-
formats. Invalid `inPlace` types fail consumer compilation. Existing tests
|
|
217
|
-
still cover atomic failures, property descriptors, setters, proxies and
|
|
218
|
-
startup resolution before application imports.
|
|
219
|
-
|
|
220
|
-
## User and contributor documentation - 2026-10-07
|
|
221
|
-
|
|
222
|
-
The README now leads with package installation and application use. Checkout
|
|
223
|
-
setup, build/test commands, local packaging and application links live in
|
|
224
|
-
CONTRIBUTING.md. Standard setup, CI and package checks no longer suppress npm
|
|
225
|
-
lifecycle scripts; dependency versions and lock entries are unchanged.
|
|
226
|
-
|
|
227
|
-
A fresh offline install from the existing cache passed on Node 24.19.0/npm
|
|
228
|
-
11.17.0 with normal script behavior, followed by all 65 unit tests, 40 process
|
|
229
|
-
tests, lint, strict type checks and the dual-format build. npm warned about
|
|
230
|
-
script-review metadata for optional fsevents; see [the inspection](dependencies.md).
|
|
231
|
-
|
|
232
|
-
Package verification now also runs the documented `npx --no-install resenv
|
|
233
|
-
--help` invocation in the isolated installed consumer. This checks npm's CLI
|
|
234
|
-
link, using an offline cache and empty user/global npm configuration files.
|
|
235
|
-
|
|
236
|
-
## First beta preparation - 2026-10-07
|
|
237
|
-
|
|
238
|
-
The `titan/beta` candidate uses `0.1.0-beta.1` in the development manifest,
|
|
239
|
-
lockfile and generated distribution manifest. Both manifests remain private;
|
|
240
|
-
the intended npm channel is explicitly `beta`. No package, release or tag has
|
|
241
|
-
been published. The first stable version remains `0.1.0`.
|
|
242
|
-
|
|
243
|
-
`npm run release:check` passed on Node 24.19.0: lint, strict source/spec type
|
|
244
|
-
checks, dual-format build, all 65 Vitest unit tests, all 40 process tests, 13
|
|
245
|
-
installed-package runtime probes and both typed consumers. The pack dry run
|
|
246
|
-
reported the beta name/version and 60 files. The installed-package check also
|
|
247
|
-
verifies that the generated manifest retains the intended registry/channel.
|
|
248
|
-
|
|
249
|
-
Preparation exposed a stable-only version assertion in the login fixture. It
|
|
250
|
-
now checks the exact manifest version, including its prerelease suffix.
|
|
251
|
-
Generated coverage output is excluded from lint so collecting coverage does
|
|
252
|
-
not change subsequent lint results.
|
|
253
|
-
|
|
254
|
-
The workflow parsed successfully and its branch filters, read-only permissions,
|
|
255
|
-
timeouts and credential-free checkouts passed structural checks. Push validation
|
|
256
|
-
now covers `titan/beta` and GitHub's observed default branch,
|
|
257
|
-
`titan/prepare-first-release`.
|
|
258
|
-
|
|
259
|
-
Gitleaks scanned all local Git refs with redacted output. Its nine detections
|
|
260
|
-
were reviewed as synthetic token fixtures in current and older tests. No real
|
|
261
|
-
credential was identified. No tracked dotenv/key/archive files or personal
|
|
262
|
-
absolute paths were found in the reviewed history. The previously distributed
|
|
263
|
-
`0.1.0` archive retained its recorded SHA-256. These checks do not establish that
|
|
264
|
-
the repository is free of every possible sensitive value.
|
|
265
|
-
|
|
266
|
-
The registry lookup returned 404, and local npm identity was unavailable
|
|
267
|
-
(`ENEEDAUTH`). License approval, verified npm publishing access and the release
|
|
268
|
-
publishing workflow remain outstanding. See [release preparation](releasing.md).
|
|
269
|
-
|
|
270
|
-
## Colocated Vitest specs - 2026-10-07
|
|
271
|
-
|
|
272
|
-
Unit tests now live beside their source modules as `*.spec.ts` and run with
|
|
273
|
-
Vitest 4.1.11. The ten suites cover the resolver, commands, preload state,
|
|
274
|
-
value guards and each Doppler module. All previous regression cases remain;
|
|
275
|
-
new isolated command/preload checks bring the suite to 65 unit tests. The
|
|
276
|
-
40 process tests remain in `test/` alongside package and integration checks.
|
|
277
|
-
Unit tests import source and mock or inject external effects; process tests
|
|
278
|
-
exercise compiled output with dummy values and temporary fixtures.
|
|
279
|
-
|
|
280
|
-
Typed ESLint, strict source/spec TypeScript checks, the dual-format Rollup build,
|
|
281
|
-
65 unit tests and 40 process tests passed locally on Node 24.19.0. Specs are
|
|
282
|
-
excluded from production JavaScript and declarations. The packed-package check
|
|
283
|
-
also rejects spec files and the Vitest/Vite development dependencies.
|
|
284
|
-
|
|
285
|
-
`npm run test:coverage` reports 92.41% source line coverage and 90.36% branch
|
|
286
|
-
coverage from unit tests alone. It includes the worker and preload entry files
|
|
287
|
-
whose process behavior is checked separately; the earlier compiled-module
|
|
288
|
-
figures below combine a different set of tests and are not directly comparable.
|
|
289
|
-
Text and lcov reports are generated locally. CI runs source unit coverage before
|
|
290
|
-
building, then tests the same archive across its runtime matrix.
|
|
291
|
-
|
|
292
|
-
The updated development tree reported zero known vulnerabilities, 175 verified
|
|
293
|
-
registry signatures and 68 verified attestations. Existing dependency versions
|
|
294
|
-
and integrity hashes did not change; the additions are development-only.
|
|
295
|
-
|
|
296
|
-
## Unit-test coverage - 2026-10-06
|
|
297
|
-
|
|
298
|
-
Added 23 tests for credential lookup, persistence and deletion failures, CLI
|
|
299
|
-
credential selection and login verification, browser launch results, login
|
|
300
|
-
fallback and challenge validation, worker response validation, HTTP response
|
|
301
|
-
handling, UTF-8 size limits, environment copies and command deadline/cleanup
|
|
302
|
-
failures. Credential helpers, browser launchers and provider requests use
|
|
303
|
-
injected doubles with dummy data; these tests never access a real credential
|
|
304
|
-
store or Doppler account. Runtime behavior and dependencies are unchanged.
|
|
305
|
-
|
|
306
|
-
All 95 unit/process tests passed on local Node 24.19.0. Typed ESLint, strict
|
|
307
|
-
TypeScript checks, the Rollup build, 13 packed-package runtime checks and both
|
|
308
|
-
typed consumers passed. The offline package check required npm-cache access.
|
|
309
|
-
|
|
310
|
-
Run the coverage check after building:
|
|
311
|
-
|
|
312
|
-
```sh
|
|
313
|
-
node --test --experimental-test-coverage test/*.test.mjs
|
|
314
|
-
```
|
|
315
|
-
|
|
316
|
-
Node's report for the compiled modules increased from 93.84% to 97.08% line
|
|
317
|
-
coverage and from 85.35% to 91.96% branch coverage. Doppler auth, bridge, HTTP,
|
|
318
|
-
reference parsing, resolution and system adapters each have 100% line coverage.
|
|
319
|
-
Coverage from temporary package copies used by process fixtures is not included
|
|
320
|
-
in these module totals. This local result does not establish Windows support
|
|
321
|
-
or complete branch coverage.
|
|
322
|
-
|
|
323
|
-
## TypeScript implementation and maturity - 2026-10-06
|
|
324
|
-
|
|
325
|
-
The library and CLI now compile from TypeScript through Rollup's official
|
|
326
|
-
plugin. All 72 unit/process tests passed on local Node 24.19.0, along with
|
|
327
|
-
typed ESLint, strict implementation checks and the clean-consumer checks.
|
|
328
|
-
The archive passed 13 runtime checks and two strict typed consumers. Those
|
|
329
|
-
consumers have no Node types or build dependencies installed and do not rely
|
|
330
|
-
on implicit ambient types. Declarations come from the source implementation.
|
|
331
|
-
|
|
332
|
-
Nx 23.2.1 again passed target loading, local/shell precedence, isolation and
|
|
333
|
-
strict failure tests using dummy values and a temporary workspace. The existing
|
|
334
|
-
existing installation was used read-only. No real credentials were accessed.
|
|
335
|
-
|
|
336
|
-
The benchmark recorded 84.262 ms for eight unique mocked requests with 16
|
|
337
|
-
references and 40 ms simulated request latency, with peak concurrency four.
|
|
338
|
-
No-work resolution took 0.046 ms. Fresh-process medians were 44.776 ms for Node
|
|
339
|
-
alone, 52.256 ms with the CommonJS preload and 53.258 ms with the ESM preload.
|
|
340
|
-
These observations use the same benchmark method as the earlier review; small
|
|
341
|
-
startup differences include scheduling/filesystem noise.
|
|
342
|
-
|
|
343
|
-
The [static maturity report](maturity.md) records 88% across the full discovered
|
|
344
|
-
tree, including generated output, and 96% for maintained source. Remaining
|
|
345
|
-
catalog findings are the documented install-hook policy and development files
|
|
346
|
-
intentionally absent from the generated distribution. Workflow YAML and
|
|
347
|
-
documentation links passed structural checks. actionlint was not installed;
|
|
348
|
-
the local check is not an actionlint result.
|
|
349
|
-
|
|
350
|
-
Runtime dependency versions and integrity values remain unchanged. The complete
|
|
351
|
-
local development tree reported zero known vulnerabilities, 116 verified
|
|
352
|
-
registry signatures and 39 verified attestations.
|
|
353
|
-
|
|
354
|
-
[Hosted CI](https://github.com/ciqol/resenv/actions/runs/37472468215) passed for
|
|
355
|
-
`e0d6a8f`: the build checked the TypeScript implementation and produced one
|
|
356
|
-
archive. All four compatibility jobs passed 72 tests, 13 runtime package checks
|
|
357
|
-
and two typed consumers: Linux on Node 20, 22 and 24, and macOS on Node 24.
|
|
358
|
-
The Linux build verified 116 registry signatures and 40 attestations, with zero
|
|
359
|
-
known vulnerabilities. Counts describe each platform's installed tree.
|
|
360
|
-
|
|
361
|
-
This was a manual-dispatch run. The pull-request trigger was inspected but not
|
|
362
|
-
executed, because PR creation remains on hold. Existing distributed archives
|
|
363
|
-
retain their SHA-256 hashes. The documentation-only follow-up records the
|
|
364
|
-
tested commit without changing its implementation. The repository and generated
|
|
365
|
-
package stay private at 0.1.0; no PR, release or visibility change was made.
|
|
366
|
-
|
|
367
|
-
## Security, performance and standards review - 2026-10-06
|
|
368
|
-
|
|
369
|
-
All 70 unit/process tests passed locally on Node 20.20.2, 22.22.3 and 24.19.0
|
|
370
|
-
on macOS arm64. The installed 0.1.0 candidate passed 13 runtime checks and two
|
|
371
|
-
strict typed consumers on Node 24. Lint and declaration checks passed.
|
|
372
|
-
|
|
373
|
-
Nx 23.2.1 passed command and Doppler resolution, target loading, local/shell
|
|
374
|
-
precedence, target isolation and strict startup failures. The test used dummy
|
|
375
|
-
credentials and a temporary workspace with the existing Nx installation
|
|
376
|
-
read-only. No consumer files or live provider credentials were used.
|
|
377
|
-
|
|
378
|
-
The review reproduced and fixed native subprocess debug leakage, repeated
|
|
379
|
-
automatic resolution, malformed provider Unicode and partial in-place updates.
|
|
380
|
-
Cloud lookups now deduplicate and run with bounded concurrency. The mocked
|
|
381
|
-
eight-request benchmark fell from 332.069 ms to 81.705 ms; this is a synthetic
|
|
382
|
-
measurement, not a live provider guarantee. See the
|
|
383
|
-
[full review](security-performance-review.md) for evidence and limitations.
|
|
384
|
-
|
|
385
|
-
Runtime dependency versions and integrity values are unchanged. The full
|
|
386
|
-
development tree reported zero known vulnerabilities, 103 verified registry
|
|
387
|
-
signatures and 37 verified attestations locally. Existing distributed archives
|
|
388
|
-
remain unchanged.
|
|
389
|
-
|
|
390
|
-
[Hosted CI](https://github.com/ciqol/resenv/actions/runs/37462966577) passed for
|
|
391
|
-
`e57a8fe`: the build passed audits, lint and declaration checks, then produced
|
|
392
|
-
one archive. Linux jobs on Node 20, 22 and 24 and the macOS job on Node 24 each
|
|
393
|
-
passed all 70 tests, 13 installed runtime checks and two typed consumers. The
|
|
394
|
-
Linux build verified 103 registry signatures and 38 attestations. Counts apply
|
|
395
|
-
to each platform's installed tree. The following documentation-only commit
|
|
396
|
-
records this result without changing code.
|
|
397
|
-
|
|
398
|
-
## First public 0.1.0 candidate - 2026-10-06
|
|
399
|
-
|
|
400
|
-
The public version sequence starts at 0.1.0 as requested. Earlier sections
|
|
401
|
-
record unpublished prototype versions and are retained as historical evidence.
|
|
402
|
-
|
|
403
|
-
On macOS arm64, all 54 unit/process tests passed on Node 20.20.2, 22.22.3 and
|
|
404
|
-
24.19.0. The same 0.1.0 archive passed 13 runtime checks and two typed consumers
|
|
405
|
-
on each version. Package checks now also validate the supplied archive's name,
|
|
406
|
-
version, private manifest and CLI executable mode.
|
|
407
|
-
|
|
408
|
-
The first hosted run exposed missing registry metadata in a fresh npm cache.
|
|
409
|
-
The package check now constructs a consumer lockfile from the reviewed runtime
|
|
410
|
-
entries and the supplied archive, then uses offline `npm ci`. Both archive
|
|
411
|
-
paths passed with an isolated cache populated only by `npm ci`; no preexisting
|
|
412
|
-
registry metadata or source-tree dependencies were available to the consumer.
|
|
413
|
-
|
|
414
|
-
The changed workflow and contributor YAML files parsed successfully. A focused
|
|
415
|
-
check verified event selection, read-only permissions, pinned action references,
|
|
416
|
-
checkout credential handling, artifact prerequisites and absence of publishing.
|
|
417
|
-
This was local structural validation; actionlint was not available.
|
|
418
|
-
|
|
419
|
-
[Hosted CI](https://github.com/ciqol/resenv/actions/runs/37443670608) passed for
|
|
420
|
-
commit `5176128`: one Linux build and four test jobs on Linux (Node 20, 22 and
|
|
421
|
-
24) and macOS (Node 24). Every test job installed the same archive, passed all
|
|
422
|
-
13 runtime and two typed-consumer checks, then passed all 54 unit/process tests
|
|
423
|
-
against the extracted build. The build's audit and signature checks also passed.
|
|
424
|
-
|
|
425
|
-
Dependency audit reported no known vulnerabilities; ten registry signatures and
|
|
426
|
-
seven attestations verified. The three existing commits were inspected for
|
|
427
|
-
dotenv/archive files, provider-token patterns, private-key blocks and personal
|
|
428
|
-
paths, with no matches outside explicit dummy fixtures. This pattern-based
|
|
429
|
-
check is not a complete secret audit or independent security review.
|
|
430
|
-
|
|
431
|
-
License selection, the decryption-scope decision, fresh native browser login
|
|
432
|
-
and live repository/release setup remain separate launch requirements.
|
|
433
|
-
No provider calls, credential writes or changes to the local application setup
|
|
434
|
-
were needed for these checks. Both manifests stay private; no release or tag
|
|
435
|
-
was created.
|
|
436
|
-
|
|
437
|
-
## Version 0.6.0 - resenv package and resolve preload
|
|
438
|
-
|
|
439
|
-
Checked on 2026-10-04 on macOS arm64. All 54 unit/process tests passed on
|
|
440
|
-
Node 20.20.2, 22.22.3 and 24.19.0. On each version, the installed
|
|
441
|
-
`@ciqol/resenv` package passed 13 runtime checks and two typed consumers,
|
|
442
|
-
including `--require` and `--import` with the canonical `/resolve` preload.
|
|
443
|
-
Nx 23.2.1 passed command and Doppler resolution, target loading, precedence,
|
|
444
|
-
target isolation and strict startup failures using dummy credentials.
|
|
445
|
-
|
|
446
|
-
The local application uses the renamed preload and ignored package links.
|
|
447
|
-
Its 80 tests, ESLint and strict oxlint checks passed. The restarted detached
|
|
448
|
-
preview returned HTTP 200, and all three Doppler references resolved through
|
|
449
|
-
the HTTPS API. Google was configured and connected; Bing was configured.
|
|
450
|
-
Only boolean status and value-free diagnostics were inspected.
|
|
451
|
-
|
|
452
|
-
The consumer's manifests, lockfile, CI configuration and original 0.4.1 archive
|
|
453
|
-
remain unchanged. Its integration is local and uncommitted. Both package
|
|
454
|
-
manifests remain private. This rename keeps the existing OS credential-store
|
|
455
|
-
identifier; it does not change authentication or resolution behavior. Hosted
|
|
456
|
-
CI and the full native browser-approval flow remain unverified.
|
|
457
|
-
|
|
458
|
-
Earlier validation entries retain the names and versions checked at the time.
|
|
459
|
-
|
|
460
|
-
## Version 0.5.0 - inferred providers in the canonical preload
|
|
461
|
-
|
|
462
|
-
Checked on 2026-10-01 on macOS arm64. All 54 unit/process tests passed on Node
|
|
463
|
-
20.20.2, 22.22.3 and 24.19.0. On each version, the installed package passed 13
|
|
464
|
-
runtime checks and both typed consumer checks. The private package version is
|
|
465
|
-
0.5.0; existing 0.4.1 consumer archives remain unchanged.
|
|
466
|
-
|
|
467
|
-
Checks cover Doppler inference through `@ciqol/envref/register` in both module
|
|
468
|
-
formats and `envref run`, login-provider inference from inherited values,
|
|
469
|
-
literal shell expressions, and shared execution when the canonical and legacy
|
|
470
|
-
preload names are combined. Login rejects CI even with an interactive terminal.
|
|
471
|
-
Nx 23.2.1 passed target loading, local/shell precedence, target isolation and
|
|
472
|
-
strict failures using the canonical preload and dummy credentials.
|
|
473
|
-
|
|
474
|
-
A local consumer was linked to the built package without changing its
|
|
475
|
-
manifests, lockfile or workflows. Its serve command uses the canonical preload,
|
|
476
|
-
and its ignored `.env.serve.local` contains three Doppler references. All three
|
|
477
|
-
resolved through the HTTPS API using an existing login. The detached preview
|
|
478
|
-
returned HTTP 200; configuration checks confirmed Google was connected and both
|
|
479
|
-
providers were configured. Secret values were neither printed nor saved.
|
|
480
|
-
The consumer's 80 tests, ESLint and strict oxlint checks passed. Its project has
|
|
481
|
-
no separate typecheck target.
|
|
482
|
-
|
|
483
|
-
Initial artifact and Nx checks hit sandbox restrictions on npm cache writes
|
|
484
|
-
and Unix sockets; reruns with the required permissions passed. Hosted CI and
|
|
485
|
-
the full native browser-approval flow remain unverified. The consumer setup
|
|
486
|
-
remains local and was not committed or pushed.
|
|
487
|
-
|
|
488
|
-
## Doppler API resolution and browser login
|
|
489
|
-
|
|
490
|
-
Checked on 2026-10-01 on macOS arm64. The package remains private and
|
|
491
|
-
unpublished; no npm dependencies were added.
|
|
492
|
-
|
|
493
|
-
| Runtime | Unit/process tests | Installed artifact checks |
|
|
494
|
-
| --- | --- | --- |
|
|
495
|
-
| Node 20.20.2 | 52 passed | 13 runtime probes and 2 typed consumers passed |
|
|
496
|
-
| Node 22.22.3 | 52 passed | 13 runtime probes and 2 typed consumers passed |
|
|
497
|
-
| Node 24.19.0 | 52 passed | 13 runtime probes and 2 typed consumers passed |
|
|
498
|
-
|
|
499
|
-
The added checks cover reference validation, credential precedence, browser
|
|
500
|
-
login and CLI fallback, OS helper arguments and environment, request limits,
|
|
501
|
-
safe errors, literal fetched values, atomic updates, and both preload formats.
|
|
502
|
-
Browser authorization, API responses and Linux credential storage use test
|
|
503
|
-
doubles and dummy credentials. Runtime checks use a temporary package copy
|
|
504
|
-
with a stubbed worker; the shipped package has no API endpoint override.
|
|
505
|
-
|
|
506
|
-
Nx 23.2.1 integration passed for both command and Doppler modes: target dotenv
|
|
507
|
-
loading, local-file and inherited-shell precedence, target isolation, and
|
|
508
|
-
failure before application startup. The test uses an existing Nx installation
|
|
509
|
-
read-only and creates its own temporary workspace. It does not use the source
|
|
510
|
-
workspace's dotenv files or credentials.
|
|
511
|
-
|
|
512
|
-
Two narrow live checks also passed:
|
|
513
|
-
|
|
514
|
-
- Doppler's authorization challenge endpoint accepted envref's own version and
|
|
515
|
-
returned the expected response shape. No browser authorization was completed,
|
|
516
|
-
account credential issued, or real secret fetched.
|
|
517
|
-
- The macOS Keychain adapter stored and retrieved a dummy token through stdin
|
|
518
|
-
under a unique test service. The entry was removed and its absence verified.
|
|
519
|
-
Existing credentials were not read or changed.
|
|
520
|
-
|
|
521
|
-
Completing browser authorization and retrieving a real secret still need a
|
|
522
|
-
live check. Linux Secret Service and hosted GitHub Actions have not been tested
|
|
523
|
-
live. Windows native login and storage are not implemented.
|
|
524
|
-
|
|
525
|
-
The existing consumer tarball was retained unchanged, and no files in the
|
|
526
|
-
separate application checkout were modified. See [Doppler setup](doppler.md)
|
|
527
|
-
for the login protocol's compatibility limits and fallback behavior.
|
|
528
|
-
|
|
529
|
-
## Dual-format Rollup build
|
|
530
|
-
|
|
531
|
-
Checked on 2026-09-29 on macOS arm64 after converting source, tests and build
|
|
532
|
-
scripts to `.mjs`. The generated package remains private and unpublished.
|
|
533
|
-
|
|
534
|
-
| Runtime | Unit/process tests | Installed artifact checks |
|
|
535
|
-
| --- | --- | --- |
|
|
536
|
-
| Node 20.20.2 | 31 passed | 11 runtime probes and 2 typed consumers passed |
|
|
537
|
-
| Node 22.22.3 | 31 passed | 11 runtime probes and 2 typed consumers passed |
|
|
538
|
-
| Node 24.19.0 | 31 passed | 11 runtime probes and 2 typed consumers passed |
|
|
539
|
-
|
|
540
|
-
The artifact checks pack `dist/` and install the tarball into a temporary
|
|
541
|
-
consumer offline using cached, pinned runtime dependencies. They exercise CJS
|
|
542
|
-
and ESM library imports, both preload forms, the CLI, command resolution,
|
|
543
|
-
shared error-class identity, a Node environment with browser-like globals and
|
|
544
|
-
single execution when both preload forms are loaded. TypeScript 6.0.3 checks
|
|
545
|
-
`.cts` and `.mts` consumers, including expected errors for invalid arguments.
|
|
546
|
-
The consumer has no source-tree links or build dependencies.
|
|
547
|
-
|
|
548
|
-
The 16 upstream ciphertext checks passed against `@dotenvx/primitives` 3.0.3
|
|
549
|
-
on Node 24.19.0. The runtime dependency versions did not change. Build dependency
|
|
550
|
-
evidence and its provenance limits are recorded in [dependencies.md](dependencies.md).
|
|
551
|
-
|
|
552
|
-
The revised workflow was parsed and inspected for its compatibility matrix,
|
|
553
|
-
action pins, permissions and build/test order. It has not run on GitHub; Linux
|
|
554
|
-
and hosted-runner results remain unverified. Earlier tarballs consumed by
|
|
555
|
-
other projects are retained unchanged.
|
|
556
|
-
|
|
557
|
-
## Release preparation - Nx and package checks
|
|
558
|
-
|
|
559
|
-
Checked on 2026-09-29 on macOS arm64 with Node 24.19.0.
|
|
560
|
-
|
|
561
|
-
- All 31 unit and process tests passed after the release-preparation changes.
|
|
562
|
-
- `npm run test:package` passed five checks against the packed artifact:
|
|
563
|
-
the library, CLI, CommonJS preload, ES module preload and command preload.
|
|
564
|
-
It verifies package exports and contents in a temporary consumer using the
|
|
565
|
-
existing reviewed dependency tree; it does not fetch packages or publish.
|
|
566
|
-
- `npm run test:nx -- /absolute/path/to/workspace/node_modules` passed against
|
|
567
|
-
Nx 23.2.1. A temporary workspace verifies `.env.serve` loading, precedence
|
|
568
|
-
of `.env.serve.local` and inherited shell values, isolation from other
|
|
569
|
-
targets, and failure before application startup when a command fails.
|
|
570
|
-
All fixture values are dummy data. The source workspace's dotenv files and
|
|
571
|
-
credentials are not used.
|
|
572
|
-
- The Linux/macOS GitHub Actions workflow is prepared but has not run on
|
|
573
|
-
GitHub. Local checks do not establish Linux or hosted-runner compatibility.
|
|
574
|
-
- A focused review check confirmed that the command output limit is shared
|
|
575
|
-
across stdout and stderr. A dummy command producing 40,000 bytes on either
|
|
576
|
-
stream succeeded; 40,000 bytes on both streams failed with `COMMAND_FAILED`.
|
|
577
|
-
The README now describes the combined budget. Runtime behavior is unchanged.
|
|
578
|
-
|
|
579
|
-
The integration script accepts an existing, separately reviewed Nx installation
|
|
580
|
-
so Nx does not become a runtime dependency of envref.
|
|
581
|
-
|
|
582
|
-
A local application was also started through its own Nx `serve` target with
|
|
583
|
-
the command preload. Three existing cloud secret references resolved at
|
|
584
|
-
startup; the page and configuration-status endpoint both returned HTTP 200.
|
|
585
|
-
Only status flags and safe envref diagnostics were inspected. This manual check
|
|
586
|
-
does not exercise provider API operations or replace the dummy-data tests.
|
|
587
|
-
|
|
588
|
-
## Version 0.4.1 - clearer log messages
|
|
589
|
-
|
|
590
|
-
All 31 tests passed on Node 24.19.0 on 2026-09-29. Success and failure messages
|
|
591
|
-
now describe secret replacement; the logging behavior and dependency tree are
|
|
592
|
-
unchanged. Escaped variable names and secret-output checks still pass.
|
|
593
|
-
|
|
594
|
-
## Version 0.4.0 - native debug logging
|
|
595
|
-
|
|
596
|
-
Checked on 2026-09-29 on macOS arm64. All 31 tests passed on Node 20.20.2
|
|
597
|
-
and 24.19.0. Diagnostics now use `node:util`'s `debuglog('envref')` and
|
|
598
|
-
`NODE_DEBUG=envref`. Tests verify one result per attempted variable, a final
|
|
599
|
-
summary, a single "Nothing to handle" line for empty work, and safe command
|
|
600
|
-
and decryption failures. Existing tests verify quiet default behavior.
|
|
601
|
-
|
|
602
|
-
Secrets, command text and provider output remain absent from logs, and variable
|
|
603
|
-
names containing newlines stay escaped. The dependency tree is unchanged.
|
|
604
|
-
|
|
605
|
-
## Version 0.3.0 - opt-in diagnostics
|
|
606
|
-
|
|
607
|
-
Checked on 2026-09-29 on macOS arm64. All 31 tests passed on Node 20.20.2
|
|
608
|
-
and 24.19.0. Four new tests cover ordered JSON events, resolution identifiers,
|
|
609
|
-
safe failure details, disabled command mode, empty environments and an explicit
|
|
610
|
-
API override for the debug flag. Existing tests verify quiet default behavior.
|
|
611
|
-
|
|
612
|
-
The diagnostic tests check that command text, stdout, stderr, private keys,
|
|
613
|
-
ciphertext and plaintext are absent from logs. Newline-containing variable
|
|
614
|
-
names remain escaped inside a single JSON record. Tests use dummy values only.
|
|
615
|
-
The dependency tree is unchanged.
|
|
616
|
-
|
|
617
|
-
## Version 0.2.0 — command resolution
|
|
618
|
-
|
|
619
|
-
Checked on 2026-09-29 on macOS arm64. The command suite adds eight tests for
|
|
620
|
-
explicit opt-in, complete-value expressions, nested shell commands, fetched
|
|
621
|
-
private keys, preserving literal output, atomic environment updates, safe
|
|
622
|
-
errors, output limits, timeout cleanup and the CLI/preload entry points.
|
|
623
|
-
|
|
624
|
-
All 27 tests passed on Node 20.20.2, 24.19.0 and 26.10.0. The 16 upstream
|
|
625
|
-
ciphertext compatibility checks also passed on each version.
|
|
626
|
-
|
|
627
|
-
The implementation uses Node's standard library and `/bin/sh`; it adds no
|
|
628
|
-
dependencies. Tests execute only local dummy commands. A real Doppler account
|
|
629
|
-
or cloud secret was not accessed.
|
|
630
|
-
|
|
631
|
-
At the time of this baseline check, Nx's source depended on `dotenv-expand ~12.0.3`. Its variable-expansion
|
|
632
|
-
pattern leaves the `$(doppler ...)` form intact, so the reference reaches the
|
|
633
|
-
application environment. This is a source inspection, not a full Nx workspace
|
|
634
|
-
integration test. A user's installed Nx and dotenv loader versions still need
|
|
635
|
-
to be checked when integrating an existing project.
|
|
636
|
-
|
|
637
|
-
Sources: [Nx dependencies](https://github.com/nrwl/nx/blob/master/packages/nx/package.json),
|
|
638
|
-
[Nx task loading](https://github.com/nrwl/nx/blob/master/packages/nx/src/tasks-runner/task-env.ts),
|
|
639
|
-
[dotenv-expand 12.0.3](https://github.com/motdotla/dotenv-expand/blob/v12.0.3/lib/main.js).
|
|
640
|
-
|
|
641
|
-
## Version 0.1.0 — encryption baseline
|
|
642
|
-
|
|
643
|
-
Checked on 2026-09-28 on macOS arm64 using generated dummy secrets only.
|
|
644
|
-
|
|
645
|
-
| Check | Result |
|
|
646
|
-
| --- | --- |
|
|
647
|
-
| Node 20.20.2 | 19 unit and process tests passed |
|
|
648
|
-
| Node 24.19.0 | 19 unit and process tests passed |
|
|
649
|
-
| Node 26.10.0 | 19 unit and process tests passed |
|
|
650
|
-
| Upstream ciphertext compatibility | 16 checks passed on each of the three Node versions |
|
|
651
|
-
| npm registry signatures | All 5 installed dependencies verified |
|
|
652
|
-
| npm provenance attestations | All 5 installed dependencies verified |
|
|
653
|
-
| npm audit / OSV | No known vulnerabilities reported for the reviewed versions |
|
|
654
|
-
| Private package installation | Local tarball installed offline in a separate temporary project |
|
|
655
|
-
| Installed package exports | CLI, CommonJS preload, ES module preload and library import passed |
|
|
656
|
-
|
|
657
|
-
The installed tarball kept the five reviewed dependency versions. Its eight
|
|
658
|
-
files contain the runtime, type declarations and documentation; no dotenv files,
|
|
659
|
-
test credentials or `node_modules` are included. The CLI is executable.
|
|
660
|
-
|
|
661
|
-
## Upstream compatibility
|
|
662
|
-
|
|
663
|
-
The upstream check, now `test/interop.mjs`, used a separately installed `@dotenvx/primitives` 3.0.3
|
|
664
|
-
to create fresh keys and ciphertext and confirm the plaintext with its own
|
|
665
|
-
decrypt function. envref then resolved the same ciphertext through its library,
|
|
666
|
-
command wrapper, CommonJS preload and ES module preload.
|
|
667
|
-
|
|
668
|
-
The plaintext cases cover empty values, a leading byte order mark, ordinary
|
|
669
|
-
text, Unicode, line breaks and shell-like text that must remain literal. The
|
|
670
|
-
working directory remained empty throughout. The upstream package is a
|
|
671
|
-
verification input only and is not part of envref's dependency tree.
|
|
672
|
-
|
|
673
|
-
To repeat after separately installing and reviewing the upstream package:
|
|
674
|
-
|
|
675
|
-
```sh
|
|
676
|
-
node test/interop.mjs /absolute/path/to/node_modules/@dotenvx/primitives
|
|
677
|
-
```
|
|
678
|
-
|
|
679
|
-
The surrounding upstream investigation used dotenvx CLI 2.31.1. No compatibility
|
|
680
|
-
claim is made for future changes to the ciphertext format.
|
|
681
|
-
|
|
682
|
-
## Runtime coverage and limits
|
|
683
|
-
|
|
684
|
-
The tests exercise inherited environments, failure before application startup,
|
|
685
|
-
all-or-nothing decryption, key rotation, tampered ciphertext, no dotenv loading
|
|
686
|
-
or modification, literal argument handling, stdin, exit status and SIGTERM
|
|
687
|
-
forwarding. Plaintext and keys do not appear in envref error messages.
|
|
688
|
-
|
|
689
|
-
The process tests simulate the environment passed by a task runner. The
|
|
690
|
-
separate Nx integration check above now verifies the real task runner with
|
|
691
|
-
an application preload and target-specific dotenv files. It tests the installed
|
|
692
|
-
Nx version listed above; other loaders or versions need their own integration
|
|
693
|
-
check, particularly if they resolve commands before envref runs.
|
|
694
|
-
|
|
695
|
-
Signal behavior is covered by the Linux and macOS process tests. Windows signal
|
|
696
|
-
behavior and framework-specific reloaders remain unverified. The wrapper
|
|
697
|
-
forwards signals to its direct child, not an arbitrary detached process tree.
|
|
698
|
-
|
|
699
|
-
This is a private prototype with no independent security audit. The application
|
|
700
|
-
and any code granted the same credentials can read its environment.
|