#dalsza pomoc w debugowaniu skilla
1 messages · Page 1 of 1 (latest)
Pewnie — przejrzałem gista i kontekst (Twój „self‑improver”, slug/taxonomy, merge zamiast append, TTL hotfixów itd.). Poniżej masz Handoff Lint (v1): gotowy, „wklejalny” moduł jakości, który możesz odpalać na końcu nocnego joba (albo po każdym większym kroku), żeby zanim cokolwiek zapiszesz/promujesz, sprawdzić że wynik jest spójny, deterministyczny i nie produkuje bloatu.
1) Co to jest “Handoff Lint” i gdzie go wpiąć
Cel: zanim skill zrobi “handoff” (czyli: zapisze zmiany do .learnings/, zmerguje reguły, zaktualizuje AGENTS/TOOLS/SOUL albo wygeneruje raport), ma przejść przez zestaw testów:
- safety (brak destrukcji / brak wycieku)
- determinism (JSON-only tam gdzie trzeba, idempotent)
- anti-bloat (one-rule-per-slug, budżety, merge > append)
- evidence (promocja tylko gdy są twarde sygnały)
- TTL hygiene (hotfixy wygasają)
- scope (global vs local preferencje)
Wpięcie: ostatni krok nocnego review:
- bucket/cluster → 2) LLM merge (JSON) → 3) plan operacji → 4) aplikacja zmian → 5) HANDOFF_LINT → 6) dopiero wtedy zapis/promocja + raport
Jeśli lint zwraca fail → job nie promuje i zapisuje tylko raport + “todo remediation”.
2) Format danych “handoff” (co linter ocenia)
Minimalny obiekt wejściowy (może być wygenerowany przez Twój job, nie musi być 1:1 z tym schema — ważne, żebyś miał te pola w jakiejś formie):
{
"runId": "NR-2026-02-11T22:30Z",
"mode": "nightly_review|hotfix_only|manual",
"timeWindow": { "from": "2026-02-11T00:00:00Z", "to": "2026-02-11T23:59:59Z" },
"budgets": {
"maxAgentsBulletsTotal": 60,
"maxNewSlugsPerWeek": 2,
"maxRulesPerSlug": 1
},
"slugsConfigVersion": 1,
"allowedSlugs": ["tooling/file-ops", "safety/destructive-ops", "other/needs-triage"],
"proposedOperations": [
{ "op": "replace_with_merged", "slug": "tooling/file-ops", "ruleIds": ["LRN-1","LRN-9"] }
],
"proposedPromotions": [
{
"slug": "tooling/file-ops",
"target": "AGENTS_RULES.md",
"ruleText": "Prefer read/write/edit over shell cat/ls for workspace files. Exceptions: diagnostics only.",
"evidence": {
"verifiedCount": 2,
"distinctContexts": 2,
"userConfirmed": false,
"messageIds": ["..."]
},
"expiresAt": null
}
],
"hotfixes": [
{ "id": "HF-7", "slug": "web/search", "expiresAt": "2026-02-17T00:00:00Z" }
],
"changesSummary": {
"filesTouched": ["AGENTS_RULES.md", ".learnings/LEARNINGS.md"],
"notes": "..."
}
}
3) Handoff Lint — zasady (PASS/WARN/FAIL)
Poniżej jest „lint rulebook”. Implementacyjnie możesz zrobić to jako:
- czyste heurystyki, albo
- heurystyki + LLM “judge” (JSON-only) tylko gdy potrzebujesz.
A. Anti‑bloat / kompresja
FAIL
AGENTS_RULES.mdmiałby mieć >1 regułę dla tego samegoslug(łamie one rule per slug).- “append bez merge”: nowa reguła dla istniejącego sluga bez operacji typu
replace_with_merged. - proponujesz promocję “mikro-reguły” (np. pojedyncza preferencja stylistyczna) jako global.
WARN
- dodajesz nowy slug mimo że można wcisnąć do istniejącego (np. kolejny
tooling/file-ops/*zamiasttooling/file-ops). - merge generuje regułę dłuższą niż ~280–400 znaków (zwykle znak, że to za dużo naraz).
B. Evidence gating (promocja tylko z dowodami)
FAIL
- promocja do AGENTS/TOOLS/SOUL bez minimalnych dowodów:
verifiedCount >= 2albouserConfirmed=true- i preferowane:
distinctContexts >= 2dla nie-trywialnych rzeczy
WARN
verifiedCount == 1i brak potwierdzenia usera (ryzyko false positive).- brak
messageIds/ brak śladu skąd to przyszło (utrudnia debug).
C. TTL / hotfix hygiene
FAIL
- hotfix jest promowany jako permanentny (TTL usunięte) bez dowodów verified.
- w systemie zostają hotfixy po
expiresAt < now(nie są wygaszane).
WARN
- merge miesza verified rule + hotfix i robi wynik permanentny (zamiast propagować najbliższe
expiresAt).
D. Scope (global vs local preference)
FAIL
- reguła oznaczona jako “style/local_preference” trafia do AGENTS_CORE / globalnych zasad.
WARN
- scope nie jest określony (albo nie da się go wywnioskować) dla rzeczy niebezpiecznych (safety/ops).
E. Safety / external actions
FAIL
- jakakolwiek “operacja zewnętrzna” (wysyłka, publikacja, zmiany prod) bez flagi “userConfirmed”.
- jakakolwiek destrukcja (delete/overwrite) bez guardów i planu rollback.
(W Twoim self‑improver to zwykle ma być po prostu: “nigdy nie rób external/destructive w nightly review”.)
F. Determinizm i idempotencja
FAIL
- LLM‑etapy (merge/router/lint) nie zwracają strict JSON zgodnego ze schema.
- brak “operations plan” (czyli nie wiadomo co dokładnie zmieniasz).
WARN
- wynik zależny od kolejności wejść bez sortowania (np. reguły w klastrze nie są sortowane po
id→ niestabilne merge).
G. Budżety
FAIL
- przekroczone twarde budżety (np. liczba bulletów w AGENTS, limit nowych slugów/tydzień) i brak konsolidacji.
WARN
- budżety przekraczane trendem (np. +10% tygodniowo) — znak, że merge nie kompresuje wystarczająco.
4) Output lintera (JSON Schema) + przykładowy wynik
Schema: handoff-lint-output.schema.json
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "HandoffLintOutput",
"type": "object",
"additionalProperties": false,
"required": ["status", "failures", "warnings", "recommendedActions", "confidence"],
"properties": {
"status": { "type": "string", "enum": ["pass", "warn", "fail"] },
"failures": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": false,
"required": ["code", "message"],
"properties": {
"code": { "type": "string" },
"message": { "type": "string" },
"slug": { "type": "string" },
"ruleIds": { "type": "array", "items": { "type": "string" } }
}
}
},
"warnings": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": false,
"required": ["code", "message"],
"properties": {
"code": { "type": "string" },
"message": { "type": "string" },
"slug": { "type": "string" }
}
}
},
"recommendedActions": {
"type": "array",
"items": { "type": "string" }
},
"confidence": { "type": "number", "minimum": 0, "maximum": 1 }
}
}
Przykład outputu
{
"status": "fail",
"failures": [
{
"code": "ONE_RULE_PER_SLUG_VIOLATION",
"message": "Proposed promotion would create 2 rules for slug tooling/file-ops in AGENTS_RULES.md. Must merge/replace.",
"slug": "tooling/file-ops",
"ruleIds": ["LRN-1", "LRN-9"]
}
],
"warnings": [
{
"code": "WEAK_EVIDENCE",
"message": "Promotion has only 1 verified application and no user confirmation.",
"slug": "web/search"
}
],
"recommendedActions": [
"Run merge step again for slug tooling/file-ops and produce a single canonical rule.",
"Do not promote web/search yet; keep as pending until verifiedCount>=2 or userConfirmed=true."
],
"confidence": 0.84
}
5) Prompt do odpalenia Handoff Lint (LLM‑judge, JSON‑only)
Jeśli chcesz robić lint przez LLM (albo hybrydowo: heurystyki → LLM tylko do edge cases), to wklej:
You are a "Handoff Linter" for an autonomous agent's self-improvement pipeline.
Goal:
Given a handoff package describing proposed rule merges/promotions/hotfix TTLs, decide if it is safe and high-quality to apply.
Return ONLY valid JSON matching the provided HandoffLintOutput schema. No prose.
Hard checks (fail if violated):
- One rule per slug in AGENTS: do not allow duplicates; require merge/replace.
- Promotions require evidence: verifiedCount>=2 OR userConfirmed=true. Prefer distinctContexts>=2.
- Hotfix TTL: do not make hotfix permanent without evidence; expire hotfixes past expiresAt.
- Do not promote local/style preferences as global agent policy.
- No external/destructive actions unless explicitly userConfirmed (if any exist -> fail).
Soft checks (warnings):
- New slug creation when existing slug fits.
- Overly long merged rules.
- Missing source/evidence links (messageIds).
- Budget pressure trends.
Inputs:
handoff: {{HANDOFF_JSON}}
now: {{NOW_ISO}}
outputSchema: {{HANDOFF_LINT_OUTPUT_SCHEMA_JSON}}
Return JSON matching outputSchema.
Jeśli chcesz, podeślij mi proszę (w 1 poście) jak dokładnie teraz wygląda u Ciebie:
- format Twoich “lesson entries” w
.learnings/ - jak zapisujesz hotfixy z TTL
- jak wygląda AGENTS.md (czy już masz podział CORE/RULES)
…to dopasuję Ci ten Handoff Lint pod Twoje realne pola (kody błędów, budżety, minimalne evidence), żebyś mógł go wkleić 1:1 do skilla.