Skip to the content.

Chrome Web Store Review Working Doc (Open Questions)

Status: active decision log Role: Draft decision log Last updated: 2026-03-21 Purpose: track open product/policy decisions and engineering follow-up for Chrome Web Store submission concerns Source-of-truth: decision log for unresolved CWS review questions; do not treat open-question sections as settled product policy without explicit decision entries. Scope: Resolve five known review concerns for LexiShift Chrome extension submission.

2026-02-18 Discussion Notes (Current Decisions)

These points are confirmed from product discussion and should be treated as baseline unless changed:

  1. nativeMessaging is required for SRS value:
    • Extension must connect to helper to use installed dictionaries and update SRS.
  2. Install order:
    • Desktop app first or extension first can both work technically.
    • Current UX likely does not make the sequence obvious enough.
  3. Missing helper behavior:
    • Show much stronger warning in SRS area and extension status.
    • Handcrafted JSON rulesets should still work without helper (non-SRS path remains functional).
  4. Site coverage intent:
    • Product vision is full browsing experience, not limited-site experience.
    • Launch decision: all-sites out-of-box.
  5. Sensitive sentence storage:
    • Launch decision: sentence-history storage defaults OFF and needs additional research.
    • Sentence-history module records: no URL field.
    • Exposure telemetry (srsExposureLog) currently retains URL field (for now).
  6. Platform scope:
    • Roadmap target is macOS + Windows.
    • Current implementation maturity is higher on macOS.
  7. Team/approval reality:
    • Current release decision-making is effectively the two maintainers.
  8. Project staffing reality:
    • This is a personal/solo project, so release process must remain lightweight.

Why this document exists

This document is the formal source of truth for:

Concern 1: High-risk permission (nativeMessaging)

What we know

Open doubts to resolve

Product decisions needed from you

  1. Should CWS v1 require the desktop app/helper, or should extension run in a meaningful “no-helper mode”?
  2. If helper is required, what is the intended user onboarding sequence?
  3. What is the minimum acceptable degraded behavior when helper is missing?

Current decision state

Technical follow-up after decision

Concern 2: Broad host permission (<all_urls>)

What we know

Open doubts to resolve

Product decisions needed from you

  1. What is the intended default site coverage policy at launch?
  2. Are we willing to ship with narrower defaults to reduce review risk?
  3. What categories/domains should be blocked by policy even if technically possible?

Current decision state

Technical follow-up after decision

Concern 3: Native app protocol framing

What we know

Open doubts to resolve

Product decisions needed from you

  1. What platforms are officially supported for CWS launch?
  2. Do we need to support any non-little-endian environments in roadmap scope?

Current decision state

Technical follow-up after decision

Concern 4: MV3 service worker lifecycle

What we know

Open doubts to resolve

Product decisions needed from you

  1. What user experience is acceptable when service worker wakes and helper is unavailable?
  2. Which operations must be guaranteed (eventual success) vs best-effort?

Current decision state

Technical follow-up after decision

Concern 5: Asset completeness and localization

What we know

Open doubts to resolve

Product decisions needed from you

  1. Do you want a mandatory release checklist gate for extension packaging?
  2. Who is final approver for CWS upload readiness?

Current decision state

Technical follow-up after decision

Implementation status (2026-02-18)

Cross-cutting privacy/trust questions (needs product stance)

Current runtime stores page-derived data locally (for diagnostics/feedback history), including URL/source/excerpt fields. We need explicit product policy on this.

Product decisions needed from you

  1. What exact data classes are acceptable to persist locally by default?
  2. Should any of this be disabled by default and enabled only via explicit opt-in?
  3. What user-facing transparency text should appear in options/privacy docs?

Current decision state

Technical follow-up after decision

Decision log (to fill during discussion)

Use this table as we resolve each question.

Date Topic Decision Owner Notes
2026-02-18 Concern 1 (nativeMessaging) Required for SRS; non-SRS manual JSON rules remain functional without helper Product + Eng Onboarding UX still open
2026-02-18 Concern 2 (<all_urls>) All-sites out-of-box at launch; provisional no explicit exclusions Product + Eng Revisit only if policy/testing requires
2026-02-18 Concern 3 (protocol) Roadmap platforms: macOS + Windows Eng Endianness requirement still open
2026-02-18 Concern 4 (MV3 lifecycle) Manual rules guaranteed without helper; SRS actions fail-fast on helper loss; feedback queue retries eventually Product + Eng Queue limits/diagnostics tuning remains
2026-02-18 Concern 5 (asset completeness) Final approver pool = two maintainers; lightweight mandatory pre-upload gate adopted Product + Eng Checklist refinement remains
2026-02-18 Privacy data policy Sentence history default OFF; no URL retention in sentence/history data Product + Eng Additional research still required

Engineering guidance requested in discussion

A) “All pages” default vs extra enable step

Your instinct is valid in both directions:

Practical launch options:

  1. Keep current model:
    • host_permissions / content_scripts.matches include broad scope from install.
    • Lowest UX friction.
    • Highest review scrutiny.
  2. Runtime grant model:
    • Move broad host scope into optional_host_permissions.
    • Request access during onboarding/user gesture.
    • Slightly higher UX friction, stronger policy posture.

B) “Do we have to exclude sites?” and AdBlock-style comparison

Not strictly required by policy as a blanket rule. But minimization is required: permissions and data handling should be no broader than the stated user-facing purpose.

Ad blockers can justify broad scope because their single purpose is global page/request filtering. LexiShift can also justify broad scope, but should clearly document:

C) Sensitive field expectations (legal/policy + best practice)

Important policy baseline:

Best-practice recommendation for current sentence-history feature:

  1. Default off for sentence excerpt storage until explicit user opt-in.
  2. Keep strict retention bounds and easy clear/reset control.
  3. Consider storing reduced context (short excerpt + origin/domain only) rather than full URL/path.
  4. Incognito-safe behavior:
    • no persistence from incognito sessions unless explicitly enabled.
  5. Explicit in-product disclosure text near the setting and in privacy policy.

D) Non-little-endian protocol explanation

Native messaging frames require a 32-bit length prefix in native byte order.

Recommended policy:

E) What a pre-upload gate would include

A pre-upload gate is a required validation step (script + checklist) before publishing.

Suggested checks:

  1. Manifest integrity:
    • all referenced files exist,
    • icon dimensions match declared sizes,
    • locale placeholders resolve.
  2. Permission posture:
    • diff/report permissions and host patterns vs previous release.
  3. CWS metadata consistency:
    • single-purpose text, data-use declarations, privacy policy link.
  4. Native helper readiness:
    • production extension ID not placeholder,
    • helper install docs match release build.
  5. Policy lint:
    • no unexpected remote endpoints,
    • no debug/dev artifacts in package.
  6. Release sign-off record:
    • reviewer initials/date (two maintainers).

F) Helper unavailability: practical scenarios and implications

When helper can be unavailable:

  1. Helper not installed or host manifest missing.
  2. Helper process crashed or not running.
  3. Browser/service-worker wake after sleep while helper startup lags.
  4. Extension ID/host mismatch after reinstall/update.

User-visible impact categories:

  1. Must work offline from helper:
    • manual JSON rules and local replacement runtime.
  2. Best-effort with warning when helper missing:
    • SRS refresh/init/rulegen actions.
  3. Eventual consistency:
    • feedback queue should retry until helper returns.

Suggested default reliability policy (engineering recommendation):

  1. Manual rules path: guaranteed available without helper.
  2. SRS control actions: fail-fast with explicit blocking warning + one-click “fix helper” guidance.
  3. Feedback sync: eventual retry with bounded queue and visible queue health in diagnostics.

Instead of a heavy formal process, use a single command + short checklist:

  1. Run preflight script (npm run preflight:cws or equivalent) that checks:
    • manifest references,
    • icon/locale integrity,
    • placeholder extension IDs,
    • known policy-sensitive settings.
  2. Generate one markdown report in docs/runbooks/ with timestamp.
  3. Manual yes/no checklist (5 lines) before upload:
    • privacy text reviewed,
    • permissions unchanged or intentionally updated,
    • helper onboarding tested,
    • no debug artifacts,
    • package hash recorded.

This keeps quality high without enterprise-style ceremony.

Policy references (review baseline)