Developer Contribution Quality Analysis
Objective, multi-dimensional analysis of code contribution quality from git data. Produces individual deep-dive reports and team calibration comparisons.
Modern Best Practices
- Measure contribution quality through outcomes (churn, duplication, test coverage), not presence metrics
- AI-assisted code is normal; score the output, not the authorship
- GitClear Diff Delta and CodeScene Code Health are the established commit-level quality benchmarks
- Stanford ghost engineering research claims commit content analysis predicts expert quality judgments (r=0.82); study is not peer-reviewed — apply with caution
- Agent Trace (Cursor RFC) is an emerging vendor-neutral standard for AI attribution
- DX Core 4 framework consolidates DORA/SPACE into a unified set of four oppositional dimensions
- DORA 2025 itself reports AI adoption now correlates with higher throughput and a "mirror and multiplier" pattern (seven team archetypes replace prior elite/high/medium/low clusters); do not confuse it with vendor telemetry reports
- Faros AI's 2026 "Acceleration Whiplash" telemetry report (4,000+ teams, distinct from DORA) found bugs per developer up 54% and incidents per PR up 242.7% where AI adoption outran test/review discipline — cite it as Faros, not DORA
- GitClear Jan 2026 (2,172 developer-weeks): power AI users produced 4.2x more durable code than non-users but also showed 9x more churn — AI widened an existing performance gap and its downside, not evidence of uniform uplift
- GitClear "The Maintainability Gap" 2026 (623M code changes) extends this: refactor/moved-code share collapsed to 3.8% YTD 2026 (13% in 2023), copy/paste 15.7% in H1 2026, error-masking constructs +47%, cross-file reuse -35% — use these as the current structural-quality benchmarks
- Treat commits and PRs authored end-to-end by an autonomous coding agent (not just AI-assisted) as a distinct evidence class — see Known Traps
Quick Reference
| Task |
Tool / Reference |
Command / Path |
When |
| Extract contribution profiles |
extract-contribution-profile.py |
python scripts/extract-contribution-profile.py --config config.json |
First step after CSV extraction |
| Sample code quality |
sample-code-quality.py |
python scripts/sample-code-quality.py --config config.json |
When repo checkouts available |
| Generate quality report |
generate-quality-report.py |
python scripts/generate-quality-report.py --config config.json --mode person |
After profile extraction |
| Understand scoring model |
scoring-model.md |
references/scoring-model.md |
Before interpreting results |
| Map findings to CC-* rules |
code-quality-sampling-rubric.md |
references/code-quality-sampling-rubric.md |
During code sampling |
| Calibrate against industry |
industry-benchmarks.md |
references/industry-benchmarks.md |
When comparing to external norms |
When to Use This Skill
- Engineering managers assessing individual contribution patterns
- Tech leads reviewing code quality trends across a team
- CTOs building engineering scorecards
- Pre-promotion or performance-review technical calibration
- Measuring AI-assisted development quality impact
- Identifying skill gaps or coaching targets
When NOT to Use This Skill
- Governed multi-signal risk triage -> the project-scoped counterpart skill
- Defining code quality rules ->
software-clean-code-standard
- AI coding tool ROI or adoption tracking ->
dev-ai-coding-metrics
- Repository-level code health (not person-level) ->
qa-refactoring
- General code review workflow ->
software-code-review
Defaults
- Measure contribution quality, not presence or working hours
- Quality is multi-dimensional; no single number replaces the 6-dimension profile
- Compare against personal baseline first, then team, then industry
- AI-assisted code is quality-neutral; measure outcomes (churn, duplication, test coverage) regardless of authorship
- Git data is necessary but not sufficient; always note what evidence is missing
- CC-* rules from
software-clean-code-standard are the code quality rubric
- Minimum data: 30 commits and 20 active days in the analysis window
- Scripts consume the same CSV format as the project-scoped counterpart skill extraction
- Ingest dedupes on
(repo, commit_hash) and cancels Revert "X" + original pairs (both flagged net_cancel) so churn-rate and net_lines do not double-count multi-root scans or self-reverting churn
- Code volume is measured as
code_loc (extension-filtered: drops .json, .yaml, .md, snapshots, generated paths). Raw net_loc and churn_loc are kept for context but never feed the headline rating.
- The D2 headline rating is complexity-weighted:
code_loc × (1 + α·ΔCC + β·novelty), banded against team median with role calibration. Definition is shared with the project-scoped counterpart skill; both skills must produce identical ratings from the same CSV input.
Workflow
- Define the question — quality audit, growth tracking, team calibration, or promotion case
- Set scope — person(s), time window, repo roots
- Extract git + MR data — use the project-scoped counterpart skill extraction scripts or provide CSVs in the same format
- Run contribution profile analysis —
extract-contribution-profile.py computes all Tier 1 signals
- Run code quality sampling (optional) —
sample-code-quality.py maps sampled commits to CC-* rules
- Generate quality report —
generate-quality-report.py in person or team mode
- Present findings with explicit limitations and calibration context
ASCII Flow
contribution quality request
-> define decision: audit, growth, calibration, promotion, or AI impact
-> set people, time window, repos, and minimum data threshold
-> extract and normalize git plus MR/PR evidence
-> dedupe commits and cancel revert pairs
-> compute contribution profile and role-aware baselines
-> sample code quality against CC-* rules when repo checkouts exist
-> generate person, team, scorecard, or JSON output
-> present limitations and calibration context
Fact-Checking
- Known bugs, regressions, framework/compiler/runtime footguns, and version-specific crash or workaround guidance must be verified against current primary web sources before being treated as current fact.
- Verify current external benchmark claims, vendor metrics, and framework standards against primary sources before presenting them as current fact.
- Treat vendor-authored scoring systems, AI attribution standards, and industry benchmark comparisons as volatile unless rechecked against current documentation or published research.
- If web verification is unavailable, label time-sensitive benchmark or standards guidance as unverified.
Decision Tree: Assessment Type
What is the assessment goal?
├── Individual quality audit?
│ ├── Point-in-time snapshot → person quality report
│ └── Trend over time → person trend report (multiple windows)
├── Team quality comparison?
│ ├── Promotion / review calibration → team calibration report
│ └── Quality trend monitoring → team trend report
└── AI impact assessment?
└── Before/after or AI-ratio analysis → quality-neutral outcome comparison
Scoring Model (Summary)
Six dimensions, 100 total points. See references/scoring-model.md for full detail.
| # |
Dimension |
Weight |
Primary Signals |
| D1 |
Delivery Consistency |
20 |
Commit frequency stability, active days, MR throughput, trend |
| D2 |
Code Quality Signals |
25 |
Churn rate (14d), duplication, refactoring ratio, complexity-weighted rating (code-only LOC × ΔCC + novelty), CC-* compliance |
| D3 |
Commit Craft |
15 |
Message quality, scope discipline, PR size, self-merge rate |
| D4 |
Review & Collaboration |
20 |
Review participation, responsiveness, cross-repo contribution |
| D5 |
Test & Safety Practices |
10 |
Test-to-code ratio, test presence in features, security-file awareness |
| D6 |
D6 Context-Only Signal — AI Development Quality |
— |
Annotation only: AI code survival, quality parity, verification burden |
Quality Tiers (D1-D5, 90 pts total): A (72-90 Exemplary), B (54-71 Solid), C (36-53 Developing), D (0-35 Concerning)
D6 carries no point allocation and is excluded from tier assignment. It is appended to reports as a separate annotation. See references/scoring-model.md for rationale.
Output Modes
- Person quality report — individual deep-dive with 6-dimension breakdown, sampled commit quality, CC-* findings
- Team calibration report — comparison matrix with heatmap, tier distribution, team strengths/gaps
- Quality scorecard — one-page quick reference for presentations
- Machine-readable JSON — contribution-profiles.json for dashboards and downstream tools
Known Traps
- Treating commit frequency or online presence as contribution quality when the actual question is code-health and delivery outcomes.
- Comparing developers across very different repo types, support load, or code ownership without first calibrating those constraints.
- Interpreting AI-heavy contribution patterns as automatically higher or lower quality without reviewing churn, survival, and verification burden.
- Building a score from sparse data windows that do not meet the minimum threshold for stable signal extraction.
- Sampling code quality from convenience commits instead of representative work, which biases the conclusions toward visible or recent changes.
- Scoring a PR that was generated end-to-end by an autonomous coding agent (Devin, Codex cloud tasks, Claude Code background/delegated sessions) as if it reflects the human's craft. When a repo's provenance data shows fully agent-authored diffs merged under a human identity, D3 (Commit Craft) and D2 code-surface signals measure the agent's output and the human's review/orchestration judgment, not their hand-written code quality — say so explicitly in the report and do not fold it into an unqualified craft score.
- Letting a rising headline number go unquestioned when the underlying behavior could be gamed: churn can be suppressed by avoiding risky files instead of writing more durable code; PR-size discipline can be gamed by artificially splitting one change into many trivial PRs; test-to-code ratio can be inflated with low-value snapshot or no-op tests. Cross-check any single improving metric against at least one adjacent signal before crediting it.
Common Anti-Patterns
- Turning a multi-dimensional quality model into a hidden ranking engine and pretending the composite number is objective truth.
- Using the analysis for attendance policing or concurrent-employment inference when the skill is supposed to measure contribution quality.
- Treating one period’s score as a permanent trait rather than a snapshot with scope, context, and missing evidence.
- Comparing people on absolute numbers without anchoring against their own baseline and the team’s expected role shape.
- Letting the report imply causality or promotion readiness when the evidence only supports calibration and coaching discussion.
- Letting duplicate
(repo, commit_hash) rows or Revert "X" pairs inflate churn and net_lines; the ingest layer must dedupe and cancel revert pairs before D2 scoring.
Integration
Data Pipeline (supplier: the project-scoped counterpart skill)
This skill consumes the same CSV format produced by:
extract-commits.sh → raw-commits.csv
extract-mr-acceptances.sh → mr-acceptances.csv
It also reuses the identity-aliases.json format and email_to_person config pattern. It does NOT duplicate extraction scripts or authenticity triage.
Code Quality Rubric (consumer: software-clean-code-standard)
Sampled commit findings reference CC-* rule IDs (CC-NAM-01 through CC-DOC-04) and use the same P0-P3 priority system. No rule definitions are duplicated.
Navigation
Resources
- Scoring Model — 6-dimension point model (D1-D5 scored, D6 annotation only); weights, thresholds, tier override rules
- Contribution Signals Catalog — all signals grouped by extraction tier (git-only, static analysis, AI attribution) with confounders
- Code Quality Sampling Rubric — P0-P3 CC-* rule mapping for sampled commits; automated check confidence levels
- AI Attribution Patterns — ground-truth tooling, detection heuristics, quality metrics for AI-assisted code (all context-only)
- MR/PR Quality Signals — rubber-stamp detection, size/review-speed/rework benchmarks and thresholds
- Industry Benchmarks — GitClear (2020-2024 baseline, 2026 cohort), DORA 2024/2025, METR, Stanford calibration data
Templates
- Person Quality Report
- Team Calibration Report
- Quality Scorecard
Scripts
- Pipeline README — setup, CSV format spec, usage
- Config Example
- Extract Contribution Profile
- Sample Code Quality
- Generate Quality Report
Related Skills
- the project-scoped counterpart skill — authenticity triage and governed risk signal convergence (upstream)
software-clean-code-standard — CC-* rule definitions and code review standards (rubric source)
dev-ai-coding-metrics — AI tool adoption and ROI measurement (complementary)
software-code-review — review workflow and judgment (process)
Learnings Loop
Before applying this skill on a non-trivial task, read learnings.consolidated.md in this directory (and learnings.md if present).
After applying it, if you encountered a pattern worth remembering, a mistake worth preventing, or a domain fact that surprised you, append one dated bullet to learnings.md via agents-skills-feedback-loop/scripts/append_learning.py. Do not modify SKILL.md itself.
1---2name: dev-contribution-quality-analysis3description: Analyzes commit and PR history to score contribution quality objectively. Use when building engineering scorecards, calibrating promotions, or measuring AI-assist impact.4---5
6# Developer Contribution Quality Analysis
7
8Objective, multi-dimensional analysis of code contribution quality from git data. Produces individual deep-dive reports and team calibration comparisons.
9
10## Modern Best Practices
11
12- Measure contribution quality through outcomes (churn, duplication, test coverage), not presence metrics
13- AI-assisted code is normal; score the output, not the authorship
14- GitClear Diff Delta and CodeScene Code Health are the established commit-level quality benchmarks
15- Stanford ghost engineering research claims commit content analysis predicts expert quality judgments (r=0.82); study is not peer-reviewed — apply with caution
16- Agent Trace (Cursor RFC) is an emerging vendor-neutral standard for AI attribution
17- DX Core 4 framework consolidates DORA/SPACE into a unified set of four oppositional dimensions
18- DORA 2025 itself reports AI adoption now correlates with *higher* throughput and a "mirror and multiplier" pattern (seven team archetypes replace prior elite/high/medium/low clusters); do not confuse it with vendor telemetry reports
19- Faros AI's 2026 "Acceleration Whiplash" telemetry report (4,000+ teams, distinct from DORA) found bugs per developer up 54% and incidents per PR up 242.7% where AI adoption outran test/review discipline — cite it as Faros, not DORA
20- GitClear Jan 2026 (2,172 developer-weeks): power AI users produced 4.2x more durable code than non-users but also showed 9x more churn — AI widened an existing performance gap and its downside, not evidence of uniform uplift
21- GitClear "The Maintainability Gap" 2026 (623M code changes) extends this: refactor/moved-code share collapsed to 3.8% YTD 2026 (13% in 2023), copy/paste 15.7% in H1 2026, error-masking constructs +47%, cross-file reuse -35% — use these as the current structural-quality benchmarks
22- Treat commits and PRs authored end-to-end by an autonomous coding agent (not just AI-assisted) as a distinct evidence class — see Known Traps
23
24## Quick Reference
25
26| Task | Tool / Reference | Command / Path | When |
27|------|-----------------|----------------|------|
28| Extract contribution profiles | `extract-contribution-profile.py` | `python scripts/extract-contribution-profile.py --config config.json` | First step after CSV extraction |
29| Sample code quality | `sample-code-quality.py` | `python scripts/sample-code-quality.py --config config.json` | When repo checkouts available |
30| Generate quality report | `generate-quality-report.py` | `python scripts/generate-quality-report.py --config config.json --mode person` | After profile extraction |
31| Understand scoring model | `scoring-model.md` | `references/scoring-model.md` | Before interpreting results |
32| Map findings to CC-* rules | `code-quality-sampling-rubric.md` | `references/code-quality-sampling-rubric.md` | During code sampling |
33| Calibrate against industry | `industry-benchmarks.md` | `references/industry-benchmarks.md` | When comparing to external norms |
34
35## When to Use This Skill
36
37- Engineering managers assessing individual contribution patterns
38- Tech leads reviewing code quality trends across a team
39- CTOs building engineering scorecards
40- Pre-promotion or performance-review technical calibration
41- Measuring AI-assisted development quality impact
42- Identifying skill gaps or coaching targets
43
44## When NOT to Use This Skill
45
46- Governed multi-signal risk triage -> the project-scoped counterpart skill
47- Defining code quality rules -> `software-clean-code-standard`
48- AI coding tool ROI or adoption tracking -> `dev-ai-coding-metrics`
49- Repository-level code health (not person-level) -> `qa-refactoring`
50- General code review workflow -> `software-code-review`
51
52## Defaults
53
54- Measure contribution quality, not presence or working hours
55- Quality is multi-dimensional; no single number replaces the 6-dimension profile
56- Compare against personal baseline first, then team, then industry
57- AI-assisted code is quality-neutral; measure outcomes (churn, duplication, test coverage) regardless of authorship
58- Git data is necessary but not sufficient; always note what evidence is missing
59- CC-* rules from `software-clean-code-standard` are the code quality rubric
60- Minimum data: 30 commits and 20 active days in the analysis window
61- Scripts consume the same CSV format as the project-scoped counterpart skill extraction
62- Ingest dedupes on `(repo, commit_hash)` and cancels `Revert "X"` + original pairs (both flagged `net_cancel`) so churn-rate and net_lines do not double-count multi-root scans or self-reverting churn
63- Code volume is measured as `code_loc` (extension-filtered: drops `.json`, `.yaml`, `.md`, snapshots, generated paths). Raw `net_loc` and `churn_loc` are kept for context but never feed the headline rating.
64- The D2 headline rating is complexity-weighted: `code_loc × (1 + α·ΔCC + β·novelty)`, banded against team median with role calibration. Definition is shared with the project-scoped counterpart skill; both skills must produce identical ratings from the same CSV input.
65
66## Workflow
67
681. **Define the question** — quality audit, growth tracking, team calibration, or promotion case
692. **Set scope** — person(s), time window, repo roots
703. **Extract git + MR data** — use the project-scoped counterpart skill extraction scripts or provide CSVs in the same format
714. **Run contribution profile analysis** — `extract-contribution-profile.py` computes all Tier 1 signals
725. **Run code quality sampling** (optional) — `sample-code-quality.py` maps sampled commits to CC-* rules
736. **Generate quality report** — `generate-quality-report.py` in `person` or `team` mode
747. **Present findings** with explicit limitations and calibration context
75
76## ASCII Flow
77
78```text
79contribution quality request
80 -> define decision: audit, growth, calibration, promotion, or AI impact
81 -> set people, time window, repos, and minimum data threshold
82 -> extract and normalize git plus MR/PR evidence
83 -> dedupe commits and cancel revert pairs
84 -> compute contribution profile and role-aware baselines
85 -> sample code quality against CC-* rules when repo checkouts exist
86 -> generate person, team, scorecard, or JSON output
87 -> present limitations and calibration context
88```
89
90## Fact-Checking
91
92- Known bugs, regressions, framework/compiler/runtime footguns, and version-specific crash or workaround guidance must be verified against current primary web sources before being treated as current fact.
93- Verify current external benchmark claims, vendor metrics, and framework standards against primary sources before presenting them as current fact.
94- Treat vendor-authored scoring systems, AI attribution standards, and industry benchmark comparisons as volatile unless rechecked against current documentation or published research.
95- If web verification is unavailable, label time-sensitive benchmark or standards guidance as unverified.
96
97## Decision Tree: Assessment Type
98
99```text
100What is the assessment goal?
101├── Individual quality audit?
102│ ├── Point-in-time snapshot → person quality report
103│ └── Trend over time → person trend report (multiple windows)
104├── Team quality comparison?
105│ ├── Promotion / review calibration → team calibration report
106│ └── Quality trend monitoring → team trend report
107└── AI impact assessment?
108 └── Before/after or AI-ratio analysis → quality-neutral outcome comparison
109```
110
111## Scoring Model (Summary)
112
113Six dimensions, 100 total points. See `references/scoring-model.md` for full detail.
114
115| # | Dimension | Weight | Primary Signals |
116|---|-----------|--------|-----------------|
117| D1 | Delivery Consistency | 20 | Commit frequency stability, active days, MR throughput, trend |
118| D2 | Code Quality Signals | 25 | Churn rate (14d), duplication, refactoring ratio, complexity-weighted rating (code-only LOC × ΔCC + novelty), CC-* compliance |
119| D3 | Commit Craft | 15 | Message quality, scope discipline, PR size, self-merge rate |
120| D4 | Review & Collaboration | 20 | Review participation, responsiveness, cross-repo contribution |
121| D5 | Test & Safety Practices | 10 | Test-to-code ratio, test presence in features, security-file awareness |
122| D6 | D6 Context-Only Signal — AI Development Quality | — | Annotation only: AI code survival, quality parity, verification burden |
123
124**Quality Tiers (D1-D5, 90 pts total)**: A (72-90 Exemplary), B (54-71 Solid), C (36-53 Developing), D (0-35 Concerning)
125
126D6 carries no point allocation and is excluded from tier assignment. It is appended to reports as a separate annotation. See `references/scoring-model.md` for rationale.
127
128## Output Modes
129
130- **Person quality report** — individual deep-dive with 6-dimension breakdown, sampled commit quality, CC-* findings
131- **Team calibration report** — comparison matrix with heatmap, tier distribution, team strengths/gaps
132- **Quality scorecard** — one-page quick reference for presentations
133- **Machine-readable JSON** — contribution-profiles.json for dashboards and downstream tools
134
135## Known Traps
136
137- Treating commit frequency or online presence as contribution quality when the actual question is code-health and delivery outcomes.
138- Comparing developers across very different repo types, support load, or code ownership without first calibrating those constraints.
139- Interpreting AI-heavy contribution patterns as automatically higher or lower quality without reviewing churn, survival, and verification burden.
140- Building a score from sparse data windows that do not meet the minimum threshold for stable signal extraction.
141- Sampling code quality from convenience commits instead of representative work, which biases the conclusions toward visible or recent changes.
142- Scoring a PR that was generated end-to-end by an autonomous coding agent (Devin, Codex cloud tasks, Claude Code background/delegated sessions) as if it reflects the human's craft. When a repo's provenance data shows fully agent-authored diffs merged under a human identity, D3 (Commit Craft) and D2 code-surface signals measure the agent's output and the human's review/orchestration judgment, not their hand-written code quality — say so explicitly in the report and do not fold it into an unqualified craft score.
143- Letting a rising headline number go unquestioned when the underlying behavior could be gamed: churn can be suppressed by avoiding risky files instead of writing more durable code; PR-size discipline can be gamed by artificially splitting one change into many trivial PRs; test-to-code ratio can be inflated with low-value snapshot or no-op tests. Cross-check any single improving metric against at least one adjacent signal before crediting it.
144
145## Common Anti-Patterns
146
147- Turning a multi-dimensional quality model into a hidden ranking engine and pretending the composite number is objective truth.
148- Using the analysis for attendance policing or concurrent-employment inference when the skill is supposed to measure contribution quality.
149- Treating one period’s score as a permanent trait rather than a snapshot with scope, context, and missing evidence.
150- Comparing people on absolute numbers without anchoring against their own baseline and the team’s expected role shape.
151- Letting the report imply causality or promotion readiness when the evidence only supports calibration and coaching discussion.
152- Letting duplicate `(repo, commit_hash)` rows or `Revert "X"` pairs inflate churn and net_lines; the ingest layer must dedupe and cancel revert pairs before D2 scoring.
153
154## Integration
155
156### Data Pipeline (supplier: the project-scoped counterpart skill)
157
158This skill consumes the same CSV format produced by:
159- `extract-commits.sh` → `raw-commits.csv`
160- `extract-mr-acceptances.sh` → `mr-acceptances.csv`
161
162It also reuses the `identity-aliases.json` format and `email_to_person` config pattern. It does NOT duplicate extraction scripts or authenticity triage.
163
164### Code Quality Rubric (consumer: software-clean-code-standard)
165
166Sampled commit findings reference CC-* rule IDs (CC-NAM-01 through CC-DOC-04) and use the same P0-P3 priority system. No rule definitions are duplicated.
167
168## Navigation
169
170### Resources
171- [Scoring Model](references/scoring-model.md) — 6-dimension point model (D1-D5 scored, D6 annotation only); weights, thresholds, tier override rules
172- [Contribution Signals Catalog](references/contribution-signals-catalog.md) — all signals grouped by extraction tier (git-only, static analysis, AI attribution) with confounders
173- [Code Quality Sampling Rubric](references/code-quality-sampling-rubric.md) — P0-P3 CC-* rule mapping for sampled commits; automated check confidence levels
174- [AI Attribution Patterns](references/ai-attribution-patterns.md) — ground-truth tooling, detection heuristics, quality metrics for AI-assisted code (all context-only)
175- [MR/PR Quality Signals](references/mr-pr-quality-signals.md) — rubber-stamp detection, size/review-speed/rework benchmarks and thresholds
176- [Industry Benchmarks](references/industry-benchmarks.md) — GitClear (2020-2024 baseline, 2026 cohort), DORA 2024/2025, METR, Stanford calibration data
177
178### Templates
179- [Person Quality Report](assets/person-quality-report-template.md)
180- [Team Calibration Report](assets/team-calibration-template.md)
181- [Quality Scorecard](assets/quality-scorecard-template.md)
182
183### Scripts
184- [Pipeline README](scripts/README.md) — setup, CSV format spec, usage
185- [Config Example](scripts/config-example.json)
186- [Extract Contribution Profile](scripts/extract-contribution-profile.py)
187- [Sample Code Quality](scripts/sample-code-quality.py)
188- [Generate Quality Report](scripts/generate-quality-report.py)
189
190### Related Skills
191- the project-scoped counterpart skill — authenticity triage and governed risk signal convergence (upstream)
192- `software-clean-code-standard` — CC-* rule definitions and code review standards (rubric source)
193- `dev-ai-coding-metrics` — AI tool adoption and ROI measurement (complementary)
194- `software-code-review` — review workflow and judgment (process)
195
196## Learnings Loop
197
198Before applying this skill on a non-trivial task, read `learnings.consolidated.md` in this directory (and `learnings.md` if present).
199
200After applying it, if you encountered a pattern worth remembering, a mistake worth preventing, or a domain fact that surprised you, append one dated bullet to `learnings.md` via `agents-skills-feedback-loop/scripts/append_learning.py`. Do not modify `SKILL.md` itself.