# REKCARC-TSC-UHT, a course archive whose build step writes into its own source tree

> REKCARC-TSC-UHT collects course guidance for one Chinese university department in folders named by academic term, published under CC-BY-SA-4.0 and rendered by Sphinx, and its own build files carry a generator side effect, an inherited package name, and a licence link that contradicts the licence text.

**PKUanonym/REKCARC-TSC-UHT** — 清华大学计算机系课程攻略 Guidance for courses in Department of Computer Science and Technology, Tsinghua University

- Repository: https://github.com/PKUanonym/REKCARC-TSC-UHT
- Website: https://rekcarc-tsc-uht.readthedocs.io/
- Stars: 37,651 · Forks: 7,856
- Language: HTML
- License: CC-BY-SA-4.0
- Published: 2026-09-10 · Updated: 2026-09-10 · Language: en
- Canonical page: https://hysenlabs.com/projects/pkuanonym-rekcarc-tsc-uht

## The tree is organised by term, so one course means many folders

The top level has no course index. It has academic terms: 大一上, 大一下, 大一小学期, 大二上, 大二下, 大二小学期, 大三上, 大三下, 大三小学期, 大四上, and 研究生 for graduate material. There is no senior spring folder in the listing, which tells you the archive follows the academic calendar as the department lays it out rather than a complete four year grid.

Three markdown files sit alongside them and carry most of the navigation: 收录内容.md for what the project has collected, 参考书目.md for the reference books of most courses, and 贡献方法.md for how to contribute. The application code lives in source/, and the build files, Makefile, make.bat, and setup.py, sit at the root next to a LICENSE file.

The consequence for a reader is that finding one course means opening term folders until you hit it, or trusting 收录内容.md to be current. There is no search, no tag, and no per course entry point at the top level.

## setup.py runs a generator before it declares a package

The installer is thirteen lines and does something unusual at the top:

```python
subprocess.check_call('python3 ./source/gen.py --root . --output source'.split())
```

That call executes when setup.py runs, not when a build step asks for it, and it writes into source/, the same directory Sphinx reads. So the generated content and the committed content share a folder, and a plain install of this project has a side effect that produces files.

Two smaller details in the same file matter more than they look. The distribution is named thu-cst-cracker, the predecessor project this archive was forked from, and the description is the four words frontend generator. So the package identity, if anyone ever installs it, does not tell you which repository it came from. The only declared dependency is sphinx-markdown-tables.

## Any make target you mistype becomes a Sphinx build mode

The Makefile calls itself minimal for Sphinx documentation and behaves that way. It defines SPHINXOPTS and SPHINXBUILD, which defaults to sphinx-build, points SOURCEDIR at source and BUILDDIR at build, and puts a help target first so a bare make prints help instead of building.

The catch-all is the interesting rule:

```
%: Makefile
	@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
```

Because every unmatched target is forwarded to Sphinx in make mode, a mistyped target such as make hltp does not fail. It becomes a request for a build mode that does not exist, and the error you get comes from Sphinx rather than from make. For a maintainer this is worth knowing before hunting a build problem in the wrong place, and make.bat exists so the same commands work on Windows.

## The licence text and the licence link do not match

The project is filed under CC-BY-SA-4.0, and the README line also names the Creative Commons BY-SA 4.0 International licence in words. The hyperlink on that same line points somewhere else: it goes to creativecommons.org/licenses/licenses/by-nc-sa/4.0/deed.zh, the non-commercial variant, in its Chinese translation.

Two clauses follow in the same paragraph. Copyright in the other parts belongs to their respective authors, and everything is offered for reference, with the reader asked to judge its applicability themselves.

So the file gives you three different signals about what you may do: a metadata identifier without non-commercial terms, prose naming a share-alike licence, and a link to a non-commercial deed. For anyone reusing or mirroring this content, that is not a detail to gloss over. The stated licence and the deed a reader is sent to disagree, and the paragraph that hedges with please judge for yourself is not a grant.

## No git-lfs means a large file simply fails the commit

One instruction in the README is a hard technical limit: the repository does not enable git-lfs, so a single file over 100M will not commit. It is stated as a fact of the setup rather than a request, and the consequence is that course material which is naturally large, scanned lecture notes, slide decks, recorded material, dataset exports, has no home in this repository.

The same paragraph of the README offers the workarounds a reader needs. To get a single folder, copy the folder's own URL and paste it into DownGit, then choose download. And students at Tsinghua are pointed to a mirror at git.tsinghua.edu.cn/pkuanonym/REKCARC-TSC-UHT, which the README says saves a considerable amount of traffic.

For a contributor, the practical sequence is: respect the ceiling, use the mirror if you are on campus, and expect to discover the 100M rule by having a commit rejected rather than by reading a contribution guide first.

## The appendix republishes the rules that sanction plagiarism

The last section of the file is an appendix containing the implementation rules for Tsinghua University student disciplinary action, chapter six on academic misconduct and violations of study discipline. Article twenty-one of that chapter sets out the cases that earn a sanction of warning or above and probation or below: serious plagiarism in course assignments, serious plagiarism in lab reports or falsification of experimental data, serious plagiarism in midterm or final course papers, and other serious falsification during the course of study.

This is worth reading plainly rather than skipping. The project is course guidance, and its own contribution invitation names course selection and exam strategy as welcome contributions. So the archive publishes study advice and, in the same file, the regulation under which copying coursework is sanctionable. That is not a contradiction in the project, it is the reason the project is careful: the preface says the archive inherited from Trinkle23897's thu-cst-cracker with infringing content removed, and asks readers to report anything infringing in issues.

The consequence for a user is simple. Treat these pages as study advice, and do not mistake a course folder for a source of text to submit.

## Anonymous contributions go to an email address, and the site is on Read the Docs

The contribution section is short and specific: issues, pull requests, corrections, materials, and course selection or exam strategy are all welcome, and the project says that attention, maintenance and contributions from everyone are what keep the guide going. A list of around thirty five contributors is named, ending with thanks to the reader in front of the computer.

One channel is unusual. If you want to contribute anonymously, the README asks you to email PKUanonymous@qq.com with REKCARC-TSC-UHT in the subject, which is consistent with a repository name of PKUanonym for material about coursework. The method itself is documented separately in 贡献方法.md.

Delivery is a Sphinx site on Read the Docs at rekcarc-tsc-uht.readthedocs.io, and the project was inspired by Zhejiang University's zju-icicles. The default branch is master, the primary language of the tree is HTML, there are no GitHub releases, and the last push is dated 2026-09-17, so the archive is current but not versioned.

## Conclusion

The archive fits a student who wants course level material organised by term and can read Chinese, and it fits a contributor who wants to add a file to a folder. It is a poor fit if you need a licence you can rely on for reuse, a build with no side effects, or a per-course index at the top level. Before you reuse anything, resolve the licence discrepancy between the stated CC BY-SA 4.0 and the non-commercial deed it links to, read the appendix on academic misconduct before using exam material, and expect to run the generator yourself before Sphinx will build.

## FAQ

### What is REKCARC-TSC-UHT and who is it for?

It is a course guidance archive for the Department of Computer Science and Technology at Tsinghua University, published under CC-BY-SA-4.0 and rendered as a Sphinx site on Read the Docs. Its folders are organised by academic term, from 大一上 through 大四上 plus 研究生, and the README invites contributions about course selection and exam strategy.

### How do I build the site from this repository?

The Makefile is a minimal Sphinx wrapper with sources in source/ and output in build/, and make.bat is present for Windows. Setup is not neutral: setup.py runs python3 ./source/gen.py --root . --output source before it declares anything, which writes into the same source tree, and the distribution name there is still thu-cst-cracker.

### Can I reuse the content from REKCARC-TSC-UHT commercially?

The repository does not settle it. The metadata records CC-BY-SA-4.0 and the README names Creative Commons BY-SA 4.0 in words, but the hyperlink on that line points at the by-nc-sa deed, and the text adds that other parts remain with their own authors and that the material is for reference only.

## Sources

- [Issues](https://github.com/PKUanonym/REKCARC-TSC-UHT/issues)
- [License: CC-BY-SA-4.0](https://github.com/PKUanonym/REKCARC-TSC-UHT/blob/master/LICENSE)
- [PKUanonym/REKCARC-TSC-UHT on GitHub](https://github.com/PKUanonym/REKCARC-TSC-UHT)
- [Project website](https://rekcarc-tsc-uht.readthedocs.io/)
- [README](https://github.com/PKUanonym/REKCARC-TSC-UHT/blob/master/README.md)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/pkuanonym-rekcarc-tsc-uht
