@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
Versions
| Version | Publiée |
|---|---|
| 0.1.2 | 2026-10-21 |
| 0.1.1 | 2026-10-19 |
| 0.1.0 | 2026-10-19 |
Chaîne d'approvisionnement par version
| Version | Sig | SBOM | Att |
|---|---|---|---|
| 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
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 --markerin 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)
| Tier | Codes |
|---|---|
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).