shopflow-suite

ADR-001: Shopflow Repo Topology and Product Boundary

Context

Shopflow is not a continuation of the current Terry_Tampermonkey workspace.

The current Terry workspace is a broad governed scripts factory with multiple surfaces, heavy repo-wide governance, and mixed product lines. The shopping line inside that workspace is already valuable, but it is still packaged as scripts and metadata records rather than as a dedicated browser extension product family.

Current live inventory from the Terry workspace is:

The shopping line is the only scope that moves into Shopflow.

The business objective is also different from the Terry workspace objective:

The design pressure is therefore:

  1. Keep multiple storefront entrypoints for acquisition and discoverability
  2. Keep exactly one engineering source of truth
  3. Avoid turning 8+1 public apps into 9 independent engineering systems
  4. Avoid carrying the Terry workspace’s full governance surface into a narrower product repo

Decision

1. Shopflow is a completely independent new repository

Shopflow is created as a new repository, not as an in-place evolution of Terry_Tampermonkey.

This means:

2. Shopflow uses one Chrome-first monorepo

Shopflow will use one monorepo with a narrow product boundary.

Canonical top-level layout:

shopflow-suite/
  apps/
  packages/
  tests/
  docs/
  tooling/

The repo is optimized for browser extension delivery, not for preserving legacy script authoring categories such as extractors, searchers, deals, or utilities.

3. Product surface is fixed as 8+1 apps

Shopflow owns:

Canonical app set:

Public product family:

4. Shared engineering layers are fixed

Canonical shared packages:

Canonical store adapter packages:

Responsibilities:

5. Suite is a composition shell, not a parallel product system

ext-shopping-suite exists to:

ext-shopping-suite must not:

In plain language: Suite is a lobby, not a second building.

6. Public claim boundary is stricter than internal package naming

Engineering naming and public claim naming are different concerns.

Internal package names may use family-level grouping:

Public claims must stay tied to verified scopes:

This repo must never promote “theoretical family compatibility” as “verified family-wide support”.

7. Terry metadata is migration input only

The following legacy surfaces are migration sources only:

They are not future Shopflow runtime truth.

After migration, Shopflow source of truth becomes:

Product Boundary

Shopflow only owns the shopping line.

In scope:

Out of scope:

Alternatives Rejected

A. Keep building inside Terry_Tampermonkey

Rejected because:

B. Create 8 independent GitHub repos

Rejected because:

C. Build one giant shopping app only

Rejected because:

D. Split core and ui into their own standalone repos

Rejected because:

Consequences

Positive

Negative

Hard Rules

  1. apps/* must never import each other
  2. Shared logic flows through packages/* only
  3. packages/ui must not import packages/store-*
  4. packages/contracts must stay runtime-free
  5. Suite must not introduce a second logic plane
  6. Terry metadata must not survive as a hidden runtime SSOT after migration

Follow-up Documents

This ADR is only complete when the following documents are also treated as binding: