Skip to content

Client mode + demo golden lock (engagement-ready) - #2

Merged
MsShawnP merged 5 commits into
mainfrom
client-mode-2026-08
Aug 4, 2026
Merged

Client mode + demo golden lock (engagement-ready)#2
MsShawnP merged 5 commits into
mainfrom
client-mode-2026-08

Conversation

@MsShawnP

@MsShawnP MsShawnP commented Aug 4, 2026

Copy link
Copy Markdown
Owner

Engagement-ready client-mode conversion. Verified; source-only and demo-locked.

Every listed P1 was already fixed on disk, verified by the audit's reproduction, then regression-locked. Demo golden byte-identical; client mode + adversarial fixtures added.

Deploys trigger on push to main only — merging this PR is what goes live. Nothing has deployed from pushing the branch. CI (canonical-drift / ci / render) runs on this PR.

Commits (4):

  • Wrap long lines + sort imports for ruff (line-length 88)
  • Add item-setup-form-preflight client mode (engagement.yml + provenance report)
  • Lock demo golden + P1 regression (item-setup-form-preflight)
  • Engagement scaffold: gitignore + deploy guard

🤖 Generated with Claude Code

MsShawnP and others added 5 commits August 3, 2026 13:17
Add tests_golden.py: locks the 50-SKU Cinderhaven demo bounce counts
(walmart 29, costco/unfi/kehe 26) via the real audit pipeline, plus P1
regression tests for the 07-31 INFO-counting bug. Verified by reproduction
that the fix is already on disk: an INFO-only row (valid UPC-A carrying the
UPC_NOT_GTIN13 advisory) stays PASS in the per-row engine and clean in both
orchestrator aggregates (do_validate and do_validate_rows) — errorTypeCounts
and topFailingFields exclude INFO. A negative-control test confirms real
CRITICAL failures still register.

Regenerate scripts/results/*.json with the current single-count engine
(they footed and no longer double-count GTIN) and update their README.

Add pytest config so bare `pytest` collects the root tests_*.py surface
alongside tests/test_*.py.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…e report)

client_mode.py wraps the four-tier engine with the shared lailara_engagement
scaffold: tolerant CSV/XLSX intake (UPC/GTIN read as text), engagement.yml
column mapping + a preflight that names the identifier column (branded Data
Readiness Report if absent), the engine run per SKU, and a branded,
provenance-footed, draft-watermarked readiness summary + per-SKU CSV written
to client-output/ only. Column mapping is config-driven, never fuzzy-guessed.

Add engagement.demo.yml (demo: true, Walmart) and INPUT-SPEC.md documenting the
per-partner required fields and GTIN levels the engine consumes.

tests_client_mode.py covers the §6 adversarial fixtures — clean file renders
clean (the 07-31 INFO P1), missing identifier blocks, empty/headers-only,
duplicate headers, BOM+semicolon with identifier kept as text, and the --final
watermark drop. Skipped if lailara_engagement is absent.

Demo runtime (engine, browser) untouched; demo golden unchanged.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The client-mode files were mirrored from gtin-validator (ruff line-length 120);
item-setup pins 88. Wrap the readiness-summary CSS f-string across source lines
(CSS is newline-tolerant; output unchanged in effect), split one long banner
string, and let ruff sort the tests_client_mode imports. No behavior change.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
engagement.demo.yml carried "Cinderhaven Foods (demo)" — a retired brand-name error
(canonical is Cinderhaven Provisions). The canonical-drift gate correctly blocked
it. Deployed demo golden is unaffected — client mode reads this config, the deployed
app does not; golden suite unchanged.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@MsShawnP
MsShawnP merged commit c140e9e into main Aug 4, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant