Fair Code exists because people outside the maintainer's laptop chose to spend their time on it.
- How this file works
- Maintainer
- Core contributors
- Contributors
- Contributions by area
- Automation
- Git identity map
- How to get listed
- Recognition beyond this file
- Code of Conduct
Everyone below has at least one merged pull request on
yakew7/Fair-Code. Core contributors are listed separately
(sustained ownership, reflected in .github/CODEOWNERS); everyone else is
ordered by merged PR count, most first - ties broken by commit count, then by earliest first-merged
date. Within each entry, the PR numbers link the claim to the actual diff, so nothing here is an
unverifiable "thanks to".
Snapshot: 2026-09-09, covering everything merged through PR #541.
Anything merged after that date is real and welcome, but is not yet reflected here - the
contributors graph is always the live
source of truth, and the contrib.rocks grid above regenerates from it automatically.
The counts come from two different places and will not always agree:
| Number | Where it comes from | Why it differs |
|---|---|---|
| Merged PRs | gh pr list --state merged |
The unit of contribution this file counts. One PR = one reviewed, merged change. |
| Commits | GitHub's contributors graph | Higher for anyone who pushed several commits per PR, and it only counts commits on main. |
Where a contributor's local git author name differs from their GitHub handle, both are recorded in
the Git identity map so git shortlog -sne can be reconciled against this file.
| Who | Role | |
|---|---|---|
| Yash Kewlani - @yakew7 | Creator and maintainer. Author of the seven audits, the faircode library and benchmark harness, the Open Dataset Profiler, the website, and the bulk of the 61 explainers. Code owner for faircode/, paper/, every audit.yaml, and project policy (CLAUDE.md, CONTRIBUTING.md); co-owner of explainers/. |
Contact: yashkewlani2020@gmail.com · @thefaircodeproject
People carrying sustained ownership of an area, reflected in .github/CODEOWNERS.
Ahmed Mohamed Abdelhady Kamel - @ahmdkaml
40 merged PRs · 56 commits · first merged 2026-07-31
Co-code-owner of .github/workflows/, .github/CODEOWNERS, scripts/, tests/, profiler.html,
and the three assets/profiler-*.js engines. The single largest external contribution to the
project by volume, concentrated in two areas:
Profiler & data loading
- Parquet and JSON loaders for the CLI (#127), client-side JSON support in the web profiler (#144), documented JSON orientations (#155)
- Lazy-loaded SheetJS for XLSX profiling (#192), CDN pin kept in sync (#193), XLSX edge cases (#194), ignored-sheet reporting in both the web UI (#197) and the CLI (#198), documented
--proxy-hintson the web profiler landing copy (#236) - Standalone HTML report for
faircode compare(#128), configurable--min-group-sizewarnings (#124),--referencehelp-text fix (#145) - JS/Python profiler parity tests (#126), HTML report smoke tests (#172),
--fail-underequality test (#123), XLSX tests in CI (#200), favicon/OG image generator coverage (#234), a locked-vs-declared dependency version test (#233, restored and its scikit-learn drift fixed in #256), and test coverage forcli.py'sbenchmarksubcommand - the import-error fallback, paper-drift warning, no-manifests error, and a full success run (#288, closing issue #270). Most recently, a fix for--proxy-hints-withsilently no-opping without--proxy-hints(#358, closing issue #347), submitted independently of @evanjain-dot's #359 for the same issue; both were merged, with #359's earlier-executing check leaving #358's alternate fix unreachable but harmless
CI, supply chain & freeze safety
- CI enforcement of the frozen files (#157) - the guardrail that makes the paper freeze in CLAUDE.md mechanical rather than a matter of trust
- Benchmark resample/permutation counts warn when they drift from the paper defaults (#226); results-workflow figure-filename drift check (#195); audit-manifest dataset column validation (#156)
- CodeQL code scanning (#153, upgraded to v4 in #229), Dependabot extended to GitHub Actions (#146)
CODEOWNERSitself (#142) and the CI-automation ownership entry (#174), workflow YAML validation (#225),CITATION.cffvalidation (#223), optional extras inmake setup(#222), Actions maintenance docs (#196), static favicon assets (#154), documented the pre-push test suite's runtime (#238),frozen-files/Build Explainersrunning on direct pushes tomain, not just PRs (#258, #259),make coverageplus a non-gating coverage-report step in the profiler CI job (#263, #264)
Shreyash Swami - @Shreyash0712
7 merged PRs · 11 commits · first merged 2026-06-05
Co-code-owner of explainers/. The most prolific explainer author after the maintainer - ten
explainers across three PRs, plus workflow maintenance and a citation cleanup pass:
Why AI Hallucinates (#43); then
Bias-Variance Trade-off,
Class Imbalance,
Confusion Matrix, and
Protected Attribute in a single PR (#102).
Also fixed the first-interaction greeting trigger and upgraded the audits workflow's action versions (#46).
Later, five more in one PR (#262):
What Is the Base Rate Fallacy?,
The Obermeyer Case: When Cost Becomes a Proxy for Health Need,
Race Correction in Clinical Algorithms,
What Is Reject Inference?, and
Underdiagnosis Bias in Healthcare AI.
Added reference hyperlinks to six explainers' previously plain-text citations (#276): The "AI Is Objective" Myth, What Is the Base Rate Fallacy?, False Positives vs. False Negatives, What Is a Precision-Recall Curve?, What Is Predictive Parity?, and ROC Curve and AUC. Extended the web profiler's downloadable HTML report's imbalance/missing/skew meta line to the reference-baseline comparison section (#295), a follow-up to @AnayDhawan's #294. Most recently, scoped codeowners-access.yml to github.repository == 'yakew7/Fair-Code' (#475), so the scheduled/push-triggered CODEOWNERS access check stops running (and failing) under a fork's own repo context.
Ordered by merged PR count, most first (ties broken by commit count, then by earliest first-merged date).
Evan Jain - @evanjain-dot
11 merged PRs · 39 commits · first merged 2026-05-18
Author of the second PR ever merged into the repo. Three explainers plus a CI check:
Sampling Bias (#2),
Counterfactual Fairness (#31),
Reinforcement Learning (#48),
and codeowners-access.yml (#224), which verifies that every user
listed in CODEOWNERS actually holds repo write access, closing issue #219. Later added ruff check
as the repo's first general-purpose Python linter (#261,
closing issue #248), scoped to Pyflakes-only rules to avoid false-positiving on an intentional
pytest.importorskip import pattern used throughout tests/. Then the
What Is a Precision-Recall Curve? explainer
(#275, closing issue #92), anchored to Healthcare
Readmission's real 11.2% base rate rather than an invented one. Most recently, fixed faircode/cli.py's
--html flag crashing with a raw traceback when its output directory doesn't exist, plus test coverage
for every previously-untested --map/--cross/--reference/--proxy-hints/--html error branch
(#277, closing issues #268 and #269), and added the
benchmark extra's missing matplotlib package to the CLI docstring and README
(#279, closing issue #244). Then made
faircode profile --proxy-hints-with error clearly when passed without --proxy-hints instead of
silently no-opping (#359, closing issue #347), added
the 6 most recently published explainers llms.txt had drifted out of sync with
(#361, closing issue #342). Most recently, added
scripts/check_explainer_count.py, cross-checking the plain-prose "N explainers" count across
README.md, CONTRIBUTORS.md, METRICS.md, and ROADMAP.md against the real count of explainers/*.md,
wired into build-explainers.yml (#363, closing
issue #352).
33 merged PRs · 50 commits · first merged 2026-07-06
The Predictive Parity explainer (#72) - the ProPublica vs. Northpointe dispute as two correct fairness checks that cannot both hold. Then the contributor tooling: Makefile, .pre-commit-config.yaml, and the local-setup section of CONTRIBUTING.md (#125, closing issue #114). Later refactored the first-interaction workflow to find a contributor's genuinely earliest issue/PR (#227), and added proper <th scope="col">/<caption> markup to faircode/report.py's HTML report tables (#260, closing issue #254). Then test coverage for generate_favicons.py's malformed-logo.svg error paths (#278, closing issue #245), and the missing proxy extra in audits.yml's profiler job install line (#311, closing issue #298). Then a bundled four-issue PR: faircode compare reporting ignored .xlsx sheets, the stale "five audits" README wording, the bug_report.yml audit dropdown missing two domains, and CODEOWNERS missing profiler.css (#314, closing issues #300, #308, #307, and #310). Then added Tenant Screening to the PROJECT_ANCHORS/projectAnchors anchor maps that turn a related-project Markdown link into a homepage anchor, fixing the one audit missing from both (#357, closing issue #350). Then added .yml/.yaml to check_em_dash.py's scanned extensions and allowlisted the two issue templates that intentionally demonstrate the banned character (#362, closing issue #343). Then three PRs in one day: added benchmark to make setup's extras list, which had silently skipped a large chunk of the test suite for anyone following CONTRIBUTING.md's documented setup step (#480, closing issue #473); then two fully-verified explainers, Treatment Equality (#481, closing issue #344) and The Fairness-Accuracy Trade-off (#482, closing issue #345), both anchored to a real run of this repo's own benchmark harness rather than invented numbers. Then six more PRs in one day: fixed faircode/SPEC.md's stale prefix-match worked example, broken by an earlier keyword-matching fix (#505, closing issue #489); added a make audits target running every audit's unfair.py/fair.py plus the CLI smoke tests, folded into make check, so a local green check can no longer mask a run-audits CI failure (#506, closing issue #492); fixed another stale SPEC.md leftover, this time documenting proxy_hints parameters a previous fix had already removed (#507, closing issue #499); made check_generated_files_current.py rebuild from source via a real git worktree instead of only diffing against the last commit (#508, closing issue #502); gave non-numeric age sentinels their own categorical group instead of silently folding them into missing_pct, catching and fixing a self-introduced regression against negative-age sentinels before committing (#509, closing issue #487); and closed out that batch by making TargetSpec.compute() exclude rows with a missing target label instead of silently scoring them as a negative class (#510, closing issue #488). Most recently, a 14-PR day: index.html's overstated COMPAS dataset size (#528, closing issue #518); report.py rendering "-0.0 pp" for a tiny negative share change (#529, closing issue #515); a missing "N more groups" notice on the reference-baseline sub-table (#530, closing issue #516); get_benchmark_results silently ignoring a filter on a column the chosen kind lacks (#531, closing issue #512); parse_reference's percent-vs-fraction scale decision being table-wide instead of per-column (#532, closing issue #513); out-of-range min_share/threshold params producing self-contradictory profiler output instead of erroring (#533, closing issue #511); assets/profiler-engine.js's NA_TOKENS disagreeing with pandas' real na_values (#534, closing issue #491); the web profiler's JSON export recording raw currentOpts instead of resolved provenance params (#535, closing issue #490); compare-page cards showing "none drift" for a comparison that was actually skipped (#536, closing issue #519); _intersections()'s labelize() still dropping non-numeric age sentinels a sibling fix had already fixed for profile()'s main breakdown (#537, closing issue #524); figures.py blending different protected attributes into one meaningless bar for multi-attribute audits (#538, closing issue #525); encode_features() scrambling numeric order for a column with a non-numeric sentinel (#539, closing issue #514); a follow-up regeneration commit after one of the day's earlier doc fixes left generated output stale (#540); and four new explainers - Simpson's Paradox, Differential Privacy, Subgroup Fairness, and Conditional Demographic Parity (#541, closing issues #483-#486) - three of which needed post-merge correction for a reintroduced audit-number mislabel, several rounding slips, and one factually wrong verdict claim in simpsons-paradox.md's own worked example.
9 merged PRs · 11 commits · first merged 2026-09-06
A full-backlog sweep of issues found in review, in one day: fixed fit_post_processing() raising a raw train_test_split error on a singleton target class (#448, closing issue #446 - the guard only covered train_test_split's own failure mode, and still crashed deeper inside fairlearn for a genuinely-too-sparse minority class; corrected directly, not part of the PR). Then represented a profile with zero detected dimensions as explicitly unmeasured (overall_score/grade: null, a dimensions_detected flag, a note) instead of a fabricated 0/"F", across both engines, the CLI, MCP, and every report format (#449, closing issue #444). Wrapped terminal-screenshot lines longer than 92 characters instead of silently clipping them off-canvas (#450, closing issue #443). Made the CLI sniff CSV/TSV delimiters instead of trusting the extension blindly, matching the web engine's existing behavior (#451, closing issue #439). Fixed the web engine's CSV parser silently stripping quote characters that appear after other field content (#452, closing issue #441), and its delimiter sniffer breaking on a quoted field containing a newline (#453, closing issue #440). Added the missing "…and N more groups" truncation notice to to_html's single-profile report (#454, closing issue #433). Then closed out the two remaining age-handling gaps: negative age sentinels no longer get fabricated into a 75+ group (#455, closing issue #431), and date-vs-age detection now samples the whole column instead of just its first 50 rows (#456, closing issue #432) - though the merge landing #456 alongside #455's own new test spliced the two tests' bodies together incorrectly, silently zeroing out this fix's own parity coverage; fixed directly afterward by reconstructing both test bodies from their original commits.
Anay Dhawan - @AnayDhawan
4 merged PRs · 4 commits · first merged 2026-07-14
Unsupervised Learning (#74), on k-means over the Benefits Denial dataset recovering a sex split without sex ever being a feature, and Model Drift (#75), on why a fairness gap measured once at launch is not guaranteed to hold months later. Then fixed two related report-rendering parity bugs: to_html()'s and the web profiler's downloadable report's missing imbalance/missing/skew meta line, and the web profiler's downloadable report dropping the reference-baseline comparison section entirely (#294, closing issues #283 and #272). Most recently, excluded the generated faircode/_explainers/ mirror from check_em_dash.py's scan, which had been reporting the same em dash twice under two different-looking paths for the same source file (#412, closing issue #393).
Yojeet - @Circout-sudo
3 merged PRs · 3 commits · first merged 2026-08-16
Added a test extra (pytest, pytest-cov) to pyproject.toml (#265, #266), part of the same test-coverage-reporting effort as @ahmdkaml's #263/#264, both closing issue #249. Later refined the coverage Makefile target's comment and added the -q flag to match test's style (#267).
Anjali Tiwari - @cannotdoit13
2 merged PRs · 2 commits · first merged 2026-06-01
Fixed the dataset path in the AI Fair Recruitment scripts (#27), then standardised path resolution across every audit and added the workflow that runs all of them on each push and PR (#29). That PR is the origin of audits.yml and of the "each script resolves its dataset relative to its own location" guarantee in the README.
Swastik Yadav - @Swastik-Yadav
2 merged PRs · 2 commits · first merged 2026-08-07
A build-time check for missing Open Graph images in scripts/build_explainers.py (#191), and a wording standardisation sweep across the docs and audit-script comments (#232) - prose only, leaving every reported number untouched, as the freeze requires.
1 merged PR · 10 commits · first merged 2026-05-18
PR #1 - the German Credit Lending audit: dataset, unfair.py, fair.py, terminal screenshots, and the README section. The first merged pull request in the project's history, and the third audit to land.
Rajveer Vadnal - @Rajveerx11
1 merged PR · 3 commits · first merged 2026-05-19
The Disparate Impact explainer (#14), covering the four-fifths rule and the legal threshold it sets under US employment law, landed alongside work on the AI Fair Recruitment audit files.
1 merged PR · 2 commits · first merged 2026-05-18
The SHAP Values explainer (#12) - how to see what actually drove a model's decision, and how to use that to catch bias.
Tanish Goyal - @TanishGoyal-Dev
1 merged PR · 2 commits · first merged 2026-05-19
The Equalized Odds explainer (#13) - the metric that catches a model treating two groups differently even when overall accuracy looks fine.
Aarav Saroliya - @Aarav1611
1 merged PR · 1 commit · first merged 2026-05-23
The first draft of the Calibration explainer (#26) - why a model can be equally accurate for everyone and still treat them unequally.
Ahmad Alguydi - @tomatotomata
1 merged PR · 1 commit · first merged 2026-07-31
The faircode profile --fail-under N CI gate (#116) - exit code 1 with the failing score on stderr when a dataset's representation score falls below the threshold, with report output kept on stdout. This is what makes the Profiler usable as a pipeline check rather than only a human-read report.
Anuj Kamdar - @anujkamdar
1 merged PR · 1 commit · first merged 2026-08-05
Fixed the site's theme toggle to respect the OS prefers-color-scheme setting (#143) - applied across every generated explainer page.
Kumar Mangalam - @ImMortaL0P
1 merged PR · 1 commit · first merged 2026-08-06
JSON edge-case coverage and clear parse-error messages on both engines (#175) - faircode/loaders_extra.py, assets/profiler-engine.js, and a shared parity script, so the CLI and the browser fail the same way on the same bad file.
1 merged PR · 1 commit · first merged 2026-08-19
Fixed CONTRIBUTING.md's pre-push trigger-path list, which had drifted from the actual regex in .pre-commit-config.yaml - assets/profiler-engine.js, assets/profiler-compare.js, and an audit's audit.yaml were all real trigger paths missing from the prose (#287, closing issue #285).
1 merged PR · 1 commit · first merged 2026-08-24
Dropped faircode/cli.py's hardcoded default=100 on --min-group-size, which had been the one threshold flag not deferring to profiler.MIN_GROUP_SIZE the way its four sibling flags already do (#312, closing issue #299).
Mahiro Hirakawa - @mahirhir
1 merged PR · 1 commit · first merged 2026-08-27
Added faircode/provenance.py: a provenance block (faircode_version, engine, a SHA-256 dataset
hash, resolved params, overrides) attached to --json exports at the export boundary rather than
inside profile()/compare(), so tests/test_js_parity.py's == comparison of the two engines needs
no change (#330, relates to issue #327). Documented as
new SPEC.md section 10; --no-provenance restores the pre-existing export shape exactly.
Ayaan Kapoor - @Ayaan-20-11
1 merged PR · 1 commit · first merged 2026-08-28
Fixed scripts/render_terminal_png.py's hardcoded macOS-only font path
(/System/Library/Fonts/Menlo.ttc), which crashed with an opaque PIL OSError on any non-macOS
contributor's machine. Now resolves to the repo-bundled assets/fonts/IBMPlexMono-Regular.ttf,
the same font generate_og_images.py already uses for exactly this reason (#331, closing issue #323).
1 merged PR · 1 commit · first merged 2026-08-28
Added a guard against faircode profile --cross COLA,COLA (the same column crossed with itself),
matching the check the web profiler already had for this exact case: every off-diagonal cell in a
same-column crosstab is a tautological 0 that reads as a real representation gap but isn't one
(#337, closing issue #320).
Lovish Menaria - @lovishmenaria14-gif
2 merged PRs · 2 commits · first merged 2026-08-29
Added a provenance block to the web profiler's "Copy as JSON" export, mirroring the Python side's
shape (faircode_version, engine: "js", dataset_hash, params, overrides) via
crypto.subtle.digest (#339, closing issue #329).
Also fixed README.md's stale explainer.html repo-tree comment
(#340, closing issue #326).
Aaqibhafeez Khan - @Aaqibhafeezkhan
2 merged PRs · 2 commits · first merged 2026-09-09
Two one-line doc fixes, same day: corrected unsupervised-learning.md's "Benefits Denial - Audit
04" to "Audit 05" (#526, closing issue #520 -
Insurance Denial is Audit 04), and fixed index.html's Benchmark Harness callout citing "1.4%"
instead of the real 1.2% in-processing gap for COMPAS
(#527, closing issue #517).
1 merged PR · 1 commit · first merged 2026-08-30
Fixed index.html's roadmap grid, which still showed three already-published explainers (Race
Correction in Clinical Algorithms, The Obermeyer Case, Underdiagnosis Bias) as "coming soon" instead
of flipping their status to done when they actually shipped
(#356, closing issue #341).
Mansurshakh Japarov - @oxura
1 merged PR · 1 commit · first merged 2026-09-02
Fixed the MCP get_benchmark_results tool's missing-mirror error message, which blamed
paper/results-frozen/ and suggested a full re-freeze when the actual missing file was the
package-internal faircode/_results_frozen/ mirror - following the old message's advice risked an
unnecessary, citation-affecting re-freeze
(#408, closing issue #396).
1 merged PR · 1 commit · first merged 2026-09-03
Added mcp_server.py, _explainers/, and _results_frozen/ to README.md's faircode/ repo-tree,
which had never been updated since those files were added
(#411, closing issue #409).
1 merged PR · 1 commit · first merged 2026-09-03
faircode/strategies.py's strategy_features() silently fell through to a bare else for any
unrecognized strategy name, returning a plausible-but-wrong column set instead of erroring on a typo
like "in_procesing". Replaced it with an explicit membership check and a ValueError for anything
else, with new tests covering both a typo'd name and an empty string
(#425, closing issue #418).
1 merged PR · 1 commit · first merged 2026-09-04
Set out to fix faircode/loaders_extra.py silently mis-parsing index-oriented JSON as
columns-oriented (transposed, no error) (#410,
closing issue #405). Review after merge found the submitted heuristic - "larger dimension implies
the index; break ties on square shapes by type-homogeneity" - 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 part of the PR): the heuristic was replaced with a hard failure - any ambiguous
dict-of-dicts JSON now raises a clear error pointing at orient="split" instead of guessing.
1 merged PR · 1 commit · first merged 2026-09-07
Fixed scripts/render_terminal_png.py leaking a raw FileNotFoundError traceback for a missing
input file instead of failing cleanly (#476, closing
issue #460). The except FileNotFoundError only covered a missing/moved path; broadened directly
(not part of the PR) to except OSError after finding a directory path still leaked a traceback via
the sibling IsADirectoryError, and added the test coverage the PR itself didn't include.
A cross-cut of the same work, for anyone looking for who to ask about what.
These accounts appear in the contributors graph but are not people. They are listed for completeness and excluded from the avatar grid above.
| Bot | Merged PRs | What it does |
|---|---|---|
| dependabot | 24 | Dependency and GitHub Actions version bumps, configured in .github/dependabot.yml, including requirements-lock.txt - no longer under any special freeze handling, see CLAUDE.md. |
| vercel | 2 | Web Analytics and Speed Insights wiring for the deployed site. |
Some contributors commit under a local user.name that differs from their GitHub handle. This table
makes git shortlog -sne reconcilable with the list above.
| GitHub handle | Git author name(s) recorded in history |
|---|---|
| @yakew7 | Yash Kewlani, yakew7_ |
| @ahmdkaml | ahmdkaml, Ahmed Mohamed Abdelhady Kamel (احمد محمد عبدالهادي كامل) |
| @cannotdoit13 | Anjali Tiwari |
| @AnayDhawan | unknown |
| @Rajveerx11 | Rajveer Vadnal |
| @Shreyash0712 | Shreyash0712, Shreyash Swami |
| @Swastik-Yadav | Swastik-Yadav, CHiGO |
| @ImMortaL0P | Mangalam |
| @tomatotomata | ahmadalguydi |
| @Aarav1611 | Aarav Saroliya |
| @anujkamdar | Anuj Kamdar |
| @evanjain-dot | evanjain-dot |
| @YashKewlani1 | Aarav Sharma |
| @TanishGoyal-Dev | TanishGoyal-Dev |
| @shwetagupta1234 | shwetagupta1234 |
| @Circout-sudo | Yojeet |
| @Ayaan-20-11 | Ayaan Kapoor - commit email is a local hostname (ayaankapoor@Mac.lan), not linked to the GitHub account, so #331 doesn't register in the repo's contributors graph despite being a real merged PR |
| @lovishmenaria14-gif | Lovish Menaria |
| @be-student | eunwoo song |
If your name is wrong, missing, or you would rather be listed under a different handle, or not listed at all, open an issue or a one-line PR against this file. It gets merged, no questions asked.
- Read CONTRIBUTING.md first. It covers the audit folder layout, the two required scripts, proxy-variable analysis, screenshots, dataset requirements, explainer structure, style rules, and what will not be merged.
- Open an issue (or comment on an existing one) before starting anything substantial, so two people don't write the same explainer.
- Open the PR. Add yourself to this file in the same PR - a new entry under Contributors in first-merged order, with links to the files you touched.
- When it merges, you're in.
Read CLAUDE.md before you start for the current project policy. The earlier paper
freeze has lifted - audits, the faircode/ analysis core, results/, and everything else are all
open to normal contribution. paper/results-frozen/ is kept as a historical reference snapshot, not
actively protected.
- The avatar grid at the top of this file and in the README is generated from GitHub's contributors graph and can lag a merged PR by a few days.
CITATION.cffis the citation record for the project. If your contribution is cited by the paper, that's where authorship is recorded.CHANGELOG.mdrecords the change itself, release by release.METRICS.mdtracks contributor count among the project's weekly traction numbers.- First-time contributors get an automated greeting via
first.interaction.yml.
Everyone listed here, and everyone who wants to be, is held to CODE_OF_CONDUCT.md. Report concerns to yashkewlani2020@gmail.com.
Fair Code is MIT-licensed. Every dataset used is publicly available. thefaircode.xyz