All notable changes to this package are documented here. Each behaviour change references the SCOPE.md feature ID(s) it implements.
The format follows Keep a Changelog; the project adheres to semantic versioning.
- Docs only (no public-surface change):
CONTRIBUTING.mdmakes lint + format an explicit step in the dev loop, andCLAUDE.md/CONTRIBUTING.mdadd the adversarial-diff review as the final pre-commit step — aligning this repo with the family-wide dev-loop convention. - CI: bump the GitHub Actions group (3 updates) via Dependabot.
First stable release — the public surface is considered stable; this is the v1.0 milestone for the Claude routine family.
- Self-contained trunk-on-main
CONTRIBUTING.md,LICENSE(MIT) +licensefield,.github/workflows/release.yml(tag -> GitHub Release) and.github/dependabot.yml(weekly pip + actions PRs). - Code-coverage gate:
pytest-cov, fail_under = 80 in[tool.coverage]. - Ruff lint + format gate (
[tool.ruff]), run in CI before the tests.
- CI:
ruff check+ruff format --checkbeforepytest;actions/checkout-> v5. - Code reformatted by
ruff format(no behaviour change);.gitignoreignores coverage artefacts.
- [F-001] — BREAKING (behaviour). The env helpers (
env_required,env_opt/env_get,env_int,env_float) gain ashared: bool = Falsekeyword. With a prefix set, the unprefixed fallback now applies only whenshared=True; withshared=False(the new default) a prefixed lookup reads only<prefix>_<key>. The no-prefix (standalone) path is unchanged. Mark family-shared credentials/infra (WC_*,DROPBOX_*) withshared=True; routine-own knobs stay prefix-only so they cannot leak between sibling routines sharing one environment. Consumers roll forward by bumping the pin and marking their shared keys.
- [F-007] Prefix-required routine-own keys with a one-time migration warning.
When a prefix-required lookup (
shared=False) misses but the unprefixed form is set, the helpers emit a one-timeWARNING:to stderr naming both forms (the stray value is ignored), so an old-style unprefixed value surfaces loudly instead of silently reverting to the default. The numeric helpers (F-006) honour the same flag and warning.
- [F-006]
env_int(key, default=None, *, prefix="")andenv_float(...)— numeric env helpers using the same project-prefix-with-fallback lookup asenv_opt, returningdefaultwhen unset and aborting with a clearSystemExitnaming the variable (Invalid <KEY>='<value>': expected an integer./… a number.) when the value is set but malformed, instead of an uncaughtValueError. Folds the per-routine_int/_floathelpers the WooCommerce family each carried into the shared core (review Step 9). Additive — existing names unchanged.
Initial release: the vendor-agnostic, standard-library-only core, extracted from
claude-woocommerce-commons so every routine — not only the WooCommerce family —
can share one tested copy of the generic plumbing instead of re-implementing it
(review thread T-1 / option C: a dependency-light core + a thin vendor toolkit on
top).
- F-001
env_required/env_opt/env_getenvironment helpers with the project-prefix-with-fallback lookup. - F-002 Tolerant
parse_num()(comma thousands separators; comma-decimal locale input documented as out of scope). - F-003
build_remote_path(base, folder, filename)remote-path builder. - F-004
currency_symbol()3-letter-code → display symbol. - F-005
log()timestamped run-log line.