@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,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.