Skip to content

Latest commit

 

History

History
175 lines (153 loc) · 60.3 KB

METRICS.md

File metadata and controls

175 lines (153 loc) · 60.3 KB

Fair Code - Metrics Tracker

Stars Contributors Forks Watching Explainers Countries Updated

Weekly snapshot of project health. Updated every Friday.

How to Update · Weekly Metrics · Targets · Notes


How to Update

  1. Check GitHub for stars, forks, watchers, and contributor count
  2. Check Instagram and LinkedIn for combined impressions/followers
  3. Check site analytics for the count of unique countries visiting thefaircode.xyz
  4. Count issues closed this week
  5. Count code audits published this week
  6. Add a new row to the table below

Weekly Metrics

Week Stars Forks Watching Contributors Social Views Countries Issues Closed Code Audits
2026-W26 (baseline) 27 8 - 7 ~10K total - - 6 total
2026-W27 27 8 - 7 ~10K total - - 6 total
2026-W30 40 17 8 11 ~21K total - 3 7 total
2026-W31 41 18 8 12 ~23K total - 22 7 total
2026-W32 42 22 8 14 26K+ total 17 11 7 total
2026-W33 43 21 8 15 27K+ total 17 55 7 total
2026-W34 43 22 8 17 30K+ total 18 35 7 total
2026-W35 47 25 8 21 30K+ total 18 33 7 total
2026-W36 46 31 8 27 30K+ total 20 68 7 total
2026-W37 46 33 8 29 30K+ total 20 29 7 total
2026-W39 48 45 8 40 30K+ total 20 25 7 total
2026-W40 49 50 8 45 30K+ total 20 41 7 total
2026-W41 49 55 8 50 30K+ total 20 72 7 total
2026-W42 51 58 8 53 30K+ total 20 123 7 total
2026-W43 53 64 8 55 30K+ total 20 76 7 total
2026-W44 55 68 8 58 30K+ total 20 50 7 total

| 2026-W45 | 71 | 74 | 8 | 61 | 30K+ total | 20 | 44 | 7 total |

2026-W27 - v1.2.0 shipped: Open Dataset Profiler (CLI + client-side web tool) released; 23 explainers total.

2026-W30 - v1.3.0-v1.3.2 shipped since last snapshot: Tenant Screening audit (#07) and intersectional bias analysis (v1.3.0), Unsupervised Learning + Model Drift explainers (v1.3.1), Selection Bias explainer (v1.3.2), plus author attribution/schema, llms.txt, and a canonical-URL/sitemap fix for AI-crawler and Google Search Console indexing. Watching tracked for the first time this week. Gap notice: no snapshot was logged for three weeks (W28-W29) - issues-closed reflects the trailing 7 days, not the full gap.

2026-W31 - tooling + healthcare push under the freeze: profiler confidence intervals (#83), shareable HTML/PDF report (#85), a --fail-under CI gate (#115) and --min-group-size small-subgroup warnings (#124), an automated em-dash CI lint (#112), and the "Why Accuracy Is Not Enough in Healthcare AI" explainer (#64). New contributors @tomatotomata and @ahmdkaml. Note on issues-closed (22): inflated by a one-time triage - 11 new-audit proposals were closed as post-paper (a timing hold aligning the tracker with the paper freeze, not rejected work), the rest are the tooling/explainer issues shipped above.

2026-W32 - GEO/SEO push, JSON/Parquet input, compare HTML reports, and a theme-toggle fix: JSON-LD/FAQPage/Dataset schema, OpenGraph social-preview images, and an expanded robots.txt for AI crawlers across the site; faircode profile/compare gained .json and .parquet input (#127) and faircode compare --html plus a matching web-UI download button (#111, #128); .github/CODEOWNERS (#142, closes #138) and a theme toggle that now respects prefers-color-scheme (#143, closes #135). New contributor @anujkamdar. Note on issues-closed (11): the tooling issues shipped above, not a triage batch like W31's.

2026-W32 (later in week) - JS parity, client-side Excel, and a CI/security hardening batch: JSON edge-case coverage and clearer parse errors (#175), client-side .xlsx support for the web profiler with a Subresource Integrity hash on its CDN script (#158), a results/-vs-paper/results-frozen/ drift check (#173), a merge-base fix for the frozen-files check (#163), CodeQL extended to JavaScript (#162), a scripted favicon pipeline (#164), consolidated JS CLI-bridge scripts (#170), an audit-manifest row_filters validation test (#168), a GitHub Actions version-bump audit process (#167), removal of ~35K lines of dead vendored CI code, and CodeQL/Dependabot process docs (#161, #165). Countries tracked for the first time this week (16, unique countries visiting thefaircode.xyz per site analytics - distinct from the Instagram/LinkedIn-based social views figure).

2026-W32 (traction refresh) - forks and countries caught up to live data: forks 19 → 22 (GitHub's API, was stale since the last snapshot), countries reached 16 → 17. Contributors badge/targets/resume line also corrected to 14 - the weekly table row already had it, the rest of the doc hadn't caught up.

2026-W33 - three healthcare explainers close out the roadmap's "planned" list down to three: Miscalibration in Clinical Risk Scores Across Groups (#106), Missing Data as Bias in Electronic Health Records (#107, with a real 10.7-point payer-code missingness gap by race computed straight from the Healthcare Readmission CSV), and Why Medical Imaging Models Fail on Underrepresented Groups (#108) - explainer count 36 → 39. Stars, forks, watching, and contributors are unchanged from last week's live GitHub numbers. Note on issues-closed (55): not a triage batch like W31's - 36 PRs merged this week across CI hardening (CodeQL v4, CITATION.cff validation, workflow YAML validation, CODEOWNERS access checks), profiler tooling (XLSX/JSON edge cases, HTML report tests), and the three explainers above, several closing more than one linked issue.

2026-W33 (later in week) - a supply-chain/CI hardening + accessibility batch: two real, previously-unnoticed drifts caught and fixed - matplotlib/numpy missing from pyproject.toml despite being imported unconditionally (#235, closes the same class of gap Pillow once had), and scikit-learn locked at 1.8.0 while pyproject.toml required >=1.9.0 after the test that caught it was deleted rather than fixed (#255, restored by @ahmdkaml). check-frozen-files/Build Explainers now also run on direct pushes to main, not just PRs (#246, @ahmdkaml). audits.yml's profiler/benchmark-harness jobs are now change-aware, skipping on docs-only pushes the same way the pre-push hook already did (#237); run-audits itself is left unconditional since it's the one required status check (#160). A new scripts/check_broken_links.py (#253) caught five real broken links in explainer markdown (a misspelled dataset-folder name, a missing ../) plus a second bug in build_explainers.py's own link resolver that had silently broken every such link in the generated .html too. The theme-toggle button now exposes its state via aria-pressed (#250), faircode/report.py's HTML report tables get proper <th scope="col">/<caption> markup (#254, @propcgamer20-png), and ruff check lands as the repo's first general-purpose Python linter (#248, @evanjain-dot). Stars 42 → 43; forks, watching, and contributors unchanged. Issues-closed for the week isn't re-tallied here since several of these closed same-day as this note.

2026-W33 (weekend update) - five more explainers, non-gating coverage reporting, and a new contributor: five healthcare-adjacent explainers landed in one PR (@Shreyash0712, #262) - What Is the Base Rate Fallacy?, The Obermeyer Case, Race Correction in Clinical Algorithms, What Is Reject Inference?, and Underdiagnosis Bias in Healthcare AI - closing out Phase 2's planned-healthcare-explainer backlog entirely; explainer count 39 → 44. make coverage (pytest-cov, informational only, no CI gate) landed via three coordinated PRs (#263/#264 by @ahmdkaml, #265/#266 by new contributor Circout-sudo), but the profiler CI job's install step was never updated to include pytest-cov, so the new "Report test coverage" step failed on every run since - masked as an overall job success by continue-on-error: true. Fixed directly by adding pytest-cov to the install line; verified in a clean venv that it now reports real coverage numbers instead of erroring. Also fixed a stale Build Explainers CI failure from #262 skipping make build-explainers before opening the PR. Contributors 14 → 15 (Circout-sudo's first merged PR): GitHub's contributors API hadn't caught up at check time (same lag pattern as the W32 forks correction) - counted from CONTRIBUTORS.md's manually-verified list instead, which is the more current source. Forks 22 → 21 (a real decrease, per GitHub's live API - not a data error). Stars 43 unchanged.

2026-W34 - traction refresh: combined Instagram/LinkedIn impressions crossed 27K+ → 30K+. Countries reached steady at 17. Stars, forks, watching, and contributors unchanged from last week's live numbers - this week's earlier merged work (#276-#279: a citation-links explainer pass, CLI error-handling test coverage plus a real --html traceback fix, favicon-parsing test coverage, and a docstring fix) was fixes and test coverage, not new explainers or audits.

2026-W34 (later in week) - two stale explainer issues closed, two real gaps filled: cross-checking every open "Explainer:" issue against explainers/ found four that were already done and never closed (#93, #94, #98, #99, plus #103 and #104 found in a second pass) - all closed with a pointer to the PR that already resolved them. Two were genuine gaps: What Is Equal Opportunity? (closes #80) and What Is Intersectional Bias? (closes #67) - both anchored to real frozen benchmark numbers (equal_opportunity_diff/equalized_odds_diff for COMPAS and Tenant Screening; a superadditive intersectional_demographic_parity_diff for Benefits Denial) rather than invented ones. Explainer count 45 → 47.

2026-W34 (traction refresh) - forks, contributors, and countries caught up to live data: forks 21 → 22 and countries 17 → 18 per live site analytics; contributors 15 → 17 - one from @nivedmahendran's first merged PR (#287), the other from GitHub's contributors API finally catching up on @TanishGoyal-Dev, whose own first PR it had been missing since the W32 lag note. Counted from CONTRIBUTORS.md's manually-verified list rather than the raw API count (16), which still lags by that one contributor - the same reasoning as the W32/W33 corrections. Stars and watching unchanged at 43 and 8.

2026-W35 - two report-rendering parity bugs fixed, two contributor-submitted one-liners: @AnayDhawan fixed to_html()/the web profiler's downloadable report missing their imbalance/missing/skew meta line and reference-baseline section (#294, closing #283 and #272), with @Shreyash0712 following up on the web profiler side (#295). New contributor @VedantMadane dropped --min-group-size's hardcoded CLI default (#312, closing #299), and @propcgamer20-png added the missing proxy extra to audits.yml's profiler job, which had left tests/test_proxy.py silently skipped in CI (#311, closing #298). @ahmdkaml's #288 added the cli.py benchmark subcommand test coverage issue #270 asked for, but never referenced the issue number - found and closed manually with a credit comment. Stars 43 → 47, forks 22 → 23 (live GitHub numbers); contributors 17 → 18 (VedantMadane's first merged PR - counted from CONTRIBUTORS.md, the raw API still lags on @TanishGoyal-Dev). Countries and social reach unchanged. Explainers and audits unchanged - this week's merged work was fixes and test coverage, not new content.

2026-W35 (later in week) - all 12 open non-explainer issues closed: #247 (--proxy-hints on compare), #251 (stdin support), #284 (web profiler advanced-thresholds panel), #302 and #271 (test coverage for compare_to_html and benchmark.py's intersectional/run_benchmark() paths), #303-#306 (four web profiler bugs: keyboard focus, JSON-without-extension detection, compare-view scroll-jacking, same-dimension crossing), #301 (--map unknown-column error), #286 (build-explainers.yml trigger gap), and #309 (a ROADMAP/README contradiction) - each committed and pushed individually, verified with tests/manual CLI runs before every commit. Also credited @propcgamer20-png's bundled #314 (closing #300, #307, #308, #310, merged the same day). No numeric changes this note - same live GitHub snapshot as the entry above, just a lot more closed issues.

2026-W35 (weekend update) - a 12-issue re-seed, then the first one closed: with the backlog cleared, 12 fresh non-explainer issues were opened (#315-#326) covering real, independently-reproduced gaps - a Python/JS parity break in age-band labeling on date columns (#315), literal NUL bytes in profiler-engine.js that hide the file from plain grep (#316), a silently-misparsed split-orient JSON shape (#317), a spurious 100%-drift false positive when a column auto-detects to different kinds across two datasets (#318), a parse_reference()/JS parity break on percent-formatted shares (#319), plus several smaller CLI/report/tooling gaps (#320-#326). Separately, a contributor conversation about wanting to verify a profiler result after the fact - "was this actually produced from this dataset, these thresholds, this version of the tool" - turned into three more issues (#327-#329) once the code confirmed the gap was real: to_json() echoed none of that. New contributor @mahirhir closed the first one same-day: faircode/provenance.py (#330) attaches a provenance block - dataset SHA-256, faircode version, resolved params - to --json exports, at the export boundary so the JS-parity test needs no change. Contributors 18 → 19 (mahirhir's first merged PR, counted from CONTRIBUTORS.md - the raw API still lags). Forks 23 → 24 (live GitHub numbers). Stars, watching, countries, and social reach unchanged.

2026-W35 (later still) - the MCP server ships, faircode goes live on PyPI, and a second same-week new contributor: Phase 1 of the MCP plan discussed for #327-#329 landed - faircode/mcp_server.py exposes profile_dataset, compare_datasets, and proxy_hints as MCP tools over stdio, a thin adapter over the existing profile()/compare()/proxy_hints() functions with no new analysis logic and the same local-only trust boundary as the CLI. faircode was then published to PyPI for the first time (pip install faircode / faircode[mcp] now work without cloning the repo). New contributor @Ayaan-20-11 fixed scripts/render_terminal_png.py's hardcoded macOS-only font path (#331, closing #323) - it now uses the repo-bundled assets/fonts/IBMPlexMono-Regular.ttf, the same font generate_og_images.py already uses. Contributors 19 → 20 (Ayaan's first merged PR). Forks 24 → 25 (live GitHub numbers). Stars, watching, countries, and social reach unchanged.

2026-W35 (yet later) - a third same-week new contributor: @StudentSuite3 added the guard the web profiler already had (#306) but the CLI didn't - faircode profile --cross COLA,COLA (the same column crossed with itself) silently produced flags claiming an absent subgroup that was really just the tautological zero of a same-column crosstab. Now errors with a clear message (#337, closing #320). Contributors 20 → 21 (StudentSuite3's first merged PR). Stars, forks, watching, countries, and social reach unchanged from the entry above.

2026-W36 - new week, traction refresh: Stars 47 → 48, forks 25 → 26 (live GitHub numbers). Countries reached 18 → 20, per site analytics. Contributors, watching, social reach, explainers, and audits unchanged from last week's snapshot. Issues-closed resets to 0 for the new week - nothing has closed yet since the #320 close that closed out W35's count.

2026-W36 (later) - web profiler provenance parity, a stale-hash bug caught in review, and a CODEOWNERS gap closed: new contributor @lovishmenaria14-gif added a provenance block to the web profiler's "Copy as JSON" export (#339, closing #329), mirroring #330's Python-side shape via client-side crypto.subtle.digest. Review caught a real bug before crediting it as complete: the exported dataset_hash went stale after loading the sample dataset following a real upload, since the cached File object was never updated off that path - fixed directly (not part of the PR) by threading the file through as an explicit parameter instead of a side effect. Same contributor also fixed README.md's stale explainer.html comment (#340, closing #326) - a docs-only PR that triggered no CODEOWNERS review-request ping, since no top-level doc (README.md, CHANGELOG.md, CONTRIBUTORS.md, METRICS.md, ROADMAP.md) had an owner. Added @yakew7/@Shreyash0712 to all five, verified both already hold write access via the CODEOWNERS Access workflow. Contributors 21 → 22 (lovishmenaria14-gif's first merged PR). Issues closed this week: 0 → 2 (#329, #326). Stars, forks, watching, countries, and social reach unchanged from the entry above.

2026-W36 (weekend) - the full open backlog cleared, 6 explainers added, and a fresh 15-issue batch opened: all 10 remaining open non-explainer issues (#315-#319, #321-#322, #324-#325, #328) closed with individually verified, individually committed fixes - an age/date-labeling bug and a compare() drift false-positive in the profiler, three CLI validation/UX gaps, an HTML report styling gap, a markdown table-parsing regex fix (plus a same-class fix in model-drift.html, caught by CI's own generated-files check), a redirect-shim fix, and the proxy_hints() held-out-column capability (--proxy-hints-with). Also closed all 6 long-open explainer-request issues (#81, #280, #281, #282, #296, #297) by writing and shipping the actual explainers - accuracy equality, bootstrap confidence intervals, mitigation strategies, fairness through unawareness, LIME, and counterfactual explanation - each anchored to real frozen numbers from paper/results-frozen/. Explainer count 47 → 53. New contributor @sushicat75 fixed a bug found during that same batch's research - three already-published explainers stuck showing "coming soon" on the homepage roadmap grid (#341, via #356). With the backlog fully cleared, opened 15 fresh issues (#341-#355) with a deliberate difficulty spread (2 very easy, 4 easy including 3 new explainer topics, 6 normal, 3 docs-area issues tagging the two doc code owners directly) - three of those docs-area issues (#353-#355) were closed not-planned by the maintainers same-day. Contributors 22 → 23 (sushicat75's first merged PR). Forks 26 → 27 (live GitHub numbers). Issues closed this week: 2 → 22. Stars, watching, countries, and social reach unchanged.

2026-W36 (later still) - three more first-time contributors, and a review-caught correctness bug fixed in a PR already merged: @oxura fixed the MCP get_benchmark_results tool's missing-mirror error message, which blamed paper/results-frozen/ and suggested an unnecessary, citation-affecting re-freeze when the actual missing file was the package-internal faircode/_results_frozen/ mirror (#408, closing #396). @Zinniacodes01 fixed README.md's faircode/ repo-tree, which had never been updated to list mcp_server.py, _explainers/, or _results_frozen/ since they were added (#411, closing #409). @shauryagangrade closed a real silent-wrong-answer gap in strategy_features(), which fell through to a bare else for any unrecognized strategy name instead of erroring (#425, closing #418). @AnayDhawan excluded the generated faircode/_explainers/ mirror from check_em_dash.py's scan, which had been double-reporting the same em dash under two paths (#412, closing #393). Separately, @nitishchauhan002's first merged PR (#410, closing #405) set out to fix loaders_extra.py silently mis-parsing index-oriented JSON as columns-oriented - but review after merge found the submitted heuristic still silently transposed data in shapes its own tests didn't cover (a wide columns-oriented export, and a square all-string export). Fixed directly, not as part of the PR: replaced the heuristic entirely with a hard failure - any ambiguous dict-of-dicts JSON now raises a clear error pointing at orient="split" instead of guessing; README's JSON-orientation docs and tests/test_loaders.py's prior columns-orientation round-trip assertion updated to match. Contributors 23 → 27 (oxura, Zinniacodes01, shauryagangrade, and nitishchauhan002's first merged PRs). Stars 48 → 46 (a real decrease, live GitHub API - not a data error, same pattern as the W33 forks correction). Forks 27 → 31 (live GitHub numbers). Issues closed this week: 22 → 68. Watching, explainers, and audits unchanged. Countries and social reach not re-checked this note (no fresh analytics/social pull).

2026-W37 - be-student's 9-PR backlog sweep, two new contributors, and a botched merge caught in review: @be-student closed a full backlog of issues in one day (#448-#456): a raw train_test_split crash on a singleton target class, a zero-detected-dimensions profile fabricating a 0/"F" score instead of reporting it as unmeasured, terminal screenshots silently clipping past 92 characters, the CLI trusting .csv/.tsv extensions blindly where the web engine already sniffed the delimiter, the JS engine's CSV parser stripping quote characters mid-field and its delimiter sniffer breaking on a quoted newline, to_html's missing group-truncation notice, and two age-handling gaps (fabricated negative-age and post-50-row date sentinels) - though the merge landing the last two together spliced their test bodies together wrong, silently zeroing one fix's own parity coverage; caught in review and fixed directly, not part of the PR. @Shreyash0712 then scoped codeowners-access.yml to this repo specifically, so the scheduled/push-triggered CODEOWNERS check stops running (and failing) under a fork's own context (#475). New contributor @AchieverSana fixed render_terminal_png.py leaking a raw FileNotFoundError traceback for a missing input file (#476, closing #460) - broadened directly to except OSError after finding a directory path still leaked one via the sibling IsADirectoryError. Contributors 27 → 29 (be-student and AchieverSana's first merged PRs).

2026-W37 (later) - 14 more non-explainer issues closed, 3 explainers added, and the doc-drift the merges left behind fixed: @propcgamer20-png closed three: make setup never installing the benchmark extra, silently skipping a large chunk of the test suite for anyone following CONTRIBUTING.md's documented setup step (#480, closing #473); then two fully-verified explainers anchored to a real run of this repo's own benchmark harness rather than invented numbers - Treatment Equality (#481, closing #344) and The Fairness-Accuracy Trade-off (#482, closing #345). Separately, 13 more non-explainer issues closed directly, each individually verified and committed: a case-insensitive link-validation gap, a downscaled favicon frame, a double-escaped & in link URLs (both the server-side generator and the client-side renderer), compare() blind to a column collapsing to mostly-missing, a psi/drift_level rounding-boundary contradiction, a silently-dropped duplicate held-out proxy column, a mapping override that could trap a web-profiler user behind a hidden results panel, a nested-button accessibility violation, a missing aria-live region, a SPEC.md/code doc mismatch for the MCP list_explainers tool, dead min_share/min_group_size parameters on MCP proxy_hints, and --fail-on-drift false-positiving on a skipped/unmeasurable comparison (#457, #458, #459, #461, #462, #463, #466, #467, #468, #469, #471, #472, #474). Plus the Multiple-Comparisons Correction explainer (#346), applying Bonferroni/Holm/Benjamini-Hochberg FDR to a real 90-p-value COMPAS slice, cross-verified against statsmodels. Explainer count 53 → 56. Both new PRs' explainer additions initially left README's Explainers table/file-tree and CONTRIBUTING.md's reference table without their own rows - fixed directly, along with a 6th, previously-untracked stale "N short, plain-language write-ups" mention now wired into check_explainer_count.py's tracked list. Forks 31 → 33 (live GitHub numbers). Issues closed this week: 0 → 29. Stars, watching, countries, and social reach unchanged.

2026-W39 - two full audit-and-replenish sweeps (25 issues closed), the post-paper audit backlog reopened, and the AI Fair Recruitment gender-bucketing fix: Two independently-verified sweeps closed 14 then 11 non-explainer issues (#695-#709, #718-#728), each fixed and committed on its own - doc/number drift across README.md, METRICS.md, ROADMAP.md, CONTRIBUTORS.md, CHANGELOG.md, several explainers, and .github/; a profiler MIME-vs-extension dispatch bug; a flaky concurrent-pytest collision; a stale paper/results-frozen/ version mismatch; and a full results/ regeneration once drift turned out to reach beyond COMPAS. The larger fix in the second sweep: AI Fair Recruitment/unfair.py/fair.py were silently folding the dataset's third Gender category (Other) into the "Female" bucket via a get_dummies column-name substring match - fixing it to compare the real Male/Female columns directly (matching audit.yaml's own declared groups) moved the audit's headline gap from 4.51% to 4.03% and its bias-reduction figure from 97.3% to 96.1%, cascading into README.md, index.html, AI Fair Recruitment/README.md, notebooks/02_hiring_bias_audit.ipynb, and 7 explainers that cited the old figures as fact. render_markdown() (both the Python build script and its JS mirror) also gained ordered-list support, fixing 9 explainer pages where a numbered list had been silently flattened or fragmented. With the backlog cleared each time, fresh issues were opened to replenish it (11, then 6, each independently researched and verified rather than invented). With the paper freeze confirmed lifted, the 9 audit proposals closed during the freeze as a "timing hold, not a rejection" (#3, #10, #21, #22, #23, #69, #77, #78, #79) were briefly reopened, then closed again same-day on maintainer direction: new audit domains aren't being tracked as repo-requested work right now, in favor of deepening the tools that already exist. Replaced with 9 feature-request issues grounded in real code/doc gaps instead (CLI/web-profiler asymmetries - --proxy-hints-with missing from compare, no chi-squared proxy detection in the web engine, no CSV export, no expand control past 12 displayed groups, no CLI sample dataset, no shareable compare demo link, two SPEC.md-documented tunables with no flag - plus the interactive benchmark-results dashboard ROADMAP.md's own Phase 5 has left unchecked, and a missing skip-link/<main> landmark on index.html), alongside 2 new explainer proposals (Algorithmic Recourse, Fairness in Ranking) - 19 open issues total, back above the 10-15 target range this file's own W37 note first flagged as unmet. Contributors 29 → 40 - not a one-week jump: the weekly-tracked "29" had already fallen behind CONTRIBUTORS.md's own full list, which a direct recount (3 core + 37 in the Contributors section) puts at 40. Two real gaps found in that recount: SatvikMishra08 (#693, syncing CITATION.cff's date-released with the v2.2.0 tag) was a real merged-PR contributor missing from the file entirely, and saikeerthanakavuri's first merged PR (#710, fixing the profiler-ui.js CI-filter gap the first sweep's own replenishment issues had surfaced) was never added either. @AnayDhawan also picked up a 5th merged PR (#711, README demo GIF) the first sweep's CONTRIBUTORS.md audit caught as missing but didn't update the PR/commit count for. Corrected to the verified count (40) rather than the incrementally-tracked one, which is the more reliable source per this file's own established practice when the two disagree (see the W32-W35 notes above). Forks 33 → 45, Stars 46 → 48 (live GitHub numbers, not independently re-verified against social/analytics this note). Issues closed this week: 0 → 25.

2026-W40 - benchmark dashboard, web/CLI export parity, and five new contributors (41 issues closed): the Phase 5 benchmark-results dashboard shipped (benchmark.html, #744) and then grew filtered CSV export, a performance chart, URL deep links, aria-live/aria-sort accessibility, signed-metric bars, a visible small-sample badge and notes column, and a Clear control (#761-#764, #775-#777, #784, #787, #788); faircode profile/compare --csv (#739, with --csv - for stdout, #779) gained reference-deviation and proxy-hint sections and spreadsheet-formula-injection protection (#780, #760, #791); proxy-hint detection reached the web profiler for both single and compare views, including a held-out-column test and a tunable significance level on the CLI, MCP and web (#738, #757, #781, #786, #782); across three non-explainer sweeps of 11, 10 and 15 issues. Five first-time contributors had PRs merged (@thadidaniel-ctrl, @Tiyatrotist, @readyagentsdev, @Abitha1861, @Yipjunwei). Stars 48 -> 49 and forks 45 -> 50 per GitHub's repo API; contributors recounted at 45 - everyone with a merged PR other than Yash (44 GitHub accounts plus the deleted TanishGoyal-Dev). GitHub's contributors page shows a larger number (50) because it also counts the maintainer, dependabot, vercel, and the Claude and Copilot co-author trailers; the REST contributors API shows only 41 linked accounts because it omits unlinked commit emails and the deleted account; issues closed = everything closed since 2026-09-28; countries and social reach not re-measured this week, carried over.

2026-W41 - the whole CSV/proxy-hint export surface closed out (14 issues closed, one new contributor): a 15-issue sweep of follow-ups to the previous week's work. The proxy check gained an opt-in Bonferroni/Holm multiple-comparison correction (--proxy-correction, MCP correction, web dropdown, #806) and now accepts any number of held-out files per dataset - including .xlsx and in the compare view - through one shared control (#801-#803); --proxy-alpha without --proxy-hints became an error (#804). CSV exports gained an opt-in provenance section (--csv-provenance, a web checkbox, #800), the web CSV gained the reference-baseline section the Python writer already had (#805), the MCP tools can return the CSV (format="csv", #807), and SPEC.md section 12 plus the README now document the layout and flags (#797, #798). The benchmark dashboard gained a roll-up summary tab for results/summary.csv, the committed per-audit figures, and SVG/PNG chart download (#794-#796). @DevKhizerer joined with PR #809 (screen-reader announcements for proxy-hint results). Forks 50 -> 51; contributors 45 -> 46; issues closed = everything closed since 2026-10-05; stars, watching, countries and social reach unchanged or not re-measured.

2026-W41 (later) - the 12 remaining non-explainer issues closed, 12 fresh ones opened, and three more contributors credited: every unassigned non-explainer issue was fixed and committed on its own (#810, #811, #813, #816, #819, #821, #822, #840, #842, #843, #845, #847): proxy hints now flag small expected cells, record how many pairs were tested and which held-out files (and join key) produced them; --encoding/BOM sniffing and a terminal that escapes control characters harden input and output; ages above --max-age are flagged instead of banded into 75+; Spanish/German/French/Portuguese column names are detected; compare --csv lists one-sided dimensions; and the benchmark dashboard gained a summary-tab significance filter and theme-aware chart export. #848 stayed untouched because it is assigned. A follow-up fix made --encoding apply to .json files too, after a repro showed the first version blamed the wrong codec. The backlog was then replenished with 12 independently reproduced issues (#855-#866, none of them explainers), three pinned: the estado_civil mis-detection (#855), a user-extensible detection vocabulary (#856) and birth-year age conversion (#862). Credited in CONTRIBUTORS.md this note: @Aditya3021 (#849), @happymode-25 (#850) and @minutechreview (#851, #852), plus @Tiyatrotist's run of twelve merged PRs, which the file had recorded as one. Contributors 46 -> 49, forks 51 -> 53 (live GitHub numbers); issues closed this week 14 -> 42 (everything closed since 2026-10-05, a GitHub search count that includes the 12 above). Stars, watching, countries and social reach unchanged or not re-measured.

2026-W41 (weekend) - the second sweep: 9 more non-explainer issues closed, 14 fresh ones opened, one new contributor: every unassigned non-explainer issue was fixed again (#856, #857, #859, #861, #862, #864, #865, #866, #868): --keywords and Italian/Dutch terms for column detection, a web text-encoding picker recorded in provenance, composite and normalised held-out join keys, --proxy-exact (Fisher/permutation p-values with a shared seeded PRNG so both engines agree), --age-reference-year for birth-year columns, compare data-quality flags and rename suggestions, and a per-tab significance toggle plus hatched, colour-blind-safe dashboard bars. #848 stayed untouched because it is assigned. Contributors fixed seven of the follow-ups opened the day before - @Detoy (#855 via #876, #867 via #877, #869 via #878, #870 via #871) and @Tiyatrotist (#858, #860, #863 via #882, #880, #881) - so the replenishment is 14 new issues (#883-#896): MCP, key-normalisation, exact-test and web follow-ups, a dashboard key and a slow-test marker, none of them explainers, three pinned (#883, #884, #885). Contributors 49 -> 50 (Detoy's first merged PR, counted from CONTRIBUTORS.md), forks 53 -> 55; issues closed this week 42 -> 58 (a GitHub search count since 2026-10-05). Stars, watching, countries and social reach unchanged or not re-measured.

2026-W41 (Sunday) - the third sweep: the last 14 non-explainer issues closed, 19 fresh ones opened, no new contributors: every unassigned non-explainer issue (#883-#896) was fixed and committed on its own, with a parity test wherever both engines are touched: the MCP proxy_hints tool now shares profile_dataset's age and keyword options (#883), key normalisation composes Unicode and folds case (#884), capped small-cell tables are labelled chi2-capped (#885) and permutation p-values run about ten times faster for the same numbers (#886), rename suggestions understand recoded labels (#887) and land in the compare CSV (#896), the web keywords box persists and explains its errors (#888, #889), the reference file follows the encoding picker (#890), held-out encodings are recorded in provenance (#891) and PATH=COLUMN:KEY~ normalises a single spec's key (#892), the dashboard link carries the Export colours choice (#893) and the hatched bars have a key (#894), and the benchmark tests are marked slow so make test-fast takes about 45 seconds instead of two minutes (#895). #848 stayed untouched because it is assigned. The backlog was replenished with 19 independently reproduced issues (#897-#915, none of them explainers) - 14 to replace the closed ones plus 5 extra - three pinned: Python/JS key-trim parity (#897), proxy parameters missing from CLI provenance (#898) and column-name similarity for rename suggestions (#902). No pull request was merged after #882, so CONTRIBUTORS.md keeps its list and only its snapshot date moves; contributors stay 50 (counted from CONTRIBUTORS.md; GitHub's contributors API reports 49), forks 55, stars 49, watching 8 (live GitHub numbers); issues closed this week 58 -> 72 (a GitHub search count since 2026-10-05). Countries and social reach not re-measured.

2026-W42 - the fourth sweep: 18 non-explainer issues closed, 23 fresh ones opened, one new contributor: every unassigned non-explainer issue filed after the last sweep was fixed and committed on its own, with a parity test wherever both engines are touched: key normalisation now trims the same characters, folds case the same way (checked across every Unicode code point) and reads 42.0 as 42 (#897, #911, #903), a trailing ! keeps one held-out spec exact and the web key box takes the CLI's ~/! markers (#907, #912), provenance records the proxy settings and the .xlsx sheet read (#898, #899), rename suggestions use column names and compare --rename acts on them (#902, #913), the exact test's shuffles and row cap are parameters with a re-measured 20000-row cap (#906, #909), near-unique held-out columns are skipped with a note (#908), the web gained Copy as CLI command, synced keyword boxes and a reference file that follows the encoding picker (#915, #901, #900), the dashboard key matches the Summary tab (#905), and the fast suite fell from about 45 to 30 seconds (#904, #910, where node start-up proved not to be the cost). #848 stayed untouched because it is assigned. @adity982 joined with PR #916 (per-file held-out encodings, closing #914). The backlog was replenished with 23 independently reproduced issues (#917-#939, none of them explainers) - 18 to replace the closed ones plus 5 extra - three pinned: Unicode-aware name tokens (#917), skipped held-out columns visible in JSON and provenance (#921) and an upper bound on exact-test shuffles (#926). Contributors 50 -> 51, forks 55 -> 56, stars 49 -> 50 (live GitHub numbers; the contributors API reports 50 where this file counts 51); issues closed this week 0 -> 19 (a GitHub search count since 2026-10-12, which includes #914). Countries and social reach not re-measured.

2026-W42 (later) - the fifth sweep: 20 non-explainer issues closed by us, 3 more by a new contributor, 23 fresh ones opened: every unassigned non-explainer issue left from the last sweep was fixed and committed on its own, with a parity test wherever both engines are touched: the exact test's shuffles are capped and settable in the web (#925, #926), skipped near-unique held-out columns reach the JSON notes and provenance (#921), encoding notices and @ENCODING reach held-out workbooks and the web column box (#923, #924), keys fold NFKC with a generator for the case-folding table (#935, #939), rename suggestions tolerate a different group count and --rename pairs land in the compare CSV (#918, #920), Copy as CLI command gained --sample, the export options and quoting tests (#928, #929, #934), the keywords box says when it was restored (#930), and the docs and tooling gained the held-out syntax table, the MCP parameter tables with a test, the brag-output asset record, a single CI coverage run, a faster OG-image test and a split parity suite (#922, #931, #936, #932, #933, #938). #848 stayed untouched because it is assigned. @peda-cos joined and fixed #917, #919 and #937 through PRs #941-#943; their PRs did not link the issues, so we verified each fix against its repro and closed them with credit. The backlog was replenished with 23 independently reproduced issues (#944-#966, none of them explainers, found from probes and coverage gaps), three pinned: a stale-table guard for the case-folding sweep (#946), the web provenance missing tested: false (#951) and a regex lookbehind that would stop the whole script on older Safari (#956). Contributors 51 -> 52 (counted from CONTRIBUTORS.md; GitHub's contributors API reports 51), forks 56 -> 57, stars 50 -> 51 (live GitHub numbers); issues closed this week 19 -> 42 (a GitHub search count since 2026-10-12). Countries and social reach not re-measured.

2026-W42 (Wednesday) - the sixth sweep: all 23 non-explainer issues closed, 23 fresh ones opened, no new contributors: every issue of the previous sweep (#944-#966) was fixed and committed on its own: no regex lookbehind in browser scripts (#956), the web exports and held-out specs now match the CLI for skipped columns, @ENCODING and workbook notices (#951, #952, #958), the exact inputs report errors inline (#962), one MCP notes key (#950), the proxy specification moved to its own SPEC section (#955), and new guards that parse every documented command (#948), compare the case-folding table with Python while saying what it could not compare (#946) and check roadmap and changelog issue numbers against GitHub (#963). The brag-output licences were researched and recorded: ende.app states CC BY 4.0 and Kenney CC0 (#954). #848 stayed untouched because it is assigned. The backlog was replenished with 23 independently reproduced issues (#967-#989, none of them explainers, found from coverage gaps and probes), three pinned: the Arabic-Indic digit mismatch in the numeric check (#967), a repeated held-out column slipping past the duplicate check after a skip (#980) and the helpers duplicated across the two web views (#983). Contributors stay 52 (counted from CONTRIBUTORS.md; GitHub's contributors API reports 51), stars 51, forks 57 -> 56 (a fork was removed; live GitHub numbers); issues closed this week 42 -> 65 (a GitHub search count since 2026-10-12). Countries and social reach not re-measured.

2026-W42 (Thursday) - the seventh sweep: 19 non-explainer issues closed, 19 fresh ones opened, one new contributor: every unassigned non-explainer issue left from the sixth sweep was fixed and committed on its own: only ASCII digits count as numbers in the held-out screen in both engines (#967), a held-out column given twice is rejected even after a skip (#980), the web engine skips array and object columns like Python (#973), the MCP sheet-note aliases carry a removal version and a deprecated hint (#984), the server is driven over stdio (#987), the helpers both web views duplicated moved into assets/profiler-shared.js (#983), a Playwright smoke test opens the real pages (#988), the 948-line parity test file was split (#985), and eleven coverage gaps got tests (#968-#972, #974-#979). @Enard52 merged two tooling PRs (#990, #991). Probes of nested JSON, mixed-type columns, unused pandas categories and empty files produced the next 19 issues (#992-#1010), three pinned. #848, #986 and #989 are assigned and were left alone.

2026-W42 (Friday) - the eighth sweep: 17 non-explainer issues fixed, one closed as not planned, 18 fresh ones opened, no new contributors: every unassigned non-explainer issue left from the seventh sweep got a commit of its own, with a parity test wherever both engines are touched: nested JSON objects, number-versus-string labels and unreadable reference shares now agree (#992, #993, #1002), unused pandas categories no longer inflate the group count (#994), empty files have one clear message (#1010), a manifest row filter takes exactly one operator (#999), make test-browser and eight more browser interactions exist (#997, #1000), the shared module took over five more helpers (#1008), and seven coverage gaps got tests. #998 asked for a change to the gitignored AGENTS.md and was closed as not planned. Probes with malformed CSV and JSON (float-looking codes, booleans, big integers, ragged rows, unterminated quotes, JSON Lines) produced the next 18 issues (#1011-#1028), three pinned. #848, #986, #989 and #1009 are assigned and were left alone.

2026-W42 (Saturday) - the ninth sweep: 17 non-explainer issues fixed, 17 fresh ones opened, one new contributor: the unassigned follow-ups of the eighth sweep were fixed and committed (the six label-spelling parity issues in one commit, the ragged-row and unclosed-quote pair in another): both engines now label groups alike and read malformed rows, NUL bytes, JSON NaN and JSON Lines the same way, compare --fail-on-drift no longer passes with nothing to compare, the terminal report widens its label column and says when a proxy check found nothing, and the em-dash check now scans notebooks. @minutechreview fixed the .xls message (#1034) and @prami25r joined with the case-and-spacing label warning (#1035). Probes with a 500,000-row file and with workbooks produced the next 17 issues (#1036-#1052), three pinned. #848, #986 and #989 are assigned and were left alone.

2026-W43 (Tuesday) - the tenth sweep: twelve issues fixed and six new explainers: the high-cardinality flag flood (#1042, #1043, #1052) is fixed in both engines (per-group flags past ten collapse into one summary line and every view caps the list at 50), XLSX date cells carry the same label as pandas in the web engine (#1039), get_benchmark_results can return the live results/ and names its source (#1049), scripts/diff_results.py diffs results/ against the reference snapshot (#1065), Dependabot's minor and patch bumps are grouped with the results-affecting libraries kept separate (#1069), and ROADMAP Phase 6 lists what can start now (#1067). Six explainers shipped: the three standing requests (#543 max-min fairness, #544 distributionally robust optimization, #736 fairness in ranking) and the three that close the Phase 1 gap to 65+ (#1070: reweighing, group-specific thresholds, permutation tests for fairness gaps); explainer count 62 → 68, each with a real run against a repo audit and the benchmark's current results/ rows. Forks 58 → 62 (live GitHub numbers); stars, watching, contributors, countries and social reach unchanged. Issues closed (17) is the five closed so far this week plus the twelve this batch closes on merge. Contributors: @sammist2 and @Asmit-08 are already in the live API count of 53 (52 external + the maintainer).

2026-W43 (Wednesday) - the eleventh sweep: nine issues fixed, fourteen new explainers, and four contributor PRs merged alongside: a public faircode.benchmark.load_audit() helper shared with run_audit (#1078), browser tests that a 20,000-label column keeps both flag lists capped (#1080), an opt-in benchmark-diff workflow that reruns the benchmark on a lockfile-bump PR and comments the diff (#1079), and the no-op frozen-files workflow removed (#1061). Five explainer issues shipped 14 explainers (#1083 adversarial debiasing, fairness regularization, fair representation learning; #1084 measurement, aggregation and survivorship bias; #1085 disaggregated evaluation, leave-one-group-out evaluation, choosing a fairness metric; #1086 model cards, datasheets for datasets, algorithmic impact assessments; #1087 inferring protected attributes, fairness without demographics), each with a real run on a repo audit; explainer count 68 → 82, past the 75+ target (new target 90+). Contributor PRs closed #1076 (1904-system XLSX dates), #1077 (README and llms.txt listing check), #1081 (diff_results.py --audit/--summary) and #1082 (README parameters for get_benchmark_results); @Gauravbhati2099 is a new contributor. Forks 62 → 63 and contributors 53 → 54 (live GitHub numbers); stars, watching, countries and social reach unchanged. Issues closed (28) is the 19 closed since 2026-10-19 plus the nine this batch closes on merge.

2026-W43 (Friday) - the twelfth sweep: fifteen issues fixed and twenty-six new explainers: nine explainer issues shipped 26 explainers, each run on a repo audit (#1099 minimum detectable gap, small-group shrinkage, confidence intervals for ratios; #1100 monitoring fairness in production, label shift, delayed feedback; #1101 causal graphs, path-specific effects; #1102 randomized post-processing, the fairness-accuracy Pareto frontier, choosing a mitigation strategy; #1114 adverse action notices, geographic proxies, pricing gaps; #1115 race in clinical models, utilization as a label, discharge leakage; #1116 seed and split sensitivity, cross-validation, stratified test sets; #1117 feature importance by group, partial dependence by group, explanation disagreement; #1119 hiring pipeline adverse impact, compounding disparities, differential validity); explainer count 82 → 108, past the 90+ target (new target 120+). disparate_impact_ratio is no longer reported when the advantaged group has fewer than 30 selected rows (#1094): COMPAS and Healthcare Readmission were rerun and every other row reproduced exactly, with 37 of 195 ratio rows now annotated. Every explainer page has a meta description of 70 to 160 characters and a title within 65 (#1104, #1105), a Limitations section on the four that lacked one (#1108), at least two inbound links (#1107), and the build has tests (#1110). Contributor PRs closed #1095 to #1097, #1106, #1109, #1111 to #1113 and #1118; @dxnnystyles is a new contributor. Stars 51 → 52, forks 63 → 64, contributors 54 → 55 (live GitHub numbers); watching, countries and social reach unchanged. Issues closed (55) is the 40 closed since 2026-10-19 plus the fifteen this batch closes on merge.

2026-W43 (Saturday) - the thirteenth sweep: fourteen issues fixed and six new explainers: the explainers now ship the code they quote as explainers/code/<slug>.py (#1125), results/PROVENANCE.json records what produced results/ and diff_results.py reads it (#1129), shows withheld ratios as withheld (#1132) and takes --limit (#1131), AuditData.group() replaces the hand-written masks (#1133), a weekly workflow reports dead external links (#1127), the dead links and a stray "coming soon" are fixed (#1126, #1128), the structure check has no known exceptions left (#1130), numeric .xlsx and JSON column labels are text in Python as in the web engine (#1045), and JSON "NA" and "" are values in the web engine as in Python (#1036). Two explainer issues shipped six explainers (#1137 AUC gaps by group, decision curve analysis by group, cost-sensitive evaluation; #1134 popularity bias, two-sided fairness, position bias and click models), each run on a repo audit; explainer count 108 → 114. Stars 52 → 53 (live GitHub numbers); forks and contributors unchanged at 64 and 55. Issues closed (76) is the 62 closed since 2026-10-19 plus the fourteen this batch closes on merge.

2026-W44 (Tuesday) - the fourteenth sweep: tooling and contributor records: six issues fixed - an ignore list for the external-link check (#1174), the dead NIJ dataset link (#1175, #1186), OG images that are not rewritten when they already exist (#1144), scripts/check_contributors.py (#1149) and check_traction.py --live with a weekly workflow (#1148). #1152 (logistic regression convergence) was closed as not planned for now, with the audits left alone. --live found the traction figures a few days behind GitHub, so stars 53 → 54, forks 64 → 67 and contributors 55 → 58 are now the live numbers. CONTRIBUTORS.md is updated through PR #1191 with three new contributors (@bfs2021, @d4rshnn, @mohakmanjrekar) and new counts for @dxnnystyles (3 → 15 PRs) and @minutechreview (10 → 13). Nineteen new tooling issues are open (#1192-#1210), three of them pinned. Issues closed (7) counts the issues closed since 2026-10-26.

2026-W44 (Sunday) - the fifteenth sweep: sixteen tooling issues fixed: the link checker keeps balanced parentheses in a URL (#1229), retries a transient 429 or 5xx once and limits requests per host (#1231), can ignore a whole host (#1233) and the LinkedIn 999 profile link (#1232), and the moved links in the top-level docs are replaced (#1230). The contributors checker excuses the three people no GitHub API counts (#1234), refreshes commit counts and the snapshot line with --fix --commits (#1235) and checks every commit author against the identity map (#1236, ten authors added). check_issue_refs.py reads Closes #N from local commits (#1240), the weekly report issues get their own labels (#1241), a --dry-run (#1245) and a failing job when the check could not run (#1244), scripts/draft_metrics_row.py drafts this table's row (#1242), the Makefile has targets for the opt-in checks (#1246), ROADMAP's explainer count is checked and now reads 114 (#1243), and the stale-script test no longer trips over an old pathlib.py in site-packages (#1239). #1237 and #1238 (benchmark convergence and the in-processing run time) were left open: they mean rerunning audits. CONTRIBUTORS.md is updated through PR #1228 with new counts for @dxnnystyles (15 → 24 PRs), @minutechreview (13 → 18) and @Aaqibhafeezkhan (3 → 4). Stars 54 → 55 and forks 67 → 68 (live GitHub numbers); contributors unchanged at 58. Issues closed (50) is the 34 closed since 2026-10-26 plus the sixteen this batch closes on merge. Sixteen new tooling issues are open (#1247-#1262), three of them pinned.

2026-W45 (Tuesday) - the sixteenth sweep: sixteen more tooling issues fixed: check_contributors.py splits main() by mode (#1260), fetches its commit data once and can save it (#1248), prints each pending PR's title (#1258), checks the Contributions by area table (#1259, which found one missing person), starts an entry with --stub (#1249) and has its exceptions documented (#1261). The link checker gets --retry-delay and --per-host (#1254) and --fix-moved (#1255). check_explainer_count.py finds ROADMAP's count by its table header (#1257), check_issue_refs.py finds the base branch instead of assuming origin/main (#1250), draft_metrics_row.py learns --pending-closes, --apply and --note (#1251, #1252, #1262; this week's row was drafted with it), make doctor finds stdlib-shadowing modules (#1247, and names this machine's pathlib.py backport), the gh wrappers are tested (#1253) and make test-fast runs in about 35 s instead of 95 s when pytest-xdist is installed (#1256). #1237 and #1238 (benchmark convergence and the in-processing run time) stay open: they mean rerunning audits. Nobody merged after CONTRIBUTORS.md's snapshot (PR #1228), so there are no new entries; stars, forks, watching and contributors are unchanged at 55, 68, 8 and 58 (live GitHub numbers). Issues closed (16) is the sixteen this batch closes on merge (none closed since Monday yet). Sixteen new tooling issues are open (#1263-#1278), three of them pinned.

2026-W45 (Friday) - the seventeenth sweep: fourteen tooling issues fixed: make test-fast no longer runs the Chromium tests (#1263) and the explainer smoke test scales its timeout with the machine load (#1264); every gh call in the weekly checks has a timeout through scripts/ghcall.py (#1266); make doctor also scans PYTHONPATH and the working directory (#1267) and runs first in make check (#1268); check_contributors.py reads co-author trailers (#1269), keeps its exceptions in scripts/contributors-exceptions.json (#1270), takes commit counts with --stub --commits (#1271) and gives the weekly issue a stub command per newcomer (#1277); --apply rewrites the targets table's Issues closed row (#1273); the workflows' calls to update_weekly_issue.py are tested against its CLI (#1274); make key-fold-check is documented with a test for every target (#1275); the pre-commit hooks gain the issue-reference, traction, dataset-source and contributors checks (#1276); and --fix-moved --rebuild regenerates the explainer pages (#1272). #1265 (pytest-xdist) is half done: declared in the test extra, CI left alone until its time can be measured. #1237 and #1238 stay open because they mean rerunning audits. A parallel make coverage run also showed that a scripts package in site-packages can shadow ours, which broke running draft_metrics_row.py directly on this machine until the imports were made package-aware. CONTRIBUTORS.md is updated through PR #1279 with a new entry for @kavadiyajiya-ux (the --fix-moved link forms, #1278) started with the new --stub --commits. Forks 68 → 69 and contributors 58 → 59 (live GitHub numbers); stars and watching unchanged. Issues closed (31) is the 17 closed since Monday plus the fourteen this batch closes on merge. Fourteen new tooling issues are open (#1281-#1294), three of them pinned.

2026-W45 (Sunday) - the eighteenth sweep: ten more tooling issues fixed, two new contributors: the pre-push pytest hook skips the Chromium tests like make test-fast (#1282); update_weekly_issue.py reports a failed or timed-out gh call as an error annotation (#1288); the link checker takes its retry delay as a parameter (#1287); draft_metrics_row.py --update refreshes this week's row (#1286, used to write this one); a TODO left over from --stub fails the contributors check (#1285); the generated-files builders have a timeout (#1292); make check DOCTOR=warn goes on past a shadowing module (#1290); the profile scaling test measures CPU time and the load factor is shared (#1284); make coverage-fast gives 97% in about a minute (#1281) and make coverage runs in parallel, 316 s instead of 675 s for the same 99% (#1265). #1283 (the repeated import block) stays open with the reason, #1294 is assigned, and #1237 and #1238 wait for an audit rerun. A fix to check_contributors.py came out of stubbing two newcomers in a row: the section's closing rule travelled with the last entry when entries were sorted. Other people closed #1289, #1291 and #1293 in the same days (#1295, #1297, #1298). CONTRIBUTORS.md is updated through PR #1298 with new entries for @ExoticA1A and @isaaclimmy, both started with --stub --commits. Stars 55 → 71, forks 69 → 74 and contributors 59 → 61 (live GitHub numbers; the traction check had been a week behind). Issues closed (44) is the 34 closed since Monday plus the ten this batch closes on merge. Ten new tooling issues are open (#1299-#1308), three of them pinned.


Targets

Metric Current Target Timeline
Stars 71 50+ End of 2026
Forks 74 75+ End of 2026
Watching 8 12+ End of 2026
Contributors 61 20+ End of 2026
Social reach 30K+ 40K+ End of 2026
Countries reached 20 20+ End of 2026
Issues closed 44 (this week, since 2026-11-02) Track weekly Ongoing
Code audits 7 8+ End of 2026
Explainers 114 120+ End of 2026

Notes

  • Social views = combined Instagram + LinkedIn impressions
  • Countries = unique countries visiting the live website (thefaircode.xyz), via site analytics - not the social-views figure above
  • Contributors = external contributors only (excluding Yash), via GitHub's contributors API
  • Watching = GitHub repo watchers/subscribers, via GitHub's repo API
  • Issues closed = issues merged or resolved that week, not total open
  • Code audits = cumulative total published in repo
  • Explainers = cumulative total in explainers/

Resume-ready line (fill in at application time):

Created and scaled Fair Code, an open-source responsible AI platform explaining algorithmic bias through code audits, healthcare-bias case studies, beginner explainers, and contributor-led GitHub documentation; grew the project to 51 stars, 53 contributors, 58 forks, 30K+ social views, and website visitors from 20 countries.