skills/assessing-comprehension-debt/SKILL.md
Measures the risk that code shipped without anyone understanding it: a teach-back attestation on high-risk changes, a risk band from changed-code complexity, diff size and whether a human explanation accompanied it, and optional AI-authorship provenance. Findings stay advisory by design. Use when an AI-assisted codebase grows faster than the team reads it, when reviews are rubber-stamped, when nobody can explain a module that ships weekly, or when leadership asks how much of the code the team can actually maintain.
npx skillsauth add jaktestowac/awesome-copilot-for-testers assessing-comprehension-debtInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Use this skill when code is arriving faster than anyone is reading it, and every other quality signal still looks fine.
Comprehension debt is the gap between the code that exists and the code the team actually understands. Tests pass, coverage holds, lint is clean - and nobody can explain why the pricing module works. When an agent writes the implementation and the tests, both signals go green without a single human forming a mental model. That is the debt this skill makes visible.
It is advisory, permanently, on purpose. Understanding lives in people's heads and cannot be proven by any signal. What can be measured is the risk of comprehension debt and the absence of evidence of understanding. A gate that claims to measure understanding is lying, and once someone notices, every finding it ever produced loses credibility.
Intent: trailer or an ADR is evidence that somebody thought about it. That is exactly the behaviour to reward.Pick the range: a release, a quarter, a module's history. Then check what signals are available:
git log <range> --format='%h %an %s'
git log <range> --format='%(trailers:key=Intent,valueonly)'
git log <range> --format='%(trailers:key=Assisted-by,valueonly)'
git log <range> --format='%(trailers:key=Comprehension-Attested-by,valueonly)'
git log <range> --numstat
If Assisted-by: trailers are not in use, provenance is unknown - report it as unknown and move on. Do not infer AI authorship from commit size, style, or timing; those inferences are wrong often enough to poison the whole report.
Three inputs, from ./resources/risk-band-rubric.md:
| Input | Signal |
| --- | --- |
| Complexity added | new branches, new conditionals, nesting depth, new cross-module calls |
| Size | changed lines, files touched, whether it lands as one commit or a reviewable sequence |
| Explanation present | an Intent: trailer, an ADR link, a module register entry, or a substantive review discussion |
Bands: high (large, branch-heavy, no explanation), medium (one of the three), low (small, or well explained, or both).
A high band means: if nobody understands this, we would not be able to tell. That is all it means, and saying so plainly is what keeps the metric usable.
For changes on high-risk surface (recording-change-intent has the rules), look for a record that a named human can explain it:
Comprehension-Attested-by: <name> trailer, author-side or reviewer-sideattesting-manual-verification)Status is FULL (attested), NONE (high-risk surface, no record), or N/A (not high-risk surface).
Where a record is missing and it matters, run the teach-back in ./resources/teach-back-protocol.md: four questions, ten minutes, and the answers tell you more than the band ever will. The protocol's value is not the record - it is that the conversation happens.
Then the only recommendations worth making: which specific modules deserve a teach-back session, which deserve a walkthrough written down, and which deserve a second pair of eyes on the next change.
Worth stating in the report, because the temptation to over-read the number is strong:
Assisted-by:. Teams stop using the trailer, and the one honest signal disappears../resources/risk-band-rubric.md - the three inputs, how to compute each, band boundaries, worked examples, and known false positives./resources/teach-back-protocol.md - the four questions, how to run a ten-minute session, what a weak answer looks like, and how to record the outcomerecording-change-intent - an Intent: record is an input to the band, and the sibling debt this one pairs withattesting-manual-verification - where a teach-back record lives and how it expiresgoverning-quality-waivers - the third governance record: why a check is offtech-debt-analysis - code and architecture health, as opposed to whether anyone understands itdocumenting-test-suites - the usual remediation when a suite is unmaintainable by anyone who did not build itcode-review-advanced - where a teach-back conversation naturally belongsanalyzing-quality-metrics - for trending the band honestly, with its caveats attachedThis skill is complete when:
testing
Tests the customization assets themselves - skills, prompts, custom agents, instructions - the way a product is tested: activation cases that check an asset fires when it should and stays quiet when it should not, output-contract cases, safety cases, collision cases between assets competing for the same trigger, a weighted rubric scored blind, and a baseline-versus-candidate gate before an edit ships. Use when a skill is edited and nobody knows whether behaviour changed, when two skills fight over the same request, when a description is being tuned for discoverability, when a collection has grown past manual spot-checking, or when the request mentions skill evals, prompt regression, or "does this skill actually work".
development
Shapes QA output for the person who has to act on it: result and blocker in the first two lines, one decision per report, findings ordered by what they cost, the long artifact in a file and the decisions in the message, and magnitude stated in units the reader can count. Use when a report is accurate but nobody acts on it, when a finding set is too long to read under time pressure, when the same findings must be retold for a developer, a release manager, and an on-call engineer, or when the request mentions "too long", "make this readable", "just tell me what to do", "so what", or "summarize this for stakeholders". Pairs with unslop-answers, which makes the same report honest.
testing
Verifies that the lines and branches a change actually touched are executed by tests, using LCOV or Cobertura diff coverage instead of whole-repo percentages, and escalates uncovered high-risk changes into a blocking finding. Use when a pull request needs a coverage gate that unrelated tests cannot satisfy, when total coverage looks healthy but the diff is untested, when wiring diff coverage into CI, or when someone claims a change is covered because the suite is green.
development
Cuts AI tells from test code: tests that pass without proving anything, tautological assertions, mock-only tests, hardcoded waits, coverage theater, vague names, swallowed errors, retries used as fixes. Use whenever test code is written, changed, or reviewed, including tests produced as a side effect of a feature task, and when the request mentions "review these tests", "are these tests any good", "this test always passes", "this suite is flaky", or "clean up these tests". Must always apply to test code.