@blueforge-studio/visual-audit

Visual audit core: sidecar, pixel and vision checks for product imagery with one verdict schema (visual-audit/verdict@1) shared by the forge-git correctness gate and the blueforge promotion gate

Informations sur le paquet

Latest Version0.1.2
Licensenone
Keywords-
Repositorygit+https://github.com/blueforge-studio/blueforge-org.git
Author-
Homepagehttps://github.com/blueforge-studio/blueforge-org#readme
Bugs[object Object]

Versions

VersionPubliée
0.1.22026-10-21
0.1.12026-10-19
0.1.02026-10-19

Chaîne d'approvisionnement par version

VersionSigSBOMAtt
0.1.2
0.1.1
0.1.0

Cliquez sur une version pour voir ses détails.

Chaîne d'approvisionnement

Provenance

Publié par
web:5
Quand
2026-10-21T12:32:02Z
sha256 (calculé par le registre)
c5d745dfaed2bd45726129fce6c11854bbf21ab28b911cd73747de91e929411e

Observé par le registre au moment de la publication.

Déclaré par la compilation

L'éditeur n'a rien déclaré sur sa compilation.

Pièces jointes

Signature
aucune
SBOM
aucune

Dépendances

Chargement du graphe de dépendances...

README

@blueforge-studio/visual-audit

One audit core for product imagery, shared by two gates so a verdict means the same thing everywhere:

  • forge-git (correctness, pre-merge): visual-audit check --profile correctness --changed-only origin/main --marker in CI.
  • blueforge (promotion, on upload): auditImage(bytes, subject, { profile: "promotion", vision }).

Design: blueforge docs/plans/2026-10-19-visual-audit.md.

Checks (cheapest first; a T0–T2 error skips the model)

TierCodes
T0 sidecar (blueforge.product.yml)META_MISSING, LABEL_PLACEHOLDER, FILE_MISSING, VARIANT_UNPAIRED, AUTH_PROMOTED
T1 pixels (sharp)MODE_MISMATCH (dark ≤ 90, light ≥ 150 mean luma), MODE_AMBIGUOUS, TOO_SMALL, BLANK, DUPLICATE (dHash ≤ 5), STALE (default 45 days; capture JSON date, else git date), UNREADABLE
T2 capture (<image>.capture.json written by capture tools)BROKEN_IMAGE, ERROR_STATE, LOGIN_WALL
T3 vision (rubric per profile)PII, SECRET, THIRD_PARTY_IP, ERROR_STATE, PLACEHOLDER, LOGIN_WALL, BROKEN_LAYOUT, DEBUG_UI, TEXT_MISMATCH, UNSAFE, BROKEN_IMAGE, MODE_MISMATCH, OUTDATED_BRAND, LOW_VALUE, CAPTION_MISMATCH (+ REVIEW_UNPARSEABLE, REVIEW_ERROR)

Every finding carries an imperative fix. Which codes fail depends on the profile (FAILING); every other error is reported as warn. Promotion scores 0–100; below 70 is warn.

Verdict schema

visual-audit/verdict@1 per image, visual-audit/report@1 per product, visual-audit/run@1 per CLI run — types and zod schemas (VerdictSchema, ReportSchema, RunSchema) are exported.

CLI

visual-audit check [dir] [--profile correctness|promotion] [--product id] [--changed-only <base>]
                   [--vision on|off] [--stale-days n] [--json] [--marker]

Exit 0 pass/warn/uncertain · 1 fail · 3 nothing to audit · 4 error/usage. --marker prints [visual-audit/v1] <base64 run JSON>; decodeMarker(log) reads it back (fgit does).

Capture notes (T2)

A capture tool writes <image>.capture.json next to the image:

{ "capturedAt": "2026-10-19T08:00:00Z", "findings": [{ "code": "BROKEN_IMAGE", "message": "img /logo.svg naturalWidth 0" }] }

Vision

Any evaluator shaped like vision-gateway's VisionEvaluator works (VisionEvaluatorLike). evaluatorFromEnv() uses forge-gateway when FORGE_GATEWAY_URL + FORGE_GATEWAY_TOKEN are set (model VISION_MODEL, default minimax-m3), else vision-gateway's own env selection; @blueforge-studio/vision-gateway is an optional peer. Without an evaluator the CLI runs T0–T2 only (--vision on makes that an error instead).