{"id":51466331,"url":"https://github.com/serkanaltuntas/gitctx","last_synced_at":"2026-07-06T11:32:02.406Z","repository":{"id":365552015,"uuid":"1272586538","full_name":"serkanaltuntas/gitctx","owner":"serkanaltuntas","description":"GCTX — open, reproducible SLM trained to read Git diffs and write Conventional Commit messages. No closed-model outputs. Local-first.","archived":false,"fork":false,"pushed_at":"2026-06-28T18:58:13.000Z","size":239,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-28T20:23:29.808Z","etag":null,"topics":["commit-messages","commit-messages-generator","conventional-commits","git","small-language-model"],"latest_commit_sha":null,"homepage":"https://serkan.ai/projects/gitctx/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/serkanaltuntas.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":"NOTICE","maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-06-17T18:52:29.000Z","updated_at":"2026-06-28T18:58:16.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/serkanaltuntas/gitctx","commit_stats":null,"previous_names":["serkanaltuntas/gitctx"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/serkanaltuntas/gitctx","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/serkanaltuntas%2Fgitctx","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/serkanaltuntas%2Fgitctx/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/serkanaltuntas%2Fgitctx/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/serkanaltuntas%2Fgitctx/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/serkanaltuntas","download_url":"https://codeload.github.com/serkanaltuntas/gitctx/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/serkanaltuntas%2Fgitctx/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35189713,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-06T02:00:07.184Z","response_time":106,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["commit-messages","commit-messages-generator","conventional-commits","git","small-language-model"],"created_at":"2026-07-06T11:32:02.245Z","updated_at":"2026-07-06T11:32:02.364Z","avatar_url":"https://github.com/serkanaltuntas.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# gitctx\n\ngitctx is a model-first open-source project for generating high-quality\nConventional Commit messages from Git context.\n\n## Canonical resource\n\n- **Preferred name:** GCTX\n- **Repository / CLI name:** gitctx\n- **Canonical resource page:** https://serkan.ai/projects/gitctx/\n- **Short definition:** GCTX is a from-scratch small language model family for understanding Git diffs and writing Conventional Commit messages.\n- **Status:** Building; there is no useful public model release yet.\n- **License:** Code and documentation are Apache-2.0; model artifacts, generated labels, and datasets will carry release-specific licenses and cards after upstream license review.\n\nThe goal is not just to publish model weights. The project aims to publish the\nsource code, data-generation recipes, teacher-labeling prompts and provenance,\ntraining configuration, evaluation harness, model artifacts, and release cards\nneeded for independent inspection and reproduction.\n\n## Status\n\nThe project has a private `gctx1-strict` proof artifact that passes the GCTX-1\ndata-readiness gate: 10,299 `DEV` training records, 1,627 locked `REPORT`\nrecords, and 1,295 reserved `HELD_OUT` candidates. The public repository\ncontains the source code, schemas, prompts, runbooks, aggregate data cards, and\noutput-use decisions needed to inspect the recipe.\n\nThere is no useful public model release yet. The CLI shell comes later, after\nmodel behavior is measurable.\n\n## Principles\n\n- Local-first by default.\n- No automatic commits or pushes.\n- No network calls unless the user explicitly opts in.\n- No training on closed-model outputs.\n- Distillation only from models whose licenses allow generated outputs to train\n  downstream models.\n- Public data only when the source license and redistribution rights allow it.\n- Honest release language: distinguish open weights, source available,\n  reproducible open recipe, and full open-source releases.\n\n## Planned Product Shape\n\nEventual commands:\n\n```bash\ngitctx suggest\ngitctx inspect\ngitctx hook install\ngitctx doctor\n```\n\nThe first useful public artifact should be a model and evaluation report, not a\nthin CLI wrapper.\n\n## Roadmap\n\n1. Define the evaluation schema, parser, and scorer.\n2. Build fixture repositories and public eval splits.\n3. Extract diffs from permissively licensed repositories.\n4. Generate teacher labels with license-approved local/open models.\n5. Train a small proof model.\n6. Publish model, data, and eval cards.\n7. Package the CLI around a useful local model.\n\n## Development\n\nRun the current dependency-free test suite:\n\n```bash\nPYTHONPATH=src python3 -m unittest discover -s tests\n```\n\nRun the first deterministic fixture evaluation:\n\n```bash\nPYTHONPATH=src python3 -m gitctx.eval fixtures/dev/commit_message_cases.jsonl\n```\n\nRun local source-diff smoke extraction:\n\n```bash\nmake smoke\nmake smoke-check\nmake smoke-finalize\nmake pilot-source PILOT_RECORDS=250 PILOT_PER_REPO_LIMIT=100\nmake pilot-source-check\nmake pilot-source-finalize\nmake pilot-review-template REVIEWER=\"reviewer@example.com\"\nmake pilot-review-check\nmake smoke-review-template REVIEWER=\"reviewer@example.com\"\nmake smoke-review-check\nmake teacher-inputs\nmake teacher-input-check\nmake pilot-teacher-inputs\nmake pilot-teacher-input-check\nmake teacher-generate\nmake teacher-generate-check\nmake pilot-teacher-generate\nmake pilot-teacher-generate-check\nmake generated-review-template REVIEWER=\"reviewer@example.com\"\nmake generated-review-check\nmake pilot-generated-review-template REVIEWER=\"reviewer@example.com\"\nmake pilot-generated-review-check\nmake pilot-train-artifact\nmake pilot-train-artifact-check\nmake pilot-eval-baseline\nmake artifact-split-inspection PILOT_ARTIFACT=next DATA_SPLIT=REPORT\nmake training-smoke PILOT_ARTIFACT=next\nmake gctx1-proof-config-check\nmake gctx1-proof-readiness\nmake gctx1-tokenizer\nmake gctx1-tokenizer-check\nmake gctx1-proof-handoff\nmake gctx1-proof-handoff-check\nmake gctx1-proof-train-dry-run\nmake gctx1-proof-train-dry-run-check\nmake gctx1-proof-sequences\nmake gctx1-proof-sequences-check\nmake gctx1-proof-sft-smoke\nmake gctx1-proof-sft-smoke-check\nmake gctx1-proof-trainer-job\nmake gctx1-proof-trainer-job-check\nuv venv .venv\nuv pip install -e .\nuv pip install torch\nmake gctx1-proof-lm-train PYTHON=\".venv/bin/python\" GITCTX_DATA_DIR=\"../gitctx-data\" GCTX1_PROOF_LM_MAX_RECORDS=32 GCTX1_PROOF_LM_MAX_STEPS=8\nmake gctx1-proof-lm-train-check PYTHON=\".venv/bin/python\" GITCTX_DATA_DIR=\"../gitctx-data\"\nmake gctx1-proof-smoke\nmake gctx1-proof-smoke-check\n```\n\nFor non-smoke artifacts that contain `REPORT` or `HELD_OUT` candidates, pass a\nprelocked split plan:\n\n```bash\nmake pilot-source SPLIT_PLAN=\"/path/to/split-plan.json\"\n```\n\nSee:\n\n- [docs/model-plan.md](docs/model-plan.md)\n- [configs/gctx1-proof-model.v0.json](configs/gctx1-proof-model.v0.json)\n- [docs/data-and-distillation.md](docs/data-and-distillation.md)\n- [docs/source-manifest.md](docs/source-manifest.md)\n- [docs/source-diff-review.md](docs/source-diff-review.md)\n- [docs/teacher-inputs.md](docs/teacher-inputs.md)\n- [docs/training-artifacts.md](docs/training-artifacts.md)\n- [docs/data-cards/pilot-v0.md](docs/data-cards/pilot-v0.md)\n- [docs/data-cards/next-v0.md](docs/data-cards/next-v0.md)\n- [docs/data-cards/gctx1-v0.md](docs/data-cards/gctx1-v0.md)\n- [docs/output-use-decisions/pilot-v0.md](docs/output-use-decisions/pilot-v0.md)\n- [docs/output-use-decisions/next-v0.md](docs/output-use-decisions/next-v0.md)\n- [docs/output-use-decisions/gctx1-v0.md](docs/output-use-decisions/gctx1-v0.md)\n- [schemas/generated-label-review.schema.json](schemas/generated-label-review.schema.json)\n- [schemas/training-example.schema.json](schemas/training-example.schema.json)\n- [docs/local-worker-runbook.md](docs/local-worker-runbook.md)\n- [docs/teacher-model-shortlist.md](docs/teacher-model-shortlist.md)\n- [docs/teacher-audit-plan.md](docs/teacher-audit-plan.md)\n- [docs/teacher-decisions/ollama-qwen2.5-coder-7b-smoke.md](docs/teacher-decisions/ollama-qwen2.5-coder-7b-smoke.md)\n- [docs/evaluation.md](docs/evaluation.md)\n- [docs/split-contract.md](docs/split-contract.md)\n- [docs/open-source-standard.md](docs/open-source-standard.md)\n- [docs/release-checklist.md](docs/release-checklist.md)\n\n## License\n\nCode and documentation in this repository are licensed under the Apache License\n2.0 unless a file states otherwise. Model artifacts, generated labels, and\ndatasets will carry release-specific licenses and cards after upstream license\nreview.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fserkanaltuntas%2Fgitctx","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fserkanaltuntas%2Fgitctx","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fserkanaltuntas%2Fgitctx/lists"}