Client mode + demo golden lock (engagement-ready) - #13
Merged
Conversation
Golden-file test pins the shipped sample dataset's batch summary (46 GTINs, 36 clean, score 82/B) so the deployed demo cannot drift during the client-mode conversion. Regression tests lock the two 07-31 audit P1s (already fixed on disk, verified with the audit's reproduction): - UPC-A and its case GTIN-14 share a company prefix (no false PREFIX_MISMATCH on sample rows 37-39). - INFO advisories (UPC_NOT_GTIN13) do not zero the clean count / grade. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Client-mode CLI wraps the existing gtin_core engine with lailara_engagement: tolerant CSV/XLSX intake (GTIN read as text), preflight that names the GTIN column via engagement.yml (Data Readiness Report if missing), and a branded, provenance-footed, draft-watermarked readiness summary + CSV report written to client-output/ only. INPUT-SPEC.md documents the required column and mapping. 4 client-mode tests (clean file, missing-column blocked, BOM+semicolon GTIN as text, --final). 74 tests pass; demo golden unchanged. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Rename tests_golden.py/tests_client_mode.py to test_golden.py/test_client_mode.py and add test_golden.py to the CI core-test command so the demo golden + P1 regressions run on every commit (CI invokes files explicitly). Client-mode tests stay local (require the path-installed lailara_engagement). 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; canonical_values.json flags "Foods"). The canonical-drift gate correctly blocked it. Rename to match the roster's other demo configs. Deployed demo golden is unaffected — client_mode reads this config, the deployed app does not (test_golden.py still passes, unchanged). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Remove unused imports (sys, render_html) and split three CSS-in-f-string rules at property boundaries so each physical line is <=120. CSS is whitespace-insensitive between properties, so the rendered report is unchanged; no golden covers client_mode output. ruff check . clean. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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
mainonly — 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):
🤖 Generated with Claude Code