Five files were outside README / CLAUDE* / DOCS* / TODO*, and two were over the 250-line cap. Both gates now pass repo-wide. Renames: the two lowercase readme.md files, and three documents into DOCS-*. The AIS requirements doc split at its own boundary into functional (101) and non-functional (174). The WDWR report split into six numbered sections behind an index that keeps the original filename, 38-235 lines each; 753 lines of body plus the 18-line header account for all 771 original lines, so nothing was dropped. That WDWR file needed checking before splitting: it sits next to main.tex and main.pdf and looked like a conversion of them. It is not -- main.tex is project 25406 and the markdown is project 18402, a different document. So it is authored content and the split is real work, not churn on a build artifact. Filled the three empty READMEs and replaced ECOTE's, which was a stale copy of the root README still claiming the group projects were excluded -- they were merged in by subtree some time ago. EOPSY/lab1 turned out not to be the code-free directory the survey suggested: it has modify.sh and modify_examples.sh. The oddly-named empty files beside them are the exercise's OUTPUT, committed so the before/after state is visible, and its README now says so rather than leaving them looking like junk. CLAUDE.md follows the testsAndMisc structure. Writing it caught a nice one: the md-naming marker is a biconditional, so quoting the literal removal string in a non-TODO file fails the gate. The gate was right; the text is rephrased. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0172dj34FDpao6wsix8ZuCzE
4.6 KiB
WUT_Computer_Science
Archive of university coursework from Warsaw University of Technology. 44 course directories, 12 languages, ~28k lines of authored code plus the submitted reports, figures and datasets. It is an archive: the code is finished, and the value is that it still builds, runs and is readable.
Repository Layout
| Path | What it is |
|---|---|
Programming/ |
25 course dirs with real code (Python, C/C++, Java, TS/Angular, C#, Unity, MATLAB-adjacent). |
NotProgramming/ |
19 course dirs that are mostly LaTeX reports, PDFs and EDA schematics. Exceptions: ENUME (MATLAB), STUP/makieta (Angular), EDABA-LAB (SQL). |
gates/ |
Machine-readable gate inputs. vendored.txt is the source of truth for "not my code". |
scripts/ |
Repo-local gates. Shims that exec into ~/utils live here too. |
Two structural facts that surprise people:
Programming/PSD/zin3/third/andProgramming/psd_project/are the same services under different names, andWDWR/project/vsWDWR/projekt/,SDMvsSDM2, andEMISY/componentSchematic/vsEMISY/schematic/are likewise near-duplicates. They are not de-duplicated: each is a separate submitted deliverable, and merging them would rewrite the academic record.Programming/EOPSY/lab{3,4}/task*/work/is not student code. It is the extraction target ofmake setupfrom the tarballs in the siblingftp/. Verified byte-identical, 14/14 files. Do not edit or split it.
Git Workflow
Work directly on main; commit and push straight there.
./install.sh # deps + pre-commit hooks, then verifies and fails loudly
./run.sh check # the full local gate
./run.sh status # probe every course dir, regenerate DOCS-runnability.md
Never --no-verify. If a gate fails, fix the cause.
Development Workflow
- Confirm a change works by running the thing and reading its output, not by running tests. Tests come after.
git rm --cached, never baregit rm, when removing build output — it must stay on disk so a mis-classification is recoverable.- After touching
.gitignoreor.binary-allowlist, re-run:
It must print nothing. A file that is both tracked and ignored fails silently ongit ls-files | git check-ignore --stdin --no-indexgit add: not an error, the edit just never lands. This repo had 130 such files.
Code Conventions
Anything a hook already enforces is omitted here — read
.pre-commit-config.yaml for that list. What follows is what a linter cannot
check.
Everything
- Every file is at most 250 lines, source and prose alike, enforced by the
shared gate in
~/utils. There is deliberately no baseline and no allowlist: split the file. For a LaTeX report that means\input{}per section; for a markdown report, siblingDOCS-*.mdfiles behind an index. - Do not "fix" coursework to be better than it was submitted. Correct what is broken, keep what is merely old-fashioned. The archive should still show what was actually handed in.
Vendored content
gates/vendored.txt is the only place a path becomes exempt from lint,
coverage and the cap. Every entry carries a reason and how it was
verified — an unverified entry is a suppression wearing a costume. The list
is mirrored into ~/utils/file_length/_tables.py, [tool.ruff] exclude and
[tool.coverage.run] omit; edit the manifest, never a mirror.
Python
ruffruns withselect = ["ALL"]and mypy withstrict = true.- No
# noqa, no# type: ignore. A pre-commit hook rejects both outright. - Notebooks: outputs are stripped on commit, lint via
nbqa. Real logic belongs in a sibling importable module — a notebook cannot be covered.
LaTeX
Build output is ignored, not committed: .aux, .fls, .fdb_latexmk,
.xdv, -eps-converted-to.pdf and friends. The submitted .pdf is
committed, because it is the deliverable.
Shell
set -euo pipefail, quoted expansions, main "$@" last. Never embed another
language's logic inline — put it in its own file so that language's tooling
applies.
Key Files
| Path | Why it matters |
|---|---|
gates/vendored.txt |
What is not my code, and how each entry was verified. |
gates/coverage.tsv |
Per-directory coverage floors. Floors may only rise. |
.binary-allowlist |
Path-scoped: deliverables allowed under the two course trees, compiled output allowed nowhere. |
DOCS-runnability.md |
Per-course run status, recorded separately for local and ci. |
TODO-*.md |
Open decisions. Each carries the removal marker and is deleted when the work lands. |