diff --git a/skills/delegation-and-review/SKILL.md b/skills/delegation-and-review/SKILL.md index 2ade01b..5bd6cc4 100644 --- a/skills/delegation-and-review/SKILL.md +++ b/skills/delegation-and-review/SKILL.md @@ -33,7 +33,7 @@ treat every returned result as a claim until verified. the wrong build while every request returns 200, which reads as a bug in your own change. Defenses (pick one of the two, apply it fully — what you persist differs by defense): (1) a unique fixed port per - worktree, run + worktree or independent session tree, run with fallback disabled so a collision fails loud, the NUMBER persisted and propagated to every session-local reference (proxy, env, browser entry) — an explicit address-in-use bind error is the @@ -98,20 +98,23 @@ treat every returned result as a claim until verified. with flag and battery unchanged, and a second vendor's reproduced failure inverted to a pass days later, strings unchanged). Date-stamp every such measurement where it is recorded; at decision time, re-run - the probe — its route first verified per the labels rule below (an + the probe — its battery responses route-attributed per the labels + rule below, not just a preceding trivial check (an unattributed answer measures an unknown model, not the slug's) — and cite the fresh result's timestamp and configuration — the fresh result informs the routing, it never replaces §2's edge specification and proof gate for the work itself, and no measurement pins the endpoint's behavior on the next request. Probe unavailable - or failing → the property is unknown: route as if unguarded and spec + or failing → the property is unknown: route as if the property were + absent (no edge guard, no latency class, no failure signature) and spec the edge per §2. Done when the decision record cites the fresh probe (timestamp + configuration, its route attributed per the labels rule below) or the unknown-property fallback — an undated behavioral claim about a hosted endpoint is expired on arrival, and an unattributed probe never satisfies the citation. ✅ "re-ran the edge battery this session — the wrapper's route line - named the slug — cited its timestamp in the + named the slug as what answered each response — cited its timestamp + in the routing note, and specced the edge in the packet anyway." ❌ "we already measured that model guarding this edge, so route the edge-risky work to it" — any prior measurement reused for a routing @@ -127,15 +130,25 @@ treat every returned result as a claim until verified. — a model ANSWER to that prompt, AND the wrapper's own route report naming this route as what ANSWERED (a banner echoing the requested slug is configuration, not attribution) — wrapper banners, - usage text, diagnostics, or error pages are not answers. A wrapper - WITH an attribution channel whose report is missing, ambiguous, or - names a silent fallback leaves the route unverified — like an error - or a non-answer, do not dispatch dependent work on it - (§4's retry/escalation ladder governs). A wrapper with NO - attribution channel by design can only ever yield a + usage text, diagnostics, or error pages are not answers. Channel + presence is established, never assumed: the wrapper's docs or config + declaring a what-answered report, or a prior same-wrapper invocation + that emitted one, establishes the channel; NO-channel-by-design is + established only by that same evidence positively showing none + exists. Channel established but this invocation's report missing, + ambiguous, or naming a silent fallback → the route is unverified — + like an error or a non-answer, do not dispatch dependent work on it + (§4's retry/escalation ladder governs); channel presence UNKNOWN → + the same, fail closed. Only a wrapper positively established as + never emitting attribution yields the reachability-only pass: the route stays unattributed — record that limit wherever the pass is cited, and dependent dispatch on it - carries the recorded limitation, never a verified-route claim. A + carries the recorded limitation, never a verified-route claim. + ✅ "wrapper docs define no route field and no invocation has ever + emitted one — recorded 'reachability-only, route unattributed' in + the dispatch note and proceeded on that recorded limit." + ❌ "no route line this time — must not have a channel; dispatched" + (unknown channel presence is a block, not a downgrade). A pass expires with the session — a later session re-runs the probe before dispatching on it (re-reading the lineup, per the volatile-lineups rule above, is @@ -175,9 +188,12 @@ Every packet names: SEARCH scope is then every surface that can produce that target: literals and direct references, shared/global definitions, helpers that construct or return it. Hunt generators per §3's miss-is-costly - loop — its finders quoted verbatim: "Run axis-diverse finders — by- - container, by-content, by-entity, by-time — one axis per finder so - blind spots don't line up", with dedup against everything surfaced + loop — its finders quoted verbatim: "Run axis-diverse finders — + by-container, by-content, by-entity, + by-time — one axis per finder so + blind spots don't line up", with its dedup clause verbatim — "Dedup + new findings against everything ever surfaced, including ones + already rejected: dedup against confirmed-only never converges" — and its two-consecutive-empty-rounds stop rule — and at least one producer/effect axis (what shared definitions and constructors can produce this kind of output) MUST run before the loop may close: a diff --git a/skills/delegation-and-review/references/recurring-sweep-ledgers.md b/skills/delegation-and-review/references/recurring-sweep-ledgers.md index 4e11fb4..5f99f38 100644 --- a/skills/delegation-and-review/references/recurring-sweep-ledgers.md +++ b/skills/delegation-and-review/references/recurring-sweep-ledgers.md @@ -46,16 +46,22 @@ applicability before deduplicating (Verify critics too; in-file evidence overrides history, and an entry with no evidence binds nothing. §3's canonical set still governs the audit loop itself ("Dedup new findings against everything ever surfaced, including ones already -rejected"). +rejected: dedup against confirmed-only never converges"). Write-back moves entries across categories: an OPEN finding whose fix landed this round moves to PRIOR FIXES carrying the fix's correctness -evidence; an OPEN or UNRESOLVED item refuted this round moves to +evidence; an UNRESOLVED item confirmed this round moves to OPEN +FINDINGS (confirmed and fixed in the same round, straight to PRIOR +FIXES with the fix's evidence); an OPEN or UNRESOLVED item refuted +this round moves to REFUTED FINDING-CLASSES carrying the counterexample; a PRIOR-FIXES entry re-flagged this round with evidence the fix failed, regressed, or left a residual spawns a NEW OPEN finding carrying that evidence, the historical entry staying put with a pointer to it; everything else -stays where it is. +stays where it is. Write-backs of one campaign serialize: a round's +write-back completes before the next round dispatches; concurrent +writers over one ledger follow §4's edit-conflict rule (re-read, +re-anchor — never last-writer-wins). **Two phases, two checks.** Dispatch-time (the §2 field's readiness): the packet names the ledger path and campaign identifier, and the diff --git a/skills/operational-rigor/SKILL.md b/skills/operational-rigor/SKILL.md index 45630f2..37e0c65 100644 --- a/skills/operational-rigor/SKILL.md +++ b/skills/operational-rigor/SKILL.md @@ -265,7 +265,10 @@ When rigor conflicts with finishing sooner, rigor wins. evidence of a property of a change (safe, correct, covered), trace it through to its pass/fail oracle — the assertions (or, for a linter or build job, its rule set and - inputs) inspected at the revision the cited run actually used, the + inputs) inspected at the revision the cited run actually used — + which must itself contain the change under review: a green run on a + revision without the change is evidence about that revision, never + the change — the invocation path and setup that feed them, whether that path executed in the cited run, and whether its assertions PASSED there with their failure controlling the check's final status (a run is not a pass — @@ -451,6 +454,8 @@ When rigor conflicts with finishing sooner, rigor wins. whenever a new owed-line rule ships): the `AUTH:` line; the twin-search line; the skipped-prescribed-follow-up naming; the `Decisions note:` line; the compaction word-diff record (skill-authoring §7); the + dup-check result line (skill-authoring §5); the target-runtime line + of a skill review record (skill-authoring §6); the residual-risk statement. For each owed line that is missing, first confirm the underlying work actually happened — if it did, add the line; if it did not, do the work now or diff --git a/skills/skill-authoring/SKILL.md b/skills/skill-authoring/SKILL.md index 9e3858b..4c7aa71 100644 --- a/skills/skill-authoring/SKILL.md +++ b/skills/skill-authoring/SKILL.md @@ -107,8 +107,14 @@ artifact-producing step. and had been routing sessions into a degraded path. A negative about a hosted model's BEHAVIOR is the one class a version pin cannot hold — hosted endpoints drift behind unchanged strings; that class - follows delegation-and-review §1's pinned-string rule (date-stamp - the recorded claim; re-probe at decision time), not this protocol. + follows delegation-and-review §1's pinned-string rule, not this + protocol: date-stamp the recorded claim where written, and any + session acting on it — routing decision or not — re-probes at + decision time before repeating or relying on the negative, the + re-probe satisfied only under the pinned-string rule's own + attribution and unknown-property-fallback clauses (an unattributed + answer never satisfies it); on any wording disagreement, the + pinned-string rule wins. Writing a tool-interface negative: pin it to the version and probe it was observed on. Acting on one: read its pin; the tool's version has changed, or the pin is missing → @@ -216,7 +222,11 @@ artifact-producing step. re-runs those searches against the pre-addition text (the file at the revision the change branches from — never the edited working copy) and reads at least one candidate of their own choosing — on empty - searches, one searched file in full; a standalone not-covered verdict + searches, one searched file in full; a batch landing multiple + additions — to one file or across files in the search set (targets, + siblings, routers/entry files) — also searches the merged result + across all added hunks (two additions can duplicate each other + while neither exists in any base); a standalone not-covered verdict with no reviewer stays provisional in the report until a fresh-context reader without the author's session confirms it there. A bare "not covered" backed only by empty greps is the failure this rule exists to