{
"harness_version": "1.0",
"active_challenge": {
"id": "git-python",
"name": "Build your own Git (Python)",
"language": "python3",
"tutorial": "https://wyag.thb.lt/",
"alt_tutorials": [
"https://benhoyt.com/writings/pygit/",
"https://www.leshenko.net/p/ugit/"
],
"workspace": "workspace/git-python",
"verify": "./init.sh"
},
"features": [
{
"id": "init",
"name": "init",
"description": "`init` โ create the .git directory structure (objects, refs, HEAD).",
"status": "todo",
"dependencies": [],
"done_criteria": "Running the tool's `init` in an empty dir creates .git/{objects,refs} and HEAD pointing at refs/heads/main.",
"verify": "python3 -m pytest tests/test_init.py -q",
"evidence": ""
},
{
"id": "hash-object",
"name": "hash-object",
"description": "`hash-object` โ write a blob object and return its SHA-1.",
"status": "todo",
"dependencies": ["init"],
"done_criteria": "SHA-1 matches real `git hash-object` for the same input; object is zlib-compressed at .git/objects/xx/yyy.",
"verify": "python3 -m pytest tests/test_hash_object.py -q",
"evidence": ""
},
{
"id": "cat-file",
"name": "cat-file",
"description": "`cat-file` โ read and inflate an object by SHA.",
"status": "todo",
"dependencies": ["hash-object"],
"done_criteria": "`cat-file -p <sha>` prints the original blob content byte-for-byte.",
"verify": "python3 -m pytest tests/test_cat_file.py -q",
"evidence": ""
},
{
"id": "write-tree",
"name": "write-tree",
"description": "`write-tree` โ serialize the working directory into a tree object.",
"status": "todo",
"dependencies": ["cat-file"],
"done_criteria": "Tree SHA matches real `git write-tree` for an identical directory layout.",
"verify": "python3 -m pytest tests/test_write_tree.py -q",
"evidence": ""
},
{
"id": "commit-tree",
"name": "commit-tree",
"description": "`commit-tree` โ create a commit object from a tree SHA.",
"status": "todo",
"dependencies": ["write-tree"],
"done_criteria": "Commit object parses with real `git cat-file -p`; has tree, author, committer, message.",
"verify": "python3 -m pytest tests/test_commit_tree.py -q",
"evidence": ""
},
{
"id": "log",
"name": "log",
"description": "`log` โ walk commit parents from HEAD, newest first.",
"status": "todo",
"dependencies": ["commit-tree"],
"done_criteria": "Given a chain of commits, `log` prints them newest-first with SHAs and messages.",
"verify": "python3 -m pytest tests/test_log.py -q",
"evidence": ""
}
]
}