adb-ready 0.3.2 → 0.3.4

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/CHANGELOG.md CHANGED
@@ -9,6 +9,41 @@ breaking changes.
9
9
 
10
10
  ## [Unreleased]
11
11
 
12
+ ## [0.3.4] - 2026-09-12
13
+
14
+ ### Added
15
+
16
+ - Publish the verified LCOV report to Codecov through short-lived GitHub OIDC
17
+ credentials and show the measured `main` coverage in a live README badge.
18
+
19
+ ### Changed
20
+
21
+ - Raise the authoritative LCOV line and function coverage floors from 90% to
22
+ 95% with additional lifecycle, recovery, agent, configuration, persistence,
23
+ platform, terminal, and protocol boundary tests.
24
+
25
+ ### Fixed
26
+
27
+ - Keep a development session running when optional local session history cannot
28
+ be initialized or finalized, while reporting the persistence gap as a warning.
29
+ - Return a structured target-lease availability error when its per-user state
30
+ directory cannot be created instead of leaking an internal filesystem error.
31
+
32
+ ## [0.3.3] - 2026-09-11
33
+
34
+ ### Changed
35
+
36
+ - Fail closed before npm publishing unless the immutable release tag already
37
+ has a matching draft GitHub release.
38
+ - Isolate the push-level permission needed to inspect that draft release in a
39
+ preflight job that never checks out or executes repository code.
40
+ - Allow the audited workflow on protected `main` to promote an exact immutable
41
+ release tag, so release-infrastructure fixes never require moving that tag.
42
+ - Document Deno's 24-hour minimum dependency age and the explicit override
43
+ reserved for immediate post-publish verification.
44
+ - Enforce 90% LCOV line and function coverage floors in the authoritative
45
+ verification gate and preserve its LCOV report in CI.
46
+
12
47
  ## [0.3.2] - 2026-09-11
13
48
 
14
49
  ### Fixed
@@ -207,7 +242,9 @@ breaking changes.
207
242
  explainable configuration precedence.
208
243
  - Human, plain, JSON, and NDJSON output across Node, Bun, and Deno entrypoints.
209
244
 
210
- [Unreleased]: https://github.com/Adam014/adb-ready/compare/v0.3.2...HEAD
245
+ [Unreleased]: https://github.com/Adam014/adb-ready/compare/v0.3.4...HEAD
246
+ [0.3.4]: https://github.com/Adam014/adb-ready/compare/v0.3.3...v0.3.4
247
+ [0.3.3]: https://github.com/Adam014/adb-ready/compare/v0.3.2...v0.3.3
211
248
  [0.3.2]: https://github.com/Adam014/adb-ready/compare/v0.3.1...v0.3.2
212
249
  [0.3.1]: https://github.com/Adam014/adb-ready/compare/v0.3.0...v0.3.1
213
250
  [0.3.0]: https://github.com/Adam014/adb-ready/compare/v0.2.0...v0.3.0
package/README.md CHANGED
@@ -9,6 +9,7 @@ verified evidence—for developers, agents, and CI.
9
9
 
10
10
  [![MCP](https://img.shields.io/badge/MCP-native-7c3aed)](./docs/agent-integration.md)
11
11
  [![CI](https://github.com/Adam014/adb-ready/actions/workflows/ci.yml/badge.svg)](https://github.com/Adam014/adb-ready/actions/workflows/ci.yml)
12
+ [![Coverage](https://codecov.io/gh/Adam014/adb-ready/graph/badge.svg?branch=main)](https://app.codecov.io/gh/Adam014/adb-ready)
12
13
  [![npm](https://img.shields.io/npm/v/adb-ready?label=npm&color=1f9db5)](https://www.npmjs.com/package/adb-ready)
13
14
  [![Node.js](https://img.shields.io/badge/Node.js-%E2%89%A522-339933?logo=nodedotjs&logoColor=white)](https://nodejs.org/)
14
15
  [![Bun](https://img.shields.io/badge/Bun-tested-14151a?logo=bun&logoColor=white)](https://bun.sh/)
package/dist/cli.js CHANGED
@@ -355,7 +355,7 @@ import process13 from "node:process";
355
355
  // package.json
356
356
  var package_default = {
357
357
  name: "adb-ready",
358
- version: "0.3.2",
358
+ version: "0.3.4",
359
359
  description: "Agent-ready Android CLI for reliable ADB sessions, app automation, and verified evidence.",
360
360
  private: false,
361
361
  type: "module",
@@ -388,6 +388,7 @@ var package_default = {
388
388
  "ui:playground": "bun run scripts/ui-playground.ts",
389
389
  "ui:check": "bun run scripts/ui-playground.ts --all --non-interactive",
390
390
  test: "bun test",
391
+ "test:coverage": "bun test --coverage && bun run scripts/coverage-check.mjs",
391
392
  "test:commands": "bun run build && bun run scripts/command-matrix.mjs",
392
393
  "test:package-managers": "bun run build && bun run scripts/package-manager-smoke.mjs",
393
394
  "test:integration": "bun test tests/integration",
@@ -39233,7 +39234,10 @@ async function runDev(options, config4 = {}, dependencies = {}, signal) {
39233
39234
  projectRoot: options.sessionStore.projectRoot ?? options.cwd
39234
39235
  });
39235
39236
  } catch {
39236
- problems.push(commandProblem(ProblemCode.SessionPersistenceFailed, "session.persistence", "Session history could not be started.", "The development session can continue, but this run will not be available afterward.", context.commandId));
39237
+ problems.push({
39238
+ ...commandProblem(ProblemCode.SessionPersistenceFailed, "session.persistence", "Session history could not be started.", "The development session can continue, but this run will not be available afterward.", context.commandId),
39239
+ severity: "warning"
39240
+ });
39237
39241
  }
39238
39242
  }
39239
39243
  const complete = async (data) => {
@@ -39265,7 +39269,10 @@ async function runDev(options, config4 = {}, dependencies = {}, signal) {
39265
39269
  ...data?.preset === undefined ? {} : { preset: data.preset }
39266
39270
  });
39267
39271
  if (!persisted.ok) {
39268
- execution2.result.problems.push(commandProblem(ProblemCode.SessionPersistenceFailed, "session.persistence", persisted.message, "The development session completed, but its local history is incomplete.", context.commandId));
39272
+ execution2.result.problems.push({
39273
+ ...commandProblem(ProblemCode.SessionPersistenceFailed, "session.persistence", persisted.message, "The development session completed, but its local history is incomplete.", context.commandId),
39274
+ severity: "warning"
39275
+ });
39269
39276
  }
39270
39277
  }
39271
39278
  return execution2;
@@ -43273,7 +43280,15 @@ async function acquireTargetLease(request, options = {}) {
43273
43280
  throw new RangeError("target lease heartbeatIntervalMs must be non-negative and less than ttlMs");
43274
43281
  }
43275
43282
  const root = leaseDirectory(options);
43276
- await mkdir4(root, { recursive: true, mode: 448 });
43283
+ try {
43284
+ await mkdir4(root, { recursive: true, mode: 448 });
43285
+ } catch {
43286
+ return {
43287
+ ok: false,
43288
+ code: "TARGET_LEASE_UNAVAILABLE",
43289
+ message: "ADB Ready could not create the target ownership lease."
43290
+ };
43291
+ }
43277
43292
  const canonicalRoot = await realpath4(path11.resolve(request.projectRoot)).catch(() => path11.resolve(request.projectRoot));
43278
43293
  const targetFingerprint = fingerprint3(request.targetIdentity);
43279
43294
  const projectFingerprint = fingerprint3(`root:${process11.platform === "win32" ? canonicalRoot.toLowerCase() : canonicalRoot}`);
@@ -49033,4 +49048,4 @@ try {
49033
49048
  process14.removeListener("SIGTERM", abort);
49034
49049
  }
49035
49050
 
49036
- //# debugId=9FF39DC1195928CE64756E2164756E21
49051
+ //# debugId=3B60240054A5D38E64756E2164756E21