{"slug":"skmtc-retro-review","title":"skmtc-retro-review","summary":"Aggregate friction log files across a time period to identify recurring patterns, classify each cluster by intervention type, produce a prioritized action plan with success criteria, and calculate convergence metrics. Complements `skmtc-retro` (which captures per-session signal) ","platform":"Claude","tags":[],"authorName":"LLM Mart","authorSlug":"llm-mart","score":0,"source":"github","price":null,"verified":false,"createdAt":"2026-09-18T13:27:38.246714Z","repo":{"url":"https://github.com/skmtc/skmtc","stars":19,"forks":0,"license":"Apache-2.0","updatedAt":"2026-09-18T16:24:15Z"},"bodyHtml":"<hr>\n<p>name: skmtc-retro-review\nversion: 0.1.0\ndescription: |\nAggregate friction log files across a time period to identify recurring\npatterns, classify each cluster by intervention type, produce a\nprioritized action plan with success criteria, and calculate convergence\nmetrics. Complements <code>skmtc-retro</code> (which captures per-session signal)\nby acting as the system's actuator: turning accumulated observations into\ndecisions. The primary output is a review document that makes the \"is it\ngetting better?\" question answerable.</p>\n<p>Use this skill when the user asks to \"review retros\", \"review friction\",\n\"run a retro review\", \"what's the pattern across sessions\", \"what should\nwe fix next\", or on a periodic cadence (monthly, pre-release). Also run\nafter a cluster of sessions on the same feature area to surface systemic\nissues before they compound.</p>\n<p>Distinct from <code>skmtc-retro</code> — that skill captures per-session\nobservations; this skill synthesizes them into decisions. Do not run\nthis skill as a substitute for a per-session retro.\nallowed-tools:</p>\n<ul>\n<li>Read</li>\n<li>Write</li>\n<li>Edit</li>\n<li>Glob</li>\n<li>Grep</li>\n<li>Bash\nmetadata:\ninternal: true</li>\n</ul>\n<hr>\n<h1>SKMTC retro review</h1>\n<p>The friction log is a sensor. This skill is the actuator. Its job is to\nread accumulated observations, detect patterns the per-session view cannot\nsee, classify each pattern by what kind of intervention would eliminate it,\nand produce an action plan the user can execute.</p>\n<p>Without this skill, the friction log is a cemetery: observations accumulate\nbut nothing systematically improves. The review closes the loop.</p>\n<h2>1. When to invoke</h2>\n<p><strong>Scheduled cadence (recommended):</strong></p>\n<ul>\n<li>Monthly: review all sessions in the prior month.</li>\n<li>Pre-release: audit open entries against the release's scope to catch\nunresolved blockers before they reach users.</li>\n</ul>\n<p><strong>On-demand:</strong></p>\n<ul>\n<li>After 3+ sessions in the same feature area (e.g., \"three sessions on\nenrichment config in a week — what's the systemic issue?\").</li>\n<li>When the user suspects a pattern but can't see it from individual retros.</li>\n<li>After a significant skill or doc update: \"did the change actually work?\"</li>\n</ul>\n<p><strong>Skip if:</strong></p>\n<ul>\n<li>Fewer than 3 session files have accumulated since the last review.</li>\n<li>The friction log is empty or contains only resolved entries.</li>\n</ul>\n<h2>2. Locating files</h2>\n<p><strong>Friction log:</strong></p>\n<pre><code>&lt;skmtc-root&gt;/skmtc/deno/docs/friction-log/\n</code></pre>\n<p><strong>Review output:</strong></p>\n<pre><code>&lt;skmtc-root&gt;/skmtc/deno/docs/friction-log/reviews/\n</code></pre>\n<p>Create the <code>reviews/</code> subdirectory if it doesn't exist.</p>\n<p><strong>Review filename:</strong></p>\n<pre><code>&lt;YYYY-MM-DD&gt;-review-&lt;period&gt;.md\n</code></pre>\n<p>Where <code>&lt;period&gt;</code> is a human-readable date range: <code>2026-05</code> (monthly),\n<code>2026-Q2</code> (quarterly), or <code>2026-05-12-to-05-14</code> (targeted).</p>\n<p>Examples:</p>\n<ul>\n<li><code>2026-05-15-review-2026-05.md</code></li>\n<li><code>2026-05-15-review-pre-v0.5.md</code></li>\n</ul>\n<h2>3. Reading the friction log</h2>\n<h3>Which files to read</h3>\n<ol>\n<li><strong>Glob</strong> the friction log directory for <code>*.md</code> files, excluding <code>CLAUDE.md</code>,\n<code>README.md</code>, <code>discrepancy-catalog.md</code>, and anything in <code>reviews/</code>.</li>\n<li><strong>Filter by date</strong>: include only files whose <code>YYYY-MM-DD</code> prefix falls\nwithin the review period. For a monthly review, include all files from\nthat month plus any older files with open entries.</li>\n<li><strong>Always include files with open entries</strong> regardless of date — unresolved\nobservations accumulate across periods and contribute to the leak metric.</li>\n</ol>\n<h3>What to extract from each file</h3>\n<p>For each retro file, extract:</p>\n<ul>\n<li><strong>Session date and topic</strong> (from the filename and <code># heading</code>)</li>\n<li><strong>All entries</strong>: number, heading, severity tag, status</li>\n<li><strong>Knowledge acquired rows</strong> (from <code>## Knowledge acquired</code> tables if present)</li>\n<li><strong>Version anchors</strong> on friction entries (which version was the pain observed against?)</li>\n<li><strong>Resolution status</strong>: <code>open</code>, <code>resolved &lt;date&gt;</code>, <code>superseded</code>, <code>wontfix</code></li>\n</ul>\n<p>Do not try to re-derive the root cause from entry bodies at this stage —\nextract the structured fields first, then read bodies only for entries you\nintend to cluster.</p>\n<h3>Reading efficiency</h3>\n<p>With many files, read the <code>## Index</code> table first (it's a summary of the\nwhole file). Read entry bodies only for entries that survive initial\nfiltering. This avoids loading the full text of every historical file.</p>\n<h2>4. Clustering entries</h2>\n<p>Clustering is the hardest step and the most error-prone. The goal is to\ngroup entries that share a <strong>root cause</strong>, not just a surface topic. Two\nentries about \"import registration\" may have completely different root\ncauses; two entries that look unrelated (e.g., \"error message was unclear\"\nand \"I had to read the source to understand X\") may share the root cause\n\"API behavior is not legible from its interface.\"</p>\n<h3>Clustering rules</h3>\n<ol>\n<li><p><strong>Group by root cause, not by topic.</strong> Ask: \"Would fixing X also fix Y?\"\nIf yes, they belong in the same cluster. If not, keep them separate even\nif their surface topic is the same.</p>\n</li>\n<li><p><strong>A cluster must have at least 2 entries</strong> from different sessions (or 1\nentry classified as <code>[blocker]</code>) to warrant action. Single-session\nsingle-occurrence friction may be genuinely incidental.</p>\n</li>\n<li><p><strong>One entry can belong to multiple clusters</strong> if it has multiple root\ncauses. Prefer the most specific cluster.</p>\n</li>\n<li><p><strong>Explicitly note your clustering hypothesis</strong> in the review. \"I'm\ngrouping these because I believe they share root cause X\" — this lets the\nuser push back if the grouping is wrong. Do not present clusters as facts.</p>\n</li>\n<li><p><strong>Unclustered entries</strong> — entries that don't fit any cluster — are still\nworth listing. Single-occurrence blockers in particular get their own\ncluster even without a second instance, because their severity warrants\nattention.</p>\n</li>\n</ol>\n<h3>Cluster description format (internal working note)</h3>\n<p>For each cluster before writing the review:</p>\n<pre><code>Cluster: &lt;short name&gt;\nRoot cause hypothesis: &lt;one sentence&gt;\nEntries: &lt;file&gt;#&lt;N&gt;, &lt;file&gt;#&lt;N&gt;, ...\nSeverity range: &lt;lowest&gt; to &lt;highest&gt;\nResolved entries: N of total\n</code></pre>\n<h2>5. Intervention taxonomy</h2>\n<p>For each cluster, classify by intervention type using the decision tree\nbelow. Work through the questions in order — higher-ranked interventions\nare more permanent than lower-ranked ones.</p>\n<h3>Decision tree (in priority order)</h3>\n<p><strong>1. Can this be eliminated by invariant enforcement (tooling)?</strong></p>\n<p>This is the highest-leverage intervention. A mechanically-checked rule\ncannot be violated silently; documentation can.</p>\n<p>Candidates:</p>\n<ul>\n<li>Rules that must hold for every generator (single-base, location-independence,\nno cross-package peers) → <code>doctor</code> check or bundle-time lint rule.</li>\n<li>Rules about file structure or import shape → custom <code>deno lint</code> plugin or\npre-bundle validation step.</li>\n<li>Invariants currently only documented in skills → consider promoting to\nruntime assertion or CLI warning.</li>\n</ul>\n<p>If tooling is feasible: recommend a specific check (what it tests, what\nerror it produces, where it runs). Label intervention type: <code>tooling</code>.</p>\n<p><strong>2. Is this a footgun in the API design?</strong></p>\n<p>A footgun is an API that is easy to misuse in a way that compiles and runs\nbut produces wrong output. Examples: <code>ImportNameArg</code> object form producing\nunexpected aliasing; <code>.isRef() ? resolve() : schema</code> ternary being\nredundant because the non-ref variants also implement <code>.resolve()</code>.</p>\n<p>Footguns cannot be fully fixed by documentation — the fix is normalization,\ntightening the type to block invalid input, or a better runtime error.</p>\n<p>If a footgun: recommend the specific API change (normalize the edge case,\nrestrict the type, add a runtime guard). Label: <code>skmtc-code</code>.</p>\n<p><strong>3. Is this a missing runtime capability (architectural limit)?</strong></p>\n<p>When the task genuinely cannot be done with the current API — not a\ndocumentation gap, but a structural absence. Example: the\none-operation-to-many-forms blocker that required the operation-variant\naxis in <code>@skmtc/core@0.5.0</code>.</p>\n<p>These are the most expensive to fix but also have the highest impact.\nIf it's an architectural limit: flag for core roadmap with a description\nof what the API surface should look like. Label: <code>skmtc-core-feature</code>.</p>\n<p><strong>4. Is this a wrong LLM prior about SKMTC behavior?</strong></p>\n<p>The LLM's training data includes many frameworks. It applies defaults from\nthose frameworks to SKMTC. When the SKMTC behavior differs from the prior,\nfriction occurs even when the behavior is correctly documented — because the\nLLM didn't reach for the docs.</p>\n<p>Skill updates override priors at task time. They are most effective when\nthey name the prior explicitly: \"In TypeScript you would do X. In SKMTC\nyou do Y instead, because Z.\"</p>\n<p>If a wrong prior: add an operational principle to the relevant skill with\nthe pattern <code>\"In &lt;other&gt; you would... In SKMTC you... because...\"</code>. Label:\n<code>skill-update</code>.</p>\n<p><strong>5. Is this a knowledge gap in docs?</strong></p>\n<p>The agent had to discover correct behavior by trial, reading source, or\nasking the user — and the answer exists nowhere in docs or skills.</p>\n<p>Sub-types:</p>\n<ul>\n<li><strong>API reference gap</strong>: a method, shape, or option isn't documented.\nFix: add to API reference.</li>\n<li><strong>Principle gap</strong>: a design rule or philosophy isn't articulated.\nFix: add to a how-to doc or concept doc.</li>\n<li><strong>Discoverability gap</strong>: the doc exists but the agent couldn't find it.\nFix: improve cross-referencing, add to agent-context surfacing, or move\nthe doc closer to where agents look first.</li>\n</ul>\n<p>Also consider adding the knowledge to <code>skmtc agent-context</code> output — if\nan agent starts briefed with this fact, the friction never occurs. Label:\n<code>doc-update</code>, <code>agent-context</code>, or <code>doc-discoverability</code>.</p>\n<p><strong>6. Is this a missing worked example?</strong></p>\n<p>Some principles are best taught by a concrete, working example rather than\na rule. If the friction repeatedly occurs despite the rule being documented,\nthe rule alone isn't working — add an example.</p>\n<p>Examples live in test fixtures, an <code>examples/</code> directory, or inline in\nskill entries. The example must be a complete, real, runnable snippet —\nnot pseudocode. Label: <code>example-addition</code>.</p>\n<p><strong>7. Should this API or generator be removed?</strong></p>\n<p>Sometimes the right fix is deletion. If an API creates persistent footguns\nwith no clean fix, or a generator's design is fundamentally incompatible\nwith SKMTC's regeneration contract, removing it is higher leverage than\ncontinuing to document around it. The GraphQL thin-wrapper generators were\ndeleted rather than fixed.</p>\n<p>Recommend removal only when: (a) the API is a persistent source of friction\nacross multiple sessions, (b) a skill/doc fix has already been attempted and\ndidn't eliminate recurrence, and (c) there is an alternative approach.\nLabel: <code>removal</code>.</p>\n<h3>Intervention label reference</h3>\n<table>\n<thead>\n<tr>\n<th>Label</th>\n<th>What it is</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>tooling</code></td>\n<td>Doctor check, lint rule, bundle-time validation</td>\n</tr>\n<tr>\n<td><code>skmtc-code</code></td>\n<td>Bug fix or API normalization in <code>@skmtc/core</code> or a gen-* package</td>\n</tr>\n<tr>\n<td><code>skmtc-core-feature</code></td>\n<td>New capability needed in <code>@skmtc/core</code></td>\n</tr>\n<tr>\n<td><code>skill-update</code></td>\n<td>New or modified operational principle in a skill</td>\n</tr>\n<tr>\n<td><code>doc-update</code></td>\n<td>New or expanded content in API reference or how-to docs</td>\n</tr>\n<tr>\n<td><code>agent-context</code></td>\n<td>Add fact to <code>skmtc agent-context</code> output</td>\n</tr>\n<tr>\n<td><code>doc-discoverability</code></td>\n<td>Improve cross-referencing or surfacing of existing doc</td>\n</tr>\n<tr>\n<td><code>example-addition</code></td>\n<td>Add a worked example to a test, examples dir, or skill</td>\n</tr>\n<tr>\n<td><code>removal</code></td>\n<td>Deprecate or delete the problematic API or generator</td>\n</tr>\n</tbody>\n</table>\n<h2>6. Convergence metrics</h2>\n<p>Calculate these metrics for the review period and append a row to the\nmetrics history table in the review file.</p>\n<h3>Friction Recurrence Rate (FRR)</h3>\n<p>The primary convergence signal.</p>\n<pre><code>FRR = recurrent entries / total entries (for the period)\n</code></pre>\n<p>A \"recurrent entry\" is one where the same root cause was logged in a prior\nperiod and the prior instance has status <code>open</code> (no intervention was made\nor the intervention didn't work).</p>\n<ul>\n<li><strong>FRR trending down</strong>: interventions are working; new friction is mostly\nnovel.</li>\n<li><strong>FRR flat</strong>: interventions aren't landing. Check whether recommended\nactions were actually completed. Check whether the skill/doc change\ntargeted the right root cause.</li>\n<li><strong>FRR trending up</strong>: regression — something broke that was previously\nworking, or a new footgun was introduced.</li>\n</ul>\n<h3>Severity distribution</h3>\n<pre><code>Blocker% = blocker entries / total entries\n</code></pre>\n<p>Convergence looks like: <code>Blocker% → 0</code>, then <code>Friction% → 0</code>, leaving\nonly <code>Polish%</code> and eventually silence. If <code>Blocker%</code> is flat or rising,\nthe system is not converging at the structural level — code changes are\nneeded, not just docs.</p>\n<h3>Open entry accumulation</h3>\n<pre><code>Total open entries (all time) = sum of unresolved entries across all files\n</code></pre>\n<p>This number should not grow unboundedly. If it grows faster than entries\nare resolved, the action loop is too slow. A target: open entries should\nhalve within two review cycles after a recommendation is acted on.</p>\n<h3>Knowledge backlog</h3>\n<pre><code>Knowledge backlog = count of \"Knowledge acquired\" rows across all retro\n                    files whose doc implication is not \"none\" and whose\n                    content has not yet been added to docs/skills\n</code></pre>\n<p>This measures how much extracted intelligence remains un-acted. A large\nbacklog means the retro → doc pipeline is blocked somewhere.</p>\n<h3>Resolution velocity</h3>\n<pre><code>Resolution velocity = average days from entry creation to resolved status\n                      (for entries resolved in the review period)\n</code></pre>\n<p>Long velocity (30+ days) indicates the action loop is slow — typically\nbecause \"recommended action\" stays in a review doc without being assigned\nor prioritized. Short velocity (&lt; 7 days) is ideal.</p>\n<h2>7. Review file format</h2>\n<pre><code># Friction Review — &lt;period&gt;\n\n**Reviewed:** &lt;YYYY-MM-DD&gt;\n**Period:** &lt;date range&gt;\n**Sessions included:** N\n**Files read:** &lt;list of filenames&gt;\n\n## Summary\n\n| Metric | Value | vs. prior period |\n|--------|-------|-----------------|\n| Total entries | N | +N / -N |\n| Blocker% | X% | ↑ / ↓ / — |\n| Friction Recurrence Rate | X% | ↑ / ↓ / — |\n| Total open entries (all time) | N | +N / -N |\n| Knowledge backlog | N items | +N / -N |\n| Resolution velocity (period) | N days avg | |\n\n## Convergence signal\n\n&lt;2-3 sentences. Is the system converging, flat, or diverging? What's the\ndominant pattern? Be direct — \"FRR is 60% and flat; skill updates are not\nreaching the root cause\" is more useful than \"mixed results.\"&gt;\n\n## Clusters\n\n| # | Cluster | Root cause hypothesis | Sessions | Severity | Open | Recommended intervention |\n|---|---------|----------------------|----------|----------|------|--------------------------|\n| C1 | &lt;name&gt; | &lt;one sentence&gt; | N | blocker/friction/polish | N/total | &lt;label&gt; |\n\n## Action plan\n\n### P1. &lt;Intervention label&gt; — &lt;Cluster name&gt;\n\n**Root cause:** &lt;one sentence&gt;\n**Evidence:** &lt;file&gt;#&lt;N&gt;, &lt;file&gt;#&lt;N&gt; (N total instances)\n**What to do:** &lt;specific, actionable change — not \"improve docs\" but \"add\na note to §import-registration in the generator skill explaining that the\nobject form of ImportNameArg always produces `name as alias` output, even\nwhen alias is omitted, and the bare string form is correct for non-type\nnon-aliased imports\"&gt;\n**Success criterion:** &lt;falsifiable condition — \"subsequent retro files\nshould contain zero entries about ImportNameArg object form misuse\"&gt;\n**Verification:** check the next 2-3 retro files after the change for\nrecurrence of this pattern\n\n---\n\n### P2. ...\n\n## Knowledge backlog\n\nItems from `## Knowledge acquired` tables not yet reflected in docs/skills:\n\n| Source | Item | Doc implication | Priority |\n|--------|------|-----------------|----------|\n| &lt;file&gt; K1 | &lt;what was learned&gt; | &lt;skill/doc/agent-context&gt; | high/medium/low |\n\n*If backlog is empty: \"All knowledge-acquired items from this period are\nreflected in current docs and skills.\"*\n\n## Metrics history\n\n&lt;!-- append one row per review; do not delete prior rows --&gt;\n\n| Review date | Period | Sessions | FRR | Blocker% | Open (all time) | Knowledge backlog | Actions completed |\n|-------------|--------|----------|-----|----------|-----------------|-------------------|-------------------|\n| &lt;YYYY-MM-DD&gt; | &lt;period&gt; | N | X% | X% | N | N | N of N prior |\n</code></pre>\n<h3>Metrics history</h3>\n<p>The <code>## Metrics history</code> table accumulates across reviews — append one row\nper review cycle, never delete prior rows. This is the convergence record.\nIt is the only place where the trend question (\"is it getting better?\") can\nbe answered empirically rather than by impression.</p>\n<p>If no prior review file exists, create the table with one row. Future\nreviews append to the same table in the same file, or to a new review file\nthat cross-references the prior one with a link.</p>\n<h3>Action plan ordering</h3>\n<p>Order the action plan by:</p>\n<ol>\n<li>Intervention type permanence: <code>tooling</code> &gt; <code>skmtc-code</code> &gt; <code>skmtc-core-feature</code> &gt; <code>skill-update</code> &gt; <code>doc-update</code> &gt; <code>example-addition</code></li>\n<li>Within the same type: frequency × severity. A cluster of 4 <code>[friction]</code>\nentries outranks 1 <code>[friction]</code> entry; a <code>[blocker]</code> outranks multiple\n<code>[friction]</code> even at the same type level.</li>\n<li>Recurrent clusters (FRR contributors) rank above first-occurrence clusters\nof the same severity — recurrence means a prior attempt didn't work.</li>\n</ol>\n<h3>Action plan specificity requirement</h3>\n<p>Every action plan entry must name:</p>\n<ul>\n<li>The exact file/section to change (not just \"update the skill\")</li>\n<li>The exact content to add or change (not just \"clarify this\")</li>\n<li>A falsifiable success criterion</li>\n<li>How to verify it worked (what to look for in the next retro files)</li>\n</ul>\n<p>Vague recommendations (\"improve documentation of X\") are not actionable and\nwill not close the loop. Specific recommendations (\"add the following\nparagraph to §3 of skmtc-generator SKILL.md, under the <code>register</code> API\nsection:...\") can be completed in minutes.</p>\n<h2>8. Prior action follow-up</h2>\n<p>Before drafting new action items, check the most recent prior review file\n(if one exists) and answer:</p>\n<ol>\n<li><strong>What was recommended?</strong> List the prior P1, P2, P3 items.</li>\n<li><strong>What was completed?</strong> For each, check whether the recommended change\nappears in the skill, doc, or code (read the target file or run a grep).</li>\n<li><strong>Did it work?</strong> For completed items, check whether the friction pattern\nrecurred in sessions after the change. If yes: the intervention targeted\nthe wrong root cause — escalate to a higher-permanence intervention.</li>\n<li><strong>What was not completed?</strong> List items that were recommended but not\nacted on. These carry forward to the new action plan with increased\npriority — a recommendation that's been skipped once needs a specific\nowner or a lower-effort formulation.</li>\n</ol>\n<p>Record this follow-up as the first section after the summary in the new\nreview file.</p>\n<h2>9. Composing the review</h2>\n<p>Full flow:</p>\n<ol>\n<li><strong>Glob</strong> the friction log for files in scope. List them explicitly.</li>\n<li><strong>Read the Index tables</strong> of each file. Extract entry numbers, headings,\nseverities, statuses. Do not read bodies yet.</li>\n<li><strong>Filter</strong>: separate open from resolved entries. Separate the review\nperiod entries from the all-time-open entries carried forward.</li>\n<li><strong>Read bodies</strong> only for open entries you intend to cluster — skip\nresolved entries unless investigating whether a fix worked.</li>\n<li><strong>Check prior review</strong> if one exists: list what was recommended,\nwhat was completed, what recurred.</li>\n<li><strong>Cluster</strong> open entries by root cause. State each clustering hypothesis\nexplicitly. Assign intervention type per cluster using the decision tree.</li>\n<li><strong>Calculate metrics</strong>: FRR, Blocker%, total open, knowledge backlog,\nresolution velocity.</li>\n<li><strong>Compile the knowledge backlog</strong>: extract <code>## Knowledge acquired</code> rows\nfrom the period's retro files. Check each against current docs/skills to\nsee if it's already been addressed.</li>\n<li><strong>Write the review file</strong>: summary → convergence signal → prior action\nfollow-up → clusters → action plan → knowledge backlog → metrics history.</li>\n<li><strong>Summarise to the user</strong> in one short message:\n<code>Review written to &lt;filename&gt;. N clusters, top intervention: &lt;P1 label — cluster name&gt;. FRR: X% (prior: Y%). &lt;convergence signal sentence&gt;.</code></li>\n</ol>\n<h2>10. After the review</h2>\n<p>The user decides which action plan items to execute. The review skill does\nnot execute them — it produces decisions. Each action item is a unit of\nwork for the relevant skill (<code>skmtc-generator</code>, <code>skmtc-cli</code>, docs editing,\nor filing a SKMTC code issue).</p>\n<p>When an action item is completed, update the corresponding retro file\nentries' <code>**Status:**</code> lines and the <code>## Index</code> rows. Also update the\nreview file's metrics history row for the period (if the resolution\nhappened within the same period).</p>\n<p>The next review cycle opens with §8 \"Prior action follow-up\" to verify\nthat completed items actually eliminated the friction. This is the\nfeedback loop that drives convergence: observe → cluster → intervene →\nverify → observe.</p>\n<p><strong>The convergence guarantee</strong>: the system converges when every friction\ncluster, on recurrence, triggers escalation to a higher-permanence\nintervention. Friction that doesn't yield to docs must be taken to\nskill-update. Skill-updates that don't eliminate recurrence must be\ntaken to code. Code changes that are blocked must be taken to the\nroadmap. Clusters that cannot be addressed at any level are candidates\nfor removal of the offending API or feature. With this escalation\ndiscipline, every class of friction either gets eliminated or gets\nexplicitly accepted as a known cost — neither outcome leaves the system\nin an unexamined drift state.</p>\n","files":[{"path":"commands/skmtc-retro-review.md","sizeBytes":3713,"isText":true},{"path":"design.md","sizeBytes":8486,"isText":true},{"path":"SKILL.md","sizeBytes":21392,"isText":true}],"reviewScore":null,"reviewSummary":null,"trust":{"provenance":"trusted-source-unreviewed","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow.","bodySource":null},"bodyLocked":false,"purchaseUrl":null,"sourceUrl":null,"report":{"provenance":"trusted-source-unreviewed","screen":{"ran":true,"outcome":"clean","suspicious":0,"notes":0,"hiddenCharacters":false},"virusScan":{"engine":"clamav","status":"clean","scannedAt":"2026-09-18T13:28:42.703507Z","sha256":"ACC80E503786DEFEB2F40FB7766E5346ADB82D71FE7AB625AC7778C92F89407E","sizeBytes":14328},"review":null,"source":{"repositoryUrl":"https://github.com/skmtc/skmtc","path":"deno/docs/skills/skmtc-retro-review","license":"Apache-2.0","commit":"e3abffcbfd1109c694656742d3a49491dbf86b92","subtreeSha":"2009A71ABF40A6126DE23619401487BE0D2D3B8F0F2FD5D7D36783C5BEA7443D","lastSyncedAt":"2026-09-27T19:30:42.792127Z"},"reviewedAt":"2026-09-18T13:31:42.548969Z","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow."},"install":[{"target":"skills-cli","command":"npx skills add https://github.com/skmtc/skmtc/tree/main/deno/docs/skills/skmtc-retro-review"},{"target":"claude-code","command":"claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install skmtc-skmtc@llmmart"},{"target":"git","command":"git clone https://github.com/skmtc/skmtc.git"}]}