Path: blob/main/CONTRIBUTING.md
483 views
Contributing
Thanks for your interest in improving these materials. Here's how to help.
Reporting Issues
Open an issue if you find:
Wrong math or broken code in a notebook
A logical jump that's too big (our core goal is zero logical jumps)
Unclear explanations or missing context
Rust exercises that don't compile or have wrong expected values
Use the issue templates. Include the module number and file name.
Adding Content
The biggest areas that need help:
Break/Connect notebooks for modules that don't have them yet
Visualizations that make abstract concepts click
Rust exercises at different difficulty levels
Typo fixes and wording improvements
Style Guide
Every notebook follows these principles:
One concept per notebook. If you're tempted to cover two ideas, split it.
Concrete first. Start with Z_7, not abstract group G. Start with a 4-bit field, not GF(2^256).
No logical jumps. Every step must follow from the previous one. If a student has to pause and think "wait, where did that come from?", we failed.
Show, don't tell. Use SageMath code cells to demonstrate, then explain.
Exercises build, not test. Exercises should extend the concept, not quiz rote memory.
Break notebooks follow this structure:
Title and module tag
"Why This Matters" (1-2 paragraphs)
"The Scenario" with concrete small numbers
Step-by-step attack with SageMath code cells
Cost analysis
"The Fix" showing the secure choice
Exercises (2-3 variations)
Summary with key takeaways
Connect notebooks follow this structure:
Title and module tag
Introduction tracing module concepts to the real protocol
Concrete walkthrough with SageMath
Concept map table (Module concept -> Protocol application)
Summary
Testing Your Changes
Pull Requests
One module per PR when possible
Describe what you changed and why
If adding a notebook, mention which README section it fulfills
Run all code cells before submitting
Code of Conduct
Be kind, be patient, be helpful. These materials are for learners at all levels.