feat(ic-skills-feedback): opt-in failure/coverage-gap feedback skill - #336
feat(ic-skills-feedback): opt-in failure/coverage-gap feedback skill#336marc0olo wants to merge 4 commits into
Conversation
New skill that lets agents send anonymous, opt-in reports when ICP skill work fails or when no skill covers the task (coverage gap) — never on success. - SKILL.md: stateless, failure-only reporting; two payload tiers (structured always / prose only after human approval this turn); consent via project `feedback: on` in AGENTS.md or a one-time session yes; model sent verbatim. - references/error-signals.md: allowlist (regex M####/IC#### + short label set). - references/endpoint.md: maintainer-facing server contract for POST /reports. - llms.txt: onboarding offers the opt-in and records `feedback: on` in the managed AGENTS.md block. - evaluations/ic-skills-feedback.json: 5 output + 5 trigger evals (all pass with skill; large deltas vs baseline on structured-only, PII redaction, coverage gap). Endpoint (feedback-api.skills.internetcomputer.org) is not live yet — this PR is a draft and must not merge until the backend is deployed.
Skill Validation ReportValidating skill: /home/runner/work/icskills/icskills/skills/ic-skills-feedbackStructure
Frontmatter
Markdown
Tokens
Content Analysis
References Content Analysis
Contamination Analysis
References Contamination Analysis
Result: passed Project Checks |
There was a problem hiding this comment.
Pull request overview
Adds a new opt-in ic-skills-feedback skill that enables anonymous reporting of ICP skill failures / partial failures and coverage gaps (no success reporting), plus supporting docs and eval cases. This fits the repo’s goal of improving skill quality by turning real-world failures into actionable leads and future evals.
Changes:
- Adds the new
ic-skills-feedbackskill defining consent rules, payload schema, privacy constraints, and POST behavior. - Adds reference docs for the server contract and an
error_signalsallowlist. - Updates
llms.txtonboarding guidance and adds an evaluation suite for the skill.
Reviewed changes
Copilot reviewed 5 out of 5 changed files in this pull request and generated 5 comments.
Show a summary per file
| File | Description |
|---|---|
src/pages/llms.txt.ts |
Adds onboarding text to optionally enable anonymous failure reporting via feedback: on in AGENTS.md. |
skills/ic-skills-feedback/SKILL.md |
Introduces the new opt-in failure/coverage-gap feedback skill, including schema and sending rules. |
skills/ic-skills-feedback/references/error-signals.md |
Defines an allowlist for safe error_signals tokens. |
skills/ic-skills-feedback/references/endpoint.md |
Documents the intended server-side ingest/validation contract. |
evaluations/ic-skills-feedback.json |
Adds output and trigger eval cases for the new skill. |
Suppressed comments (1)
evaluations/ic-skills-feedback.json:21
- The "autonomous run sends structured tier only" eval is about constructing the exact report payload, but the expected behaviors don't currently assert several required schema fields (e.g., schema_version, agent, model) or that unknown top-level keys are absent. This weakens the regression signal for the core contract of this skill.
"Produces one JSON object with report_type set to failure or partial",
"suspected_cause and outcome_after are values from the allowed enums (outcome_after is worked_around)",
"error_signals contains \"M0220\" and only allowlisted tokens",
"consent_basis is \"project\"",
"Does NOT include task_summary or what_went_wrong, and does not set free_text_reviewed true, because no human approved prose this turn",
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
- llms.txt: correct the consent wording — under project opt-in, structured reports send automatically; only free-text prose is gated on per-turn confirmation (previous "confirms before anything leaves the machine" was misleading). - SKILL.md: add curl connect/max timeouts so feedback never blocks the task. - error-signals.md: define matching normalization (labels case-insensitive; regex codes matched as written) so skill and server agree. - endpoint.md: dedup key uses error_signals (plural), compared as an order-independent set; fix the singular error_signal reference. - evaluations: add top-level skill/description for consistency with other eval files; strengthen the autonomous eval to assert schema_version/agent/model and reject invented top-level keys.
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 5 out of 5 changed files in this pull request and generated no new comments.
Suppressed comments (4)
skills/ic-skills-feedback/SKILL.md:257
- In the decision-flow code block, “feedback:on” is missing the space used everywhere else (
feedback: on). Keeping the exact token consistent reduces the chance an agent copies the wrong form into AGENTS.md.
project feedback:on ......... consent_basis=project
src/pages/llms.txt.ts:71
- The line break splits the sentence at “If the”, which will render awkwardly in the generated llms.txt. Rewrap so the break occurs at a sentence boundary (and consider marking
AGENTS.mdas code for consistency).
\`ic-skills-feedback\` skill, which sends nothing without opt-in and never includes free-text details without explicit confirmation. If the
user agrees, record it by adding a \`feedback: on\` line inside the managed AGENTS.md
block (see below). If they decline, or you cannot ask, leave it off and continue —
never block.
src/pages/llms.txt.ts:129
- The text describing the managed block markers shows the end marker as “:end -->”, but the actual marker used elsewhere in this file is
<!-- ic-skills:managed:end -->. Keeping this accurate helps prevent agents from writing malformed blocks.
\`feedback: on\` inside the managed block you just wrote (between the
\`<!-- ic-skills:managed:start -->\` / \`:end -->\` markers). Its absence means reports
stay off. The \`ic-skills-feedback\` skill reads this line as standing consent.
skills/ic-skills-feedback/SKILL.md:89
- “Create the block if absent” is underspecified here: this repo’s ic-skills managed block has a specific required structure (see llms.txt onboarding), and creating a minimal block just to hold
feedback: oncould leave a malformed/partial managed section. Suggest pointing explicitly to the existing ic-skills managed block markers, and only creating the block using the standard onboarding snippet.
This issue also appears on line 257 of the same file.
If the user says "always send for this project," offer to add `feedback: on` to the
managed block in `AGENTS.md` (create the block if absent; never touch other content).
A dedicated prose field for how the agent resolved/worked around the failure — the fix hint maintainers act on (most useful for worked_around / fixed_with_user_help). Prose tier only (human-approved, PII-scanned, <=600). Updated the enriched payload table + example, the tiers list, endpoint.md (strip/clamp), and the prose eval (WITH 6/6 incl. workaround + PII redaction, baseline 3/6).
The root fix for 'reports lack detail': when a human is present, the skill now proactively offers a redacted what_went_wrong + workaround rather than passively defaulting to structured-only. Rich prose (esp. the workaround, which hints at the fix) is what makes a report triageable. Autonomous runs stay structured-only.
What
Adds
ic-skills-feedback, an opt-in skill that lets agents send anonymous reportswhen ICP skill work fails or when no skill covered the task (coverage gap) —
so maintainers can turn recurring failures into evals and skill fixes. There are no
success reports; this is a lead generator for what breaks, not a satisfaction metric.
Design highlights
feedback: onin the managedAGENTS.mdblock, wired throughllms.txtonboarding) or an explicit one-timesession yes. No consent → do nothing, silently.
exact text this turn?" — a structured tier (enums, skill name/hash, allowlisted
error codes; safe for autonomous runs) that always sends, and a prose tier
(
task_summary/what_went_wrong) that rides along only after human approval.Server enforces a blocklist + PII scan as backstop.
server canonicalizes via an alias table, so no skill release per new model.
suspected_cause: missing_skill,skill_name: "(none)") — the highest-value lead, since it names the next skill to write.POST https://feedback-api.skills.internetcomputer.org/reports. Nospam protection in v1 (public, anonymous, curl-able; impact neutralized by strict
schema + dedup + the untrusted-lead stance).
The ingest endpoint is not live yet. Do not merge until the backend canister
(
feedback-api.skills.internetcomputer.org) is deployed, or agents will POST to adead URL. The backend + triage dashboard are built separately (tracked outside this repo).
Evals
evaluations/ic-skills-feedback.json— 5 output + 5 trigger cases. All pass withthe skill; large deltas vs baseline on the behaviors that matter.
Eval results (with-skill vs baseline)
Baseline (no skill) leaks the private repo name + path in the prose case, invents
non-schema fields in the autonomous and coverage-gap cases, and never limits itself to
the structured tier when running autonomously — the skill fixes all of it.
npm run validatepasses (28/28 skills).🤖 Generated with Claude Code