Skip to content

Guard against browser-API regressions and slow fix propagation #55

@djscruggs

Description

@djscruggs

Summary

Following #51 / #52 (navigator.credentials is non-configurable on WebKit, so
the Object.defineProperty() call added in 3.2.1 threw and loadOnce()
rejected on all iOS browsers and desktop Safari), two gaps remain that let the
regression both ship and linger in dependents:

  1. No browser test exercised load(). CI runs lint only — there was no
    automated assertion that load() succeeds in any browser, so the WebKit
    breakage shipped undetected from 3.2.1 onward.
  2. No signal pushed the fix downstream. Consumers pin ^4.0.x and would
    resolve the patched version on a fresh install, but lockfiles stayed pinned
    to the broken version and nothing prompted a bump + redeploy.

This issue proposes monitoring/guardrails across three layers. Decisions below
reflect maintainer feedback in the comments.

Layer 1 — Browser-API regression detection

1a. Cross-browser smoke test in CI (highest leverage).

1a-ext. Password-manager extension interference.

  • Browser password-manager extensions (Dashlane, 1Password, etc.) have
    previously manipulated navigator.credentials and caused breakage. Track
    known-problematic extensions and exercise the smoke test with them installed,
    so extension-induced regressions are caught alongside browser ones.

1b. External browser-release feed (optional second layer).

  • Watch WebKit/Chromium release notes and web-platform-tests deltas for
    Credential Management API / navigator.credentials changes, to flag upcoming
    behavior changes before they reach stable. Noisier; does not prove our code
    breaks (1a does).
  • Decision: deferred — prove 1a first, then reassess.

Layer 2 — Downstream propagation

2a. Dependabot.

  • Add .github/dependabot.yml (npm) so a new release auto-opens a
    lockfile-bump PR.
  • Decision: scope to this repo only for now.

2b. Staleness check.

  • A small script reporting, per consumer: pinned range, resolved (lockfile)
    version, and latest published — flagging anyone behind. Runnable on demand or
    on a schedule.
  • Decision: scheduling/ownership deferred (follows from the 1b/2a answers).

Layer 3 — External consumers

  • Publish release notes / advisory for the fix.
  • npm deprecate the affected version range with a message pointing at the
    WebKit breakage, so installers see a warning.
  • Decision: yes, do the npm deprecate.

Open questions

All resolved in the comments:

  1. WebKit in CI → bundled WebKit on Linux to start.
  2. Layer 1b → prove 1a first.
  3. Dependabot rollout → this repo only.
  4. Scheduling/ownership of 1b/2b → deferred.
  5. npm deprecate → yes.

Next step

Implement 1a (cross-browser Playwright smoke test, bundled WebKit) — the
single change that would have caught #51 pre-publish — plus the 1a-ext
password-manager-extension coverage.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions