Commit graph

25 commits

Author SHA1 Message Date
Vadym Samoilenko
134648188e fix(checks): case-insensitive fullLoad and dynamic active prefixes for ext/int pairing
- linkingrecord_header_check: accept "y"/"Y" for fullLoad (case-insensitive)
  and add type-check before comparison to avoid misleading error on non-string values
- exterior_interior_pairing_check: introduce _get_active_prefixes() which computes
  the intersection of shared prefixes that appear in BOTH exterior and interior records;
  prefixes like bs-, dr-, en- that exist only in exterior features no longer poison
  signatures and cause systematic false-positive failures on real packs;
  when one side is entirely absent the fallback uses all shared prefixes so a
  missing-interior-partner is still correctly detected

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-18 09:36:42 +01:00
shubham.goyal@brandtech.plus
ddb292476d fix Check that every base spec has an exterior and corresponding interior entry 2026-05-12 18:31:40 +05:30
Vadym Samoilenko
eb3da2c980 Fix exterior/interior pairing check: variant-signature approach, angle 21
Old check stripped paint/trim by prefix but used wrong tr- prefix
(transmission, not trim), causing false mismatches on known-good packs.
New approach uses an allowlist of shared WERS prefixes to build variant
signatures — paint, trim, and transmission codes fall out naturally.
Restricts comparison to angle-21 base records only per Ben's spec.
Updates ford_bnp.json profile config accordingly and adds 8 unit tests.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-29 12:47:01 +01:00
Vadym Samoilenko
87605828aa Add CV ABM-only support and bidirectional series validation
Fixes two silent-pass bugs in check_series_permutations:
1. CV non-Ranger packs (ABM-only coding) were dead code — required both codes,
   leaving source-of-truth empty and returning passed silently.
2. Orphan series carousel entries (series image with no backing exterior/interior
   records) were noted but never failed the check.

Now auto-detects pack type from features (PV=VS/ACM pair, CV=ABM-only, Ranger=SE#/ABM
pair). Extends source-of-truth scan to include interior records. Validates
bidirectionally: missing series images AND orphan series entries both cause a failure.

Adds tests/test_check_series_permutations.py with 12 test cases covering all modes.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-29 12:29:32 +01:00
Vadym Samoilenko
5abd4818c6 Add linkingrecord header validation check
Extracts header validation into a standalone checks/linkingrecord_header_check.py
module and wires it into ford_bnp.json after unzip_and_verify_check.

Fixes confirmed bugs from the embedded validate_linkingrecord_header:
- fullLoad was read from header.fullLoad (always failed); now correctly read from top-level
- model had no length constraint; now enforces exactly 5 chars via ^[A-Z0-9]{5}$

Adds missing validations:
- header.specMarket: must be 5 uppercase alphabetic chars
- header.ptvl: must equal first 3 chars of model (cross-field check)
- market: checked against configurable whitelist in profile

All rules are configurable via profile config keys (market_whitelist, model_pattern,
year_pattern, spec_market_pattern, ptvl_match_model_prefix, numerical_mmy_pattern)
following the ranger_ptvl_pattern precedent. Default year_pattern is ^YYY$ (strict per spec).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-29 11:46:39 +01:00
Vadym Samoilenko
1130830805 Add asset count summary to QC HTML reports
Shows total linking records and unique asset count (overall + per section
grouped by viewtype+imagetype) in a card at the top of every report.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-17 15:41:17 +01:00
Vadym Samoilenko
16bbd98f99 Add zip filename check for GPAS naming convention
Ford 3rd-party checker now requires image packs to end with _GPAS.zip
instead of the legacy _image.zip. Added new checks/zip_filename_check.py
as the first check in the QC profile to fail fast on incorrectly named files.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-16 10:38:01 +01:00
Vadym Samoilenko
3d31bdaa7d Make Ranger ptvl pattern configurable via profile
ranger_ptvl_pattern added to ford_bnp.json and check_series_permutations.py
so model year or generation changes require only a profile update, not code changes.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-16 15:52:16 +00:00
Vadym Samoilenko
44de833c45 Add exterior/interior pairing check and Ranger/CV series permutation support
- New check: exterior_interior_pairing_check — validates that every exterior base asset has a matching interior base asset (same feature set, excluding paint/trim codes), handles MEC 2d-background items separately
- check_series_permutations: added Ranger/CV model detection via header.ptvl (TR[AB]## pattern), uses SE#/ABM codes instead of VS/ACM for those packs
- unzip_and_verify_check: added fullLoad header validation (must be "Y")
- profiles/ford_bnp.json: added exterior_interior_pairing_check to production profile
- html_reporter.py: added friendly name mappings and HTML formatter for new pairing check

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-16 14:55:03 +00:00
michael
1002ebc61b documentation 2026-02-23 10:49:49 -06:00
michael
4318cb11a8 Add Box config debugging to diagnose auth failures
Logs non-sensitive config details (enterpriseID, clientID, publicKeyID)
to help diagnose invalid_client errors during JWT authentication.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-18 07:00:34 -06:00
michael
53e06fff63 Add environment configuration support for multi-deployment (prod/dev)
- Add utils/config.py module using python-dotenv for centralized config
- Externalize Box folder IDs, paths, and timeout settings to .env files
- Create .env.example template with all configuration variables
- Add separate systemd service files for prod and dev environments
- Update ford_qc_box_hotfolder_process.py to use config module
- Update qc_engine.py and path_resolver.py with optional config support
- Maintain backwards compatibility with hardcoded defaults
- Update documentation in CLAUDE.md

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-18 06:10:43 -06:00
michael
9a9866bc92 resolved tickets 2478, 2480, 2605 2025-11-07 17:35:44 -06:00
michael
7b4a338665 actioned tickets 2482 and 2609 - extra carousel image check and base assets incorrectly flagged as wrong file type 2025-11-06 16:52:48 -06:00
michael
d63b671b01 log level debug --> info 2025-10-23 08:17:21 -05:00
michael
1906861d9f adjusted watchdog from 90s to 1h 2025-10-23 08:07:52 -05:00
michael
e09df4f64c another auth/timeout fix 2025-10-23 08:03:27 -05:00
michael
a09541990b upgraded boxsdk from 3.x to 10.x, fixed syntax 2025-10-23 07:41:13 -05:00
michael
77cb669a01 fixed authentication error we just introduced with timeout 2025-10-23 07:33:17 -05:00
michael
be9700f796 changed paths to new dev location on server 2025-10-23 07:05:03 -05:00
michael
6209d28070 added timeout for connecting to box, retry with backoff, watchdog in systemd, journalctl logging 2025-10-23 06:36:40 -05:00
michael
6db7cf5e58 bug fixes following implementation of various devops tickets - base functionality working now - releasing to team for testing 2025-09-19 09:21:15 -05:00
michael
94f0c1d60d implemented a batch of tickets from devops. Not deployed, not tested. Could be broken. Will commit again if fixes are required. 2025-09-19 07:57:57 -05:00
michael
d7049b5de2 readme and claude.md updates 2025-09-03 07:47:09 -05:00
michael
cb02a7ea6b initial commit 2025-09-03 07:03:21 -05:00