From 8c21ca3273019f8132b668d0ec22d809cf50ccec Mon Sep 17 00:00:00 2001 From: firaen22 Date: Wed, 22 Jul 2026 10:09:20 +0800 Subject: [PATCH 1/4] =?UTF-8?q?delegation-and-review=20=C2=A71:=20labels?= =?UTF-8?q?=20are=20routes,=20listings=20are=20claims?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two traps in wrapper-CLI model routing: (1) a wrapper's model strings are internal routing names, not provider API IDs — pasting them into direct API calls or quota lookups queries a name that may not exist; (2) a model listed in a lineup is not proven callable — a listed entry failed hard on first invocation, the second such ghost across two independent tools. Rule: invoke once and see output before building on a listed model. Ships unprobed with Provenance per the covenant. --- skills/delegation-and-review/SKILL.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/skills/delegation-and-review/SKILL.md b/skills/delegation-and-review/SKILL.md index 9689451..448db3d 100644 --- a/skills/delegation-and-review/SKILL.md +++ b/skills/delegation-and-review/SKILL.md @@ -26,6 +26,16 @@ treat every returned result as a claim until verified. output → high-taste model; reviews and hard debugging → strongest available. Tie-break intelligence > taste > cost. Model lineups are volatile facts: read the environment at session time, not memory. +- **Labels are routes, listings are claims** (`unprobed` — private incidents + as shape; see Provenance). A wrapper CLI's model strings are its internal + routing names, not necessarily the provider's API model IDs — pasting one + into a direct API call or a pricing/quota lookup queries a name that may + not exist on the provider's side. And a model's presence in a lineup + listing does not prove it is callable: across two independent tools, a + listed entry failed hard on first real invocation. The listing is the + tool's routing claim; before building on a model, invoke it once and see + output. + ❌ "the CLI lists it, so it's available — route tomorrow's batch to it." ## 2. The dispatch packet @@ -301,5 +311,15 @@ enforcement or a defect in that sandbox is unestablished, so the rule prescribes only the defensive split. Private evidence, cited as shape per the README covenant's second branch; no in-repo probe has run — in-body `unprobed` marker. +The §1 labels-and-listing rule (2026-07-22) comes from two private +incidents in one contributor's subordinate tooling: a model entry listed +by one wrapper CLI's lineup failed hard on its first real invocation (the +second such ghost entry observed across two independent tools), and a +session caught itself about to treat another wrapper's model strings as +provider API IDs for a quota lookup before verifying they are the +wrapper's internal routing names. Private evidence, cited as shape per +the README covenant's second branch; the executable probe — invoke every +listed model once and diff claimed-vs-callable — has not been run +in-repo; the in-body `unprobed` marker records that debt. Stable behavioral rules; re-check only worktree/agent mechanics against the current harness. From 5f7bc32b8849178441b5f185779dc081824e3232 Mon Sep 17 00:00:00 2001 From: F-e-u-e-r <189464303+F-e-u-e-r@users.noreply.github.com> Date: Wed, 22 Jul 2026 18:44:13 +0800 Subject: [PATCH 2/4] delegation-and-review: rework the labels-are-routes bullet per r1 dual review PR #56 round-1 gate (grok-4.5 high: FIX 1; gpt-5.6-sol max: FIX 1,2,3). All reproduced and addressed: - the two boundaries split with their own state triggers and checks; the provider-ID half gains its executable stop (resolve the mapping against the provider's own ID list before crossing namespaces) - wrapper invocation proves nothing provider-side (grok F1 / codex F1) - callability success defined as an attributable model response through the same wrapper and execution context the work will use; failure leaves the route unverified, no dependent dispatch, S4 ladder governs; pass is session-scoped per the adjacent volatility rule (codex F2) - pos example added covering both boundaries separately (codex F3) Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01GhLu6NCGzM9HxnqNb87MAx --- skills/delegation-and-review/SKILL.md | 30 +++++++++++++++++++-------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/skills/delegation-and-review/SKILL.md b/skills/delegation-and-review/SKILL.md index 448db3d..0b67595 100644 --- a/skills/delegation-and-review/SKILL.md +++ b/skills/delegation-and-review/SKILL.md @@ -27,15 +27,27 @@ treat every returned result as a claim until verified. Tie-break intelligence > taste > cost. Model lineups are volatile facts: read the environment at session time, not memory. - **Labels are routes, listings are claims** (`unprobed` — private incidents - as shape; see Provenance). A wrapper CLI's model strings are its internal - routing names, not necessarily the provider's API model IDs — pasting one - into a direct API call or a pricing/quota lookup queries a name that may - not exist on the provider's side. And a model's presence in a lineup - listing does not prove it is callable: across two independent tools, a - listed entry failed hard on first real invocation. The listing is the - tool's routing claim; before building on a model, invoke it once and see - output. - ❌ "the CLI lists it, so it's available — route tomorrow's batch to it." + as shape; see Provenance). Two separate boundaries, each with its own + check. About to route work through a listed model: a lineup listing is + the tool's routing claim, not callability — across two independent + tools, a listed entry failed hard on first real invocation. Verify by + one invocation through the SAME wrapper and execution context the work + will use, and success means an attributable model response, not just + output (a ghost route can print diagnostics); an error or non-response + leaves the route unverified — do not dispatch dependent work on it + (§4's retry/escalation ladder governs), and a pass is session-scoped + per the volatile-lineups rule above. About to use a wrapper's model + string OUTSIDE the wrapper — a direct provider API call, a pricing or + quota lookup: the string is the wrapper's internal routing name, not + necessarily the provider's ID; do not cross that namespace until the + provider's own ID list or docs confirm the identifier (resolve the + mapping first — a working wrapper invocation proves nothing about the + provider-side name). + ✅ "invoked it once through the wrapper we dispatch with — real + completion came back; and for the quota check, looked the ID up in + the provider's model list instead of pasting the wrapper's alias." + ❌ "the CLI lists it, so it's available — route tomorrow's batch to + it." ## 2. The dispatch packet From b2bbf538c8690a45db937922d0a6a68022255024 Mon Sep 17 00:00:00 2001 From: F-e-u-e-r <189464303+F-e-u-e-r@users.noreply.github.com> Date: Wed, 22 Jul 2026 18:54:18 +0800 Subject: [PATCH 3/4] delegation-and-review: r2 refinements to the labels-are-routes bullet PR #56 round-2 gate (grok-4.5 high: FIX 1; gpt-5.6-sol max: FIX 1,2,3,4,5,7). All reproduced and addressed: - callability pass operationalized: fixed trivial prompt through the same wrapper/flags/auth/context, pass = a model ANSWER naming the route where the wrapper reports one; banners/diagnostics/errors are not answers; silent-fallback wrappers prove reachability only, said so (grok F1 / codex F2) - provider-ID half: mapping resolved from the wrapper's OWN config/ docs/trace, then the RESULTING ID validated with the provider - same- spelling existence proves nothing (alias collision); unresolved mapping blocks the crossing (codex F1) - second neg example pins the alias-collision boundary; pos example demonstrates authoritative mapping evidence (codex F3) - provenance probe debt split per boundary; marker stands until both run (codex F5) - PR body summary to be aligned to the attributable-answer criterion (codex F4); body audit-claim nits folded there too (codex n6) Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01GhLu6NCGzM9HxnqNb87MAx --- skills/delegation-and-review/SKILL.md | 30 ++++++++++++++++++--------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/skills/delegation-and-review/SKILL.md b/skills/delegation-and-review/SKILL.md index 0b67595..ced58dc 100644 --- a/skills/delegation-and-review/SKILL.md +++ b/skills/delegation-and-review/SKILL.md @@ -31,23 +31,33 @@ treat every returned result as a claim until verified. check. About to route work through a listed model: a lineup listing is the tool's routing claim, not callability — across two independent tools, a listed entry failed hard on first real invocation. Verify by - one invocation through the SAME wrapper and execution context the work - will use, and success means an attributable model response, not just - output (a ghost route can print diagnostics); an error or non-response + sending a fixed trivial prompt through the SAME wrapper, flags, auth, + and execution context the work will use; the pass is a model ANSWER to + that prompt naming the route where the wrapper reports one — wrapper + banners, usage text, diagnostics, or error pages are not answers, and + a wrapper that silently falls back to a default model passes only + wrapper reachability, not this route (check the wrapper's own route + report where it emits one; where it cannot say which model answered, + say the check proved reachability only). An error or non-answer leaves the route unverified — do not dispatch dependent work on it (§4's retry/escalation ladder governs), and a pass is session-scoped per the volatile-lineups rule above. About to use a wrapper's model string OUTSIDE the wrapper — a direct provider API call, a pricing or quota lookup: the string is the wrapper's internal routing name, not - necessarily the provider's ID; do not cross that namespace until the - provider's own ID list or docs confirm the identifier (resolve the - mapping first — a working wrapper invocation proves nothing about the - provider-side name). - ✅ "invoked it once through the wrapper we dispatch with — real - completion came back; and for the quota check, looked the ID up in - the provider's model list instead of pasting the wrapper's alias." + necessarily the provider's ID — and the same spelling existing on the + provider side proves nothing (an alias can collide with a different + provider model). Resolve the alias → provider-ID mapping from the + wrapper's OWN config, docs, or request trace, then validate that + resulting ID with the provider; mapping unresolved → the namespace + crossing stays blocked. + ✅ "sent 'reply OK' through the wrapper we dispatch with — the model + answered and the wrapper's route line named it; for the quota check, + read the wrapper config's alias map to get the provider ID, then + confirmed that ID in the provider's model list." ❌ "the CLI lists it, so it's available — route tomorrow's batch to it." + ❌ "the wrapper call worked and the alias exists in the provider's + list, so they're the same model." ## 2. The dispatch packet From f17e390b6ba094d87a2c313948d65af1b3ca1443 Mon Sep 17 00:00:00 2001 From: F-e-u-e-r <189464303+F-e-u-e-r@users.noreply.github.com> Date: Wed, 22 Jul 2026 18:55:06 +0800 Subject: [PATCH 4/4] delegation-and-review: split the labels-rule probe debt per boundary (codex r2 F5 follow-through) The prior commit's provenance edit failed to apply (string mismatch) while the bullet edit landed; this completes it: two probes owed, one per boundary, marker stands until both run. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01GhLu6NCGzM9HxnqNb87MAx --- skills/delegation-and-review/SKILL.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/skills/delegation-and-review/SKILL.md b/skills/delegation-and-review/SKILL.md index ced58dc..3df97ae 100644 --- a/skills/delegation-and-review/SKILL.md +++ b/skills/delegation-and-review/SKILL.md @@ -340,8 +340,11 @@ second such ghost entry observed across two independent tools), and a session caught itself about to treat another wrapper's model strings as provider API IDs for a quota lookup before verifying they are the wrapper's internal routing names. Private evidence, cited as shape per -the README covenant's second branch; the executable probe — invoke every -listed model once and diff claimed-vs-callable — has not been run -in-repo; the in-body `unprobed` marker records that debt. +the README covenant's second branch; two probes owed, one per boundary — +invoke every listed model once and diff claimed-vs-callable (the listing +half), and seed an alias-collision fixture and observe whether the +mapping is resolved before a namespace crossing (the provider-ID half); +neither has run in-repo, and the in-body `unprobed` marker stands until +both have. Stable behavioral rules; re-check only worktree/agent mechanics against the current harness.