# loudink-v1.1 complete (PR-A → PR-E) **Version:** 1.1.0 canary **Date:** 2026-07-08 **Stable freeze left intact:** loudink-v1 **0.4.0** at `nsalerni/loudink-v1` ## Delivered ### PR-A — Skill substrate - `src/gemmaflow_tune/skills/{schema,store,recorder,compile}.py` - Null-safe `run_skill` compile + sanitize (never invent skill_id) - Unit tests: `tests/test_skills_pra.py` ### PR-B — Invoke surface - Paraphrase + exact alias match in `skills/invoke.py` - Freeform disambiguation (open gmail ≠ skill hijack) - Bench suite n=19 + IR SFT corpus - Runner wiring: `skill_store_path` via `runner_factory` - Unit tests: `tests/test_skills_prb.py` ### PR-C — Slot fill - Deterministic extract in `skills/slots.py` - Seed skills: Invoice Chase (`company`), Standup Post (`update`) - Scorer: `slot_values` / `skill_id` - Unit tests: `tests/test_skills_prc_slots.py` ### PR-D — Daily-Mac expand - Computer: Focus/DND, Reminders, Messages/Mail reply, Chrome tabs, Notion+Linear, Wi‑Fi - Writing: reply iMessage, email subject, code cell - Resolvers: focus/DND, browser tabs, reply context - **69/69** overall on expanded suite ### PR-E — Vision scaffold - `skills/vision.py`: `ScreenObservation`, `VisionFallbackConfig`, `try_vision_fallback` - Default **disabled**; client injects resolver when ready ## Verification commands ```bash .venv/bin/python -m pytest tests/test_skills_pra.py tests/test_skills_prb.py tests/test_skills_prc_slots.py -q .venv/bin/python -m gemmaflow_tune.cli.prepare_skill_invoke_benchmarks .venv/bin/python -m gemmaflow_tune.cli.prepare_daily_mac_benchmarks GEMMAFLOW_GPU_MODE=shared .venv/bin/python -m gemmaflow_tune.cli.benchmark \ --config configs/benchmark_loudink_v1_1_skill_invoke.yaml --variant loudink_v1_1_skill_invoke GEMMAFLOW_GPU_MODE=shared .venv/bin/python -m gemmaflow_tune.cli.benchmark \ --config configs/benchmark_loudink_v1_daily_mac.yaml --variant loudink_v1_daily_mac .venv/bin/python -m gemmaflow_tune.cli.build_loudink_v1_product_scorecard \ --measurement artifacts/benchmarks/loudink_v1/daily_mac/loudink_v1_daily_mac_measurement.json \ --output artifacts/loudink_v1/product_scorecard.json .venv/bin/python -m gemmaflow_tune.cli.build_loudink_v1_1_publish --force .venv/bin/python -m gemmaflow_tune.cli.publish_sota --model loudink-v1.1 ``` ## Success metrics (all met) | Metric | Bar | Result | |--------|-----|--------| | Skill invoke accuracy | ≥95% | **100%** (19/19) | | Skill paraphrase | ≥85% | **100%** (suite includes paraphrase) | | Freeform regression | no drop vs 0.4 | **100%** daily-mac | | Writing neural / p50 | hold 0.4 bars | **92%** / **171 ms** | | IR honesty | ≥45% | **46.4%** |