chore(skills): mint omp-model-id-rename-cutover + record the callsign rename law

Captured from this session's cutover: reference-grep list, the YAML
cross-check regex (the provider label contains a space and parentheses, so a
whitespace split yields false unresolved hits), the per-endpoint 4-token probe
that proves a harness-side id rename is wire-safe, the fit check against the
served window, and the commit shape.
This commit is contained in:
Frank committed 2026-10-09 13:21:37 -07:00
1 parent cfed6ef7bb
commit 07fda88b1d
2 files changed
+64

No files matched your search

@@ -0,0 +1,62 @@
---
name: omp-model-id-rename-cutover
description: Rename an OMP fleet model id in models.yml and prove every reference and endpoint still resolves before commit/push.
---
# OMP model id rename cutover
Renaming a model id in `~/.omp/agent/models.yml` touches three layers: the registry, every
reference in `agent/config.yml`, and the wire contract with the serving endpoint.
## 1. Find every reference
Provider names are labels; ids are referenced from `config.yml` (`modelRoles.*`,
`task.agentModelOverrides.*`, `compaction.modes`), from other models' `compactionModel`,
and from docs/memory. Grep the tracked set:
```bash
git ls-files -z | xargs -0 grep -ln 'OLD_ID'
```
`agent/memories/**` and `omp-docs/log.md` are historical records: leave them alone.
`agent/models.yml` comments that name the *service* (e.g. `frank-large.env`) stay — the
systemd unit names do not change with the harness id.
## 2. Prove reference integrity (throwaway, do not commit)
Parse both YAMLs and cross-check. The provider label contains a space and parentheses
(`llamacpp (dankserver)`), so use an explicit pattern; a `split(/\s+/)` yields false
unresolved hits like `(dankclaw)/frank-dragoon`.
```python
pat = re.compile(r"llamacpp \([^)]+\)/[A-Za-z0-9._-]+")
known = {f"{n}/{m['id']}" for n, pv in models["providers"].items() for m in pv["models"]}
# walk cfg.modelRoles / cfg.task / compactionModel, flag tokens not in known
```
Expect: zero unresolved refs, and every `compactionModel` present in `known`.
## 3. Prove the endpoint accepts the new id
`/v1/models` reports the SERVED name (radiance echoes the request id, halogen and
llama.cpp echo their own). Then send a 4-token completion with the NEW id against each
provider `baseUrl`:
```bash
curl -s http://HOST:PORT/v1/chat/completions -H 'content-type: application/json' \
-d '{"model":"NEW_ID","messages":[{"role":"user","content":"say OK"}],"max_tokens":4}'
```
200 + `reasoning_content` = the rename is harness-side only. All three engines on the
Dank fleet ignore the request `model` field.
## 4. Fit check against the served window
Read the served window (`/v1/models` → `context_length` / `meta.n_ctx`) and confirm the
declared `contextWindow + maxTokens` fits the slot/pool the engine admits against.
Compaction fires at `compaction.thresholdPercent` of `contextWindow`; the clamp is
`max_tokens = min(maxTokens, contextWindow − est − 4096)` and the chars/4 estimate
under-runs ~3 % on code.
## 5. Commit shape
One commit for `models.yml` (ids + windows + sampling), one for `config.yml` (role map,
compaction endpoint). Note in the message which wire names stay unchanged, and record
the rename in `omp-docs/log.md` (newest section first). Run `scripts/kb-lint.sh` before
committing docs. The `.githooks/pre-commit` secret gate runs automatically; never
`--no-verify`.