- **Version:** 1.108.123 — **Licensing hardening sweep (#364 confidence pass, @domis86 = paid client, two prior strikes).** Full audit of the licensing surface. **Three real defects found + fixed:** (1) `org-rollup` CLI had the SAME missing-`load_config()` trap as .121's `license` bug → a Studio/Platform team key in config.jsonc was invisible, org-rollup wrongly "unavailable"; added `config_module.load_config()` before its `check_gate()`. (2) `install-pack` honored only `--license`, ignoring env/config `license_key` → a Builder customer (whose entitlement IS premium starter packs, per validate.php) couldn't download with a persisted key; new `install_pack.resolve_effective_license_key()` does `--license` → `JCODEMUNCH_LICENSE_KEY` → config. (3) offline/unreachable validation rendered as "key not recognized" (alarming false-negative for a proxy/firewalled paid customer on first run); `check_gate()` gains `key_status` ∈ {valid, absent, rejected, unverified_offline} and the CLI shows "key present, not yet verified" for outages (sticky-offline still keeps a confirmed key valid). **Refactor:** the `license` CLI output moved to a pure, unit-tested `org/license.format_license_status(gate, key_provided=)` — a valid non-team tier (Builder) shows `org-rollup: optional team add-on` with NO trial countdown (licensed, not deficient); free-features line corrected (core indexing/search free; premium packs + org-rollup are the paid features). **Verified via seeded-cache end-to-end + pure-renderer sweep of all 6 states + `check_gate` is the ONLY gate and is CLI-only (MCP server gates NO tool on license → reporter's actual MCP usage always worked).** `check_gate()` also carries `key_valid`+`feature` (from .122). New `tests/test_v1_108_122.py` (14: key_status classifier incl. offline≠rejected + sticky-valid, renderer for all states, install-pack key resolution) + extended test_org_license.py. Full suite 5258 passed; the 12 test_semantic_search failures are the KNOWN local-ONNX-model env issue ([[project_pickup_state]] / download-model gotcha), NOT this change. NO INDEX_VERSION/tool-count change. **Also STILL folded in** (from .122, since server.py is touched): the get_delivery_metrics/get_parity_map trigger-clause description edits + refreshed schema_baseline.json. **The stale self-obsoleting server.py reminder hook in `C:/MCPs/.claude/settings.local.json` (hooks.PostToolUse ~lines 1002-1015) still needs manual deletion — the auto-mode classifier blocks me from editing my own settings.**
0 commit comments