snipe/docs/user-guide/red-flags.md
pyr0ball 2dda26a911
Some checks failed
CI / Frontend typecheck + tests (push) Waiting to run
CI / Python tests (push) Waiting to run
Mirror / mirror (push) Has been cancelled
Release / release (push) Has been cancelled
feat: infra/devops batch — CI/CD, installer, nginx docs, cf-orch agent (v0.3.0)
Closes #15, #22, #24, #25. Closes #1 and #27 (already shipped in 0.2.0).

## CI/CD (#22)
- .forgejo/workflows/ci.yml — Python lint (ruff) + pytest + Vue typecheck + vitest
  on every PR/push. Installs cf-core from GitHub mirror for the CI runner.
- .forgejo/workflows/release.yml — Docker build/push (api + web) to Forgejo registry
  on v* tags; git-cliff changelog; multi-arch amd64+arm64.
- .forgejo/workflows/mirror.yml — push to GitHub + Codeberg mirrors.

## Self-hosted installer (#25)
- install.sh rewritten to match CF installer pattern: coloured output, named
  functions, --docker / --bare-metal / --help flags, auto-detect Docker/conda/
  Python/Node/Chromium/Xvfb, license key prompting with format validation.

## Nginx docs (#24)
- docs/nginx-self-hosted.conf — sample nginx config: SPA fallback, SSE proxy
  (proxy_buffering off), long-term asset cache headers.
- docs/getting-started/installation.md — bare-metal install section with nginx
  setup, Chromium/Xvfb note, serve-ui.sh vs nginx trade-off.

## cf-orch agent (#15)
- compose.override.yml — cf-orch-agent sidecar service (profiles: [orch]).
  Starts only with docker compose --profile orch. Registers with coordinator at
  CF_ORCH_COORDINATOR_URL (default 10.1.10.71:7700).
- .env.example — CF_ORCH_URL / CF_ORCH_COORDINATOR_URL comments expanded.

## Docs
- mkdocs.yml + full docs/ tree (getting-started, reference, user-guide) staged
  from prior session work.

Bump version 0.2.0 → 0.3.0.
2026-04-14 06:19:25 -07:00

2.5 KiB
Raw Blame History

Red Flags

Red flags appear as pills on listing cards when Snipe detects a concern. Each flag is independent — a listing can have multiple flags at once.

Hard red flags

These override the composite score display with a strong visual warning.

zero_feedback

Seller has received zero feedback. Score is capped at 35.

new_account

Account registered within the last 7 days. Extremely high fraud indicator for high-value listings.

established_bad_actor

Feedback ratio below 80% with 20 or more reviews. A sustained pattern of negative feedback from an established seller.

Soft flags

Shown as warnings — not automatic disqualifiers, but worth investigating.

account_under_30_days

Account is less than 30 days old. Less severe than new_account but worth noting for high-value items.

low_feedback_count

Fewer than 10 feedback ratings total. Seller is new to eBay or rarely transacts.

suspicious_price

Listing price is more than 50% below the market median from recent completed sales.

!!! note This flag is suppressed automatically when the search returns a heterogeneous price range — for example, a search that mixes laptop generations spanning $200$2,000. In that case, the median is not meaningful and flagging would produce false positives.

duplicate_photo

The same image (by perceptual hash) appears on another listing. Common in scams where photos are lifted from legitimate listings.

scratch_dent_mentioned

The title or description contains keywords indicating cosmetic damage, functional problems, or evasive language:

  • Damage: scratch, dent, crack, chip, broken, damaged
  • Functional: untested, for parts, parts only, as-is, not working
  • Evasive: read description, see description, sold as-is

long_on_market

The listing has been seen 5 or more times over 14 or more days without selling. A listing that isn't moving may be overpriced or have undisclosed problems.

significant_price_drop

The current price is more than 20% below the price when Snipe first saw this listing. Sudden drops can indicate seller desperation — or a motivated seller — depending on context.

Triple Red

When a listing hits all three of these simultaneously:

  • new_account OR account_under_30_days
  • suspicious_price
  • duplicate_photo OR zero_feedback OR established_bad_actor OR scratch_dent_mentioned

The card gets a pulsing red border glow to make it impossible to miss in a crowded results grid.