Weekly snapshot of project health. Updated every Friday.
- Check GitHub for stars, forks, watchers, and contributor count
- Check Instagram and LinkedIn for combined impressions/followers
- Check site analytics for the count of unique countries visiting thefaircode.xyz
- Count issues closed this week
- Count code audits published this week
- Add a new row to the table below
| 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-underCI gate (#115) and--min-group-sizesmall-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 aspost-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.txtfor AI crawlers across the site;faircode profile/comparegained.jsonand.parquetinput (#127) andfaircode compare --htmlplus a matching web-UI download button (#111, #128);.github/CODEOWNERS(#142, closes #138) and a theme toggle that now respectsprefers-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
.xlsxsupport for the web profiler with a Subresource Integrity hash on its CDN script (#158), aresults/-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-manifestrow_filtersvalidation 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 reached16 → 17. Contributors badge/targets/resume line also corrected to14- 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/numpymissing frompyproject.tomldespite being imported unconditionally (#235, closes the same class of gap Pillow once had), andscikit-learnlocked at1.8.0whilepyproject.tomlrequired>=1.9.0after the test that caught it was deleted rather than fixed (#255, restored by@ahmdkaml).check-frozen-files/Build Explainersnow also run on direct pushes tomain, not just PRs (#246,@ahmdkaml).audits.yml'sprofiler/benchmark-harnessjobs are now change-aware, skipping on docs-only pushes the same way the pre-push hook already did (#237);run-auditsitself is left unconditional since it's the one required status check (#160). A newscripts/check_broken_links.py(#253) caught five real broken links in explainer markdown (a misspelled dataset-folder name, a missing../) plus a second bug inbuild_explainers.py's own link resolver that had silently broken every such link in the generated.htmltoo. The theme-toggle button now exposes its state viaaria-pressed(#250),faircode/report.py's HTML report tables get proper<th scope="col">/<caption>markup (#254,@propcgamer20-png), andruff checklands as the repo's first general-purpose Python linter (#248,@evanjain-dot). Stars42 → 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 includepytest-cov, so the new "Report test coverage" step failed on every run since - masked as an overall job success bycontinue-on-error: true. Fixed directly by addingpytest-covto the install line; verified in a clean venv that it now reports real coverage numbers instead of erroring. Also fixed a staleBuild ExplainersCI failure from #262 skippingmake build-explainersbefore opening the PR. Contributors14 → 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 fromCONTRIBUTORS.md's manually-verified list instead, which is the more current source. Forks22 → 21(a real decrease, per GitHub's live API - not a data error). Stars43unchanged.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--htmltraceback 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_difffor COMPAS and Tenant Screening; a superadditiveintersectional_demographic_parity_difffor Benefits Denial) rather than invented ones. Explainer count45 → 47.2026-W34 (traction refresh) - forks, contributors, and countries caught up to live data: forks
21 → 22and countries17 → 18per live site analytics; contributors15 → 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 fromCONTRIBUTORS.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 missingproxyextra toaudits.yml's profiler job, which had lefttests/test_proxy.pysilently skipped in CI (#311, closing #298). @ahmdkaml's #288 added thecli.pybenchmarksubcommand test coverage issue #270 asked for, but never referenced the issue number - found and closed manually with a credit comment. Stars43 → 47, forks22 → 23(live GitHub numbers); contributors17 → 18(VedantMadane's first merged PR - counted fromCONTRIBUTORS.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-hintsoncompare), #251 (stdin support), #284 (web profiler advanced-thresholds panel), #302 and #271 (test coverage forcompare_to_htmlandbenchmark.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 (--mapunknown-column error), #286 (build-explainers.ymltrigger 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.jsthat hide the file from plaingrep(#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), aparse_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 aprovenanceblock - dataset SHA-256,faircodeversion, resolved params - to--jsonexports, at the export boundary so the JS-parity test needs no change. Contributors18 → 19(mahirhir's first merged PR, counted fromCONTRIBUTORS.md- the raw API still lags). Forks23 → 24(live GitHub numbers). Stars, watching, countries, and social reach unchanged.2026-W35 (later still) - the MCP server ships,
faircodegoes live on PyPI, and a second same-week new contributor: Phase 1 of the MCP plan discussed for #327-#329 landed -faircode/mcp_server.pyexposesprofile_dataset,compare_datasets, andproxy_hintsas MCP tools over stdio, a thin adapter over the existingprofile()/compare()/proxy_hints()functions with no new analysis logic and the same local-only trust boundary as the CLI.faircodewas then published to PyPI for the first time (pip install faircode/faircode[mcp]now work without cloning the repo). New contributor @Ayaan-20-11 fixedscripts/render_terminal_png.py's hardcoded macOS-only font path (#331, closing #323) - it now uses the repo-bundledassets/fonts/IBMPlexMono-Regular.ttf, the same fontgenerate_og_images.pyalready uses. Contributors19 → 20(Ayaan's first merged PR). Forks24 → 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). Contributors20 → 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, forks25 → 26(live GitHub numbers). Countries reached18 → 20, per site analytics. Contributors, watching, social reach, explainers, and audits unchanged from last week's snapshot. Issues-closed resets to0for 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
provenanceblock to the web profiler's "Copy as JSON" export (#339, closing #329), mirroring #330's Python-side shape via client-sidecrypto.subtle.digest. Review caught a real bug before crediting it as complete: the exporteddataset_hashwent stale after loading the sample dataset following a real upload, since the cachedFileobject 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 staleexplainer.htmlcomment (#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/@Shreyash0712to all five, verified both already hold write access via theCODEOWNERS Accessworkflow. Contributors21 → 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 theproxy_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 frompaper/results-frozen/. Explainer count47 → 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. Contributors22 → 23(sushicat75's first merged PR). Forks26 → 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_resultstool's missing-mirror error message, which blamedpaper/results-frozen/and suggested an unnecessary, citation-affecting re-freeze when the actual missing file was the package-internalfaircode/_results_frozen/mirror (#408, closing #396). @Zinniacodes01 fixed README.md'sfaircode/repo-tree, which had never been updated to listmcp_server.py,_explainers/, or_results_frozen/since they were added (#411, closing #409). @shauryagangrade closed a real silent-wrong-answer gap instrategy_features(), which fell through to a bareelsefor any unrecognized strategy name instead of erroring (#425, closing #418). @AnayDhawan excluded the generatedfaircode/_explainers/mirror fromcheck_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 fixloaders_extra.pysilently 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 atorient="split"instead of guessing; README's JSON-orientation docs andtests/test_loaders.py's prior columns-orientation round-trip assertion updated to match. Contributors23 → 27(oxura, Zinniacodes01, shauryagangrade, and nitishchauhan002's first merged PRs). Stars48 → 46(a real decrease, live GitHub API - not a data error, same pattern as the W33 forks correction). Forks27 → 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_splitcrash on a singleton target class, a zero-detected-dimensions profile fabricating a0/"F"score instead of reporting it as unmeasured, terminal screenshots silently clipping past 92 characters, the CLI trusting.csv/.tsvextensions 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 scopedcodeowners-access.ymlto this repo specifically, so the scheduled/push-triggered CODEOWNERS check stops running (and failing) under a fork's own context (#475). New contributor @AchieverSana fixedrender_terminal_png.pyleaking a rawFileNotFoundErrortraceback for a missing input file (#476, closing #460) - broadened directly toexcept OSErrorafter finding a directory path still leaked one via the siblingIsADirectoryError. Contributors27 → 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 setupnever installing thebenchmarkextra, silently skipping a large chunk of the test suite for anyone followingCONTRIBUTING.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, apsi/drift_levelrounding-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 missingaria-liveregion, a SPEC.md/code doc mismatch for the MCPlist_explainerstool, deadmin_share/min_group_sizeparameters on MCPproxy_hints, and--fail-on-driftfalse-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 againststatsmodels. Explainer count53 → 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 intocheck_explainer_count.py's tracked list. Forks31 → 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 stalepaper/results-frozen/version mismatch; and a fullresults/regeneration once drift turned out to reach beyond COMPAS. The larger fix in the second sweep:AI Fair Recruitment/unfair.py/fair.pywere silently folding the dataset's third Gender category (Other) into the "Female" bucket via aget_dummiescolumn-name substring match - fixing it to compare the real Male/Female columns directly (matchingaudit.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-withmissing fromcompare, 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 onindex.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. Contributors29 → 40- not a one-week jump: the weekly-tracked "29" had already fallen behindCONTRIBUTORS.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, syncingCITATION.cff'sdate-releasedwith thev2.2.0tag) 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.@AnayDhawanalso 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). Forks33 → 45, Stars46 → 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-sortaccessibility, 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). Stars48 -> 49and forks45 -> 50per GitHub's repo API; contributors recounted at45- everyone with a merged PR other than Yash (44 GitHub accounts plus the deletedTanishGoyal-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, MCPcorrection, web dropdown, #806) and now accepts any number of held-out files per dataset - including.xlsxand in the compare view - through one shared control (#801-#803);--proxy-alphawithout--proxy-hintsbecame 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 forresults/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). Forks50 -> 51; contributors45 -> 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-ageare flagged instead of banded into75+; Spanish/German/French/Portuguese column names are detected;compare --csvlists 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--encodingapply to.jsonfiles 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: theestado_civilmis-detection (#855), a user-extensible detection vocabulary (#856) and birth-year age conversion (#862). Credited inCONTRIBUTORS.mdthis 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. Contributors46 -> 49, forks51 -> 53(live GitHub numbers); issues closed this week14 -> 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):
--keywordsand 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-yearfor 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). Contributors49 -> 50(Detoy's first merged PR, counted fromCONTRIBUTORS.md), forks53 -> 55; issues closed this week42 -> 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_hintstool now sharesprofile_dataset's age and keyword options (#883), key normalisation composes Unicode and folds case (#884), capped small-cell tables are labelledchi2-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) andPATH=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 markedslowsomake test-fasttakes 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, soCONTRIBUTORS.mdkeeps its list and only its snapshot date moves; contributors stay50(counted fromCONTRIBUTORS.md; GitHub's contributors API reports 49), forks55, stars49, watching8(live GitHub numbers); issues closed this week58 -> 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.0as42(#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.xlsxsheet read (#898, #899), rename suggestions use column names andcompare --renameacts 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). Contributors50 -> 51, forks55 -> 56, stars49 -> 50(live GitHub numbers; the contributors API reports 50 where this file counts 51); issues closed this week0 -> 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
@ENCODINGreach 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--renamepairs 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 missingtested: false(#951) and a regex lookbehind that would stop the whole script on older Safari (#956). Contributors51 -> 52(counted fromCONTRIBUTORS.md; GitHub's contributors API reports 51), forks56 -> 57, stars50 -> 51(live GitHub numbers); issues closed this week19 -> 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,
@ENCODINGand workbook notices (#951, #952, #958), the exact inputs report errors inline (#962), one MCPnoteskey (#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 stay52(counted fromCONTRIBUTORS.md; GitHub's contributors API reports 51), stars51, forks57 -> 56(a fork was removed; live GitHub numbers); issues closed this week42 -> 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
deprecatedhint (#984), the server is driven over stdio (#987), the helpers both web views duplicated moved intoassets/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-browserand 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 gitignoredAGENTS.mdand 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
NaNand JSON Lines the same way,compare --fail-on-driftno 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.xlsmessage (#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_resultscan return the liveresults/and names its source (#1049),scripts/diff_results.pydiffsresults/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 count62 → 68, each with a real run against a repo audit and the benchmark's currentresults/rows. Forks58 → 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:@sammist2and@Asmit-08are 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 withrun_audit(#1078), browser tests that a 20,000-label column keeps both flag lists capped (#1080), an opt-inbenchmark-diffworkflow that reruns the benchmark on a lockfile-bump PR and comments the diff (#1079), and the no-opfrozen-filesworkflow 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 count68 → 82, past the 75+ target (new target 90+). Contributor PRs closed #1076 (1904-system XLSX dates), #1077 (README andllms.txtlisting check), #1081 (diff_results.py --audit/--summary) and #1082 (README parameters forget_benchmark_results); @Gauravbhati2099 is a new contributor. Forks62 → 63and contributors53 → 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_ratiois 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. Stars51 → 52, forks63 → 64, contributors54 → 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.jsonrecords what producedresults/anddiff_results.pyreads 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.xlsxand 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 count108 → 114. Stars52 → 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) andcheck_traction.py --livewith a weekly workflow (#1148). #1152 (logistic regression convergence) was closed as not planned for now, with the audits left alone.--livefound the traction figures a few days behind GitHub, so stars53 → 54, forks64 → 67and contributors55 → 58are 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.pyreadsCloses #Nfrom 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.pydrafts 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 oldpathlib.pyin 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). Stars54 → 55and forks67 → 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.pysplitsmain()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-delayand--per-host(#1254) and--fix-moved(#1255).check_explainer_count.pyfinds ROADMAP's count by its table header (#1257),check_issue_refs.pyfinds the base branch instead of assumingorigin/main(#1250),draft_metrics_row.pylearns--pending-closes,--applyand--note(#1251, #1252, #1262; this week's row was drafted with it),make doctorfinds stdlib-shadowing modules (#1247, and names this machine'spathlib.pybackport), the gh wrappers are tested (#1253) andmake test-fastruns 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-fastno 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 throughscripts/ghcall.py(#1266);make doctoralso scansPYTHONPATHand the working directory (#1267) and runs first inmake check(#1268);check_contributors.pyreads co-author trailers (#1269), keeps its exceptions inscripts/contributors-exceptions.json(#1270), takes commit counts with--stub --commits(#1271) and gives the weekly issue a stub command per newcomer (#1277);--applyrewrites the targets table's Issues closed row (#1273); the workflows' calls toupdate_weekly_issue.pyare tested against its CLI (#1274);make key-fold-checkis 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 --rebuildregenerates the explainer pages (#1272). #1265 (pytest-xdist) is half done: declared in thetestextra, CI left alone until its time can be measured. #1237 and #1238 stay open because they mean rerunning audits. A parallelmake coveragerun also showed that ascriptspackage in site-packages can shadow ours, which broke runningdraft_metrics_row.pydirectly 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-movedlink forms, #1278) started with the new--stub --commits. Forks68 → 69and contributors58 → 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.pyreports 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 --updaterefreshes this week's row (#1286, used to write this one); a TODO left over from--stubfails the contributors check (#1285); the generated-files builders have a timeout (#1292);make check DOCTOR=warngoes on past a shadowing module (#1290); the profile scaling test measures CPU time and the load factor is shared (#1284);make coverage-fastgives 97% in about a minute (#1281) andmake coverageruns 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 tocheck_contributors.pycame 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. Stars55 → 71, forks69 → 74and contributors59 → 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.
| 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 |
- 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.