ULC v1.0.2
ulc CLI v1.0.2
Download a single-file binary for your platform below. See CHANGELOG.md
at the tag for what landed in this release.
An opt-in validator advisory plus a documentation refresh. This release adds a report-only attestation-expiry check to ulc validate and brings the PIM mapping guides current with the two-axis model. The advisory contract is strict: no conformance grade, no computed index, no exit code, and no default ulc validate output changes; every golden file is byte-identical; and the schema, taxonomy, example records, and ulc_version are untouched.
For consumers
Nothing to do. Default ulc validate behavior, exit codes, and the generated index are unchanged, so no re-stamp or migration is needed. Opt in to the expiry preview with ulc validate --expiry when you want it.
Validator
ulc validate --expiryenables an opt-in, report-only expiry advisory. It never changes the exit code (itsWARNINGfindings do not fail validation), never touchesindex.achievements, and is absent from default runs, so default output and the goldens stay byte-identical.--as-of YYYY-MM-DDsets the evaluation date (default: today, the validator's only wall-clock read).--expiry-window Nsets the upcoming window in days (0..36500, default 90). Both require--expiry; a malformed date or an out-of-range window is a usage error (exit 2).- Four finding codes:
expiry/summary(INFO, always one per run, labeled "advisory" in its message),expiry/lapsed(WARNING per already-lapsed surface),expiry/downgrade(WARNING per theme a re-stamp on or after the date would drop fromdocumentedtoclaimed), andexpiry/upcoming(INFO per surface expiring within the window, carrying its actual day count). - Lapse is a strict inequality: a
valid_untilequal to the as-of date is still valid, and only an earlier date is lapsed, matching the record-relative expiry rule the compute already applies. - Two dated surfaces are evaluated: each qualifying attestation's
valid_until(an attestation with a disqualifying status,expired,withdrawn, ornot_applicable, is skipped, matching the compute), and asustainability_declaration'sexpiration_date(which the compute never reads, so a lapsed declaration otherwise contributesclaimedon every re-stamp).
Docs
- The five
mappings/pim/guides (README plus the Akeneo, Salsify, SAP, and custom-PIM guides) are brought current with the two-axis model: the generated index's three computed grading rollups (conformance_levelon theincomplete<core<standard<fullladder,achievements, andrestricted_substances_declared), the achievements evidence-and-expiry bridge (source_document_ref,valid_until), the re-stamp-after-edit rule, exit-sign and emergency-luminaire class rows, andulc_version1.0.0skeletons. tools/validator/README.md,docs/methodology.md,docs/how-it-works.md, anddocs/authoring-patterns.mddocument the opt-in expiry advisory and its report-time-only, non-normative contract.ROADMAP.mdrecords that patch releases may carry advisory validator additions that change no normative surface, no computed value, and no default output, and adds theFileReference.filenameminimum-length item to the deferred schema work.