syft-pr-quickfix
Skill10k starsChanged 6 days agoApache-2.0View on GitHub
Check a syft pull request for ten design problems (code paths for cases that never happen, duplicated state, old concepts under new names, half-built objects, the same job done in two places, returning False/None instead of raising, names that do not match the code, vague names, inline values with no name, and nested dict types that do not say what maps to what) and print a short numbered list of easy fixes, with harder findings in an appendix, so the user can say "fix 2 and 5". Takes a PR number or URL. Use when the user says "quickfix PR 1234", "check this PR for quick fixes", or "what should be cleaned up in <PR link>".
We split this skill into the rules it gives an agent
7 rules. About 0 are common, 4 are distinctive, and 3 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈4
Distinctive · estimate
This author's own choices. Worth a look.
3
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 9
Read the code a PR adds or changes and find the ten problems listed under Checks.
- Very specific: line 26
Read the source files in diff-index.txt.
- Very specific: line 32
When you are unsure whether a finding is worth reporting, compare it with the good and bad findings in examples.md, next to this file.
- Distinctive: line 34
Write the report, save it, and print it.
- Distinctive: line 100
Put the finding with the most impact first.
- Very specific: line 109
Put only easy fixes in the main list.
- Distinctive: line 113
When nothing is wrong, print one line that says so.
≈ “Common” is an estimate: at least 1 in 5 of the 308,232 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Check a syft PR for quick fixes
Read the code a PR adds or changes and find the ten problems listed under Checks. Print
a short numbered list, so the user can ask to fix single findings by their number. This skill does
not hunt for bugs (that is /code-review) and does not summarise the PR (that is syft-pr-review).
Input
A PR number or URL. If none was given, ask for it.
Steps
Fetch the PR with the prefetch script of the
syft-pr-reviewskill. It writes the diff, split per file, to/tmp/pr-<N>/:./.claude/skills/syft-pr-review/prefetch.sh <N>- Read the source files in
diff-index.txt. Skip the files infiles-skippable.txtand the tests, unless a test shows that a case really happens. - Go through the checks below for each file. Only flag lines the PR added or changed.
- Confirm each finding in the code before you write it down. For example, grep the callers before you say a case never happens, and grep the readers before you say two fields hold the same state. Drop a finding you cannot confirm.
- When you are unsure whether a finding is worth reporting, compare it with the good and bad
findings in
examples.md, next to this file. - Write the report, save it, and print it.
Checks
Each check has a short tag. The tag goes in front of every finding.
unused-case— the code handles a case that never happens or is not worth supporting, such as a parameter no caller passes, and that case makes the code harder to read.same-state— two variables or fields hold the same fact, so they can drift apart. A cache that the code keeps in step on purpose is fine.old-concept— a new name for something that already has a name in the codebase.half-built— the code creates an object with missing values, then fills them in later. It should gather every value first. Report this only when the fix is easy, as defined below.done-twice— two places do the same job, so a change to that job has to be made twice. Report this only when the job takes more than one line and the fix is easy, as defined below. A repeated one-liner is not a finding.silent-fail— a function returnsFalseorNoneon failure, where it should raise.name-mismatch— a name says one thing and the code does another. For example,upload_versioninfo()takes aPeerInfoobject.vague-name— a name does not say what kind of thing it holds, takes or returns. This includes a bare verb such asdeliver(), and a generic word such asstate,dataorinfothat does not say whose:_create_current_state_event()should say file state.unnamed-value— a value built inline inside another call, so the reader cannot tell what it is, such asfiles.update(dict.fromkeys(unsent, UNSENT_HASH)). Fix: a named variable. A call whose name says what it returns, such asself._accepted_changes(...), is fine inline.unlabelled-mapping— a nested type such asdict[str, dict[str, str]]does not say what its keys and values are. Fix: say it in the docstring, and add a one-line comment such as# peer email -> {path: hash}where the value is built or declared.
Easy fixes
The user wants to apply the main list without reviewing each fix closely. So a fix is easy only when all of these hold:
- It changes one function or a few lines, plus the places that call or read what it renames or deletes.
- It needs no design choice. There is one obvious way to do it.
- It keeps the behaviour the PR wants. It deletes, renames, merges or raises, and nothing more.
A finding whose fix is not easy goes to the appendix of the report, not to the main list.
Report
Save the report to koen/reviews/<N>/quickfix.md when the git-ignored koen/ folder exists.
Otherwise save it to reviews/<N>/quickfix.md, and tell the user that the file is untracked. Then
print the report in full, because it is short.
# PR <N> quick fixes — <title>
1. `same-state` · [file.py:<line>](cursor://file/abs/repo/path/file.py:<line>) `Class.method()`
`self.peer_version` and `self.version_info.version` both hold the peer's version.
Fix: drop `peer_version` and read `version_info.version`.
2. `silent-fail` · [file.py:<line>](cursor://file/abs/repo/path/file.py:<line>) `file.py: load_peer()`
`load_peer()` returns `None` when the peer file is missing, and all three callers
then fail later on `None.email`.
Fix: raise `PeerNotFoundError` in `load_peer()`.
## Appendix — needs a closer look
A1. `unused-case` · [file.py:<line>](cursor://file/abs/repo/path/file.py:<line>) `Syncer.push()`
The `batch=` branch has no caller, but removing it changes how `push()` splits work.
Fix: drop `batch=` and send one message per change.- Number the findings 1, 2, 3, and keep the numbers stable: the user refers to them by number.
- Put the finding with the most impact first. Put fixes that only change a docstring or comment after the fixes that change code.
- Each finding has three parts: the tag and the place, what is wrong, and the fix. Keep each part to one or two lines.
- Make the place a link that opens Cursor at the line:
[file.py:<line>](cursor://file<absolute path>:<line>). Then name it in full:Class.method()for a method,file.py: function()for a plain function. - Say the problem in plain words. Name both things when two things are involved: both fields, both places, or the name and what the code really takes.
- Make the fix concrete enough to apply without asking: name what to delete, rename, merge or raise.
- Put only easy fixes in the main list. Put every other finding under
## Appendix — needs a closer look, numbered A1, A2, A3, and say in the finding why the fix is not easy. - Give at most 15 findings in the main list and 5 in the appendix. When there are more, keep the ones with the most impact, and say how many you left out.
- When nothing is wrong, print one line that says so.
Finally
Offer to apply findings by number, for example "fix 1 and 3". If the user disagrees with a
finding, or names a problem the report missed, offer to feed that back with the
syft-pr-quickfix-iterate skill.
Trending
Quiet this year.about the whole repository
Who's talking about OpenMined/PySyft
- A Hacker News story“Jupyter Notebook Tutorial – Privacy-Preserving Deep Learning in PyTorch”Hacker News · Dec 4, 2018 · 218 points
- A Hacker News story“Show HN: Encrypted Deep Learning in PyTorch”Hacker News · Oct 23, 2018 · 37 points
- A Hacker News story“Beginner Tutorial: Privacy Preserving, Decentralized Deep Learning in PyTorch”Hacker News · Nov 22, 2018 · 11 points
- udacity/private-ai“Modification in readme for pysyft installation”GitHub · May 30, 2019 · 8 reactions
- protocolbuffers/protobuf“Protobufs creation is slow when using nested objects compared to using bytes”GitHub · May 5, 2021 · 3 reactions
The biggest 5 of 62 mentions linking to the repository that our crawl found. Each line is their own headline.
See all 62
Talked about on GitHub, Hacker News, Stack Overflow and the web (62 times).
On GitHub · 50
- May 30, 2019Modification in readme for pysyft installation — udacity/private-ai8 reactions
- May 5, 2021Protobufs creation is slow when using nested objects compared to using bytes — protocolbuffers/protobuf3 reactions · 3 comments
- May 16, 2019PySyft Integration — tf-encrypted/tf-encrypted3 reactions · 1 comment
- Oct 18, 2021FOI: OpenMined for federated data analysis — datalad/datalad2 reactions · 1 comment
- Apr 29, 2021Add implementation of Max / Argmax — OpenMined/SyMPC2 reactions
45 more on GitHub
- Apr 18, 2020Jupyter Notebooks examples and tutorials to not work with docker-compose — OpenMined/PyGrid-deprecated---see-PySyft-2 reactions · 15 comments
- Apr 4, 2020Add Sentiment Classifier Training Usecase — OpenMined/SyferText2 reactions · 1 comment
- Oct 13, 2019Relay setup.py logic to a setup.cfg — OpenMined/PyGrid-deprecated---see-PySyft-2 reactions · 3 comments
- Jul 5, 2022ERROR: syft from git+http://github.com/OpenMined/PySyft@dev#egg=syft does not appear to be a Python project: neither 'setup.py' nor 'pyproject.toml' found. — OpenMined/courses1 reaction · 3 comments
- Jun 7, 2021poetry install at `PyGrid/apps/domain` does not work... — OpenMined/PyGrid-deprecated---see-PySyft-1 reaction · 3 comments
- Jul 13, 2020Enforcing type checking in SyferText — OpenMined/SyferText1 reaction · 2 comments
- Mar 27, 2020Torchscript field in Plan — OpenMined/syft-proto1 reaction
- Mar 12, 2020PyGrid integration — OpenMined/syft.js1 reaction · 1 comment
- Feb 5, 2020Migrate PyGrid from Travis to Github Actions — OpenMined/PyGrid-deprecated---see-PySyft-1 reaction
- Feb 3, 2020Allow PyGrid to serve plan operations as either a list of individual commands (syft.js) or as TorchScript (Android and iOS) — OpenMined/PyGrid-deprecated---see-PySyft-1 reaction · 1 comment
- Feb 2, 2020Add "host_federated_training" method to PyGrid — OpenMined/PyGrid-deprecated---see-PySyft-1 reaction · 7 comments
- Dec 5, 2019(WIP) Add Protobuf schemas for existing PySyft messages and types — OpenMined/syft-proto1 reaction · 17 comments
- Jul 30, 2025docker.io/openmined/syft-backend — DaoCloud/public-image-mirror0 reactions · 1 comment
- Jan 7, 2025Daily Review: `OpenMined/PySyft` — hsiangjenli/star-to-review0 reactions
- Nov 5, 2024Bump syft from 0.9.3b1 to 0.9.3b2 — Smartappli/AIMER0 reactions · 1 comment
- Nov 1, 2024Add PySyft to rejection list — YunoHost/apps0 reactions · 4 comments
- Nov 1, 2024Bump syft from 0.9.2b7 to 0.9.3b1 — Smartappli/AIMER0 reactions · 1 comment
- Oct 30, 2024Bump syft from 0.9.2b7 to 0.9.2 — Smartappli/AIMER0 reactions · 2 comments
- Oct 16, 2024Bump syft from 0.9.2b5 to 0.9.2b7 — Smartappli/AIMER0 reactions
- Oct 14, 2024Bump syft from 0.9.2b5 to 0.9.2b6 — Smartappli/AIMER0 reactions · 1 comment
- Oct 7, 2024Bump syft from 0.9.2b2 to 0.9.2b5 — Smartappli/AIMER0 reactions · 1 comment
- Oct 4, 2024Bump syft from 0.9.2b2 to 0.9.2b4 — Smartappli/AIMER0 reactions · 2 comments
- Sep 16, 2024Bump syft from 0.9.2b2 to 0.9.2b3 — Smartappli/AIMER0 reactions · 2 comments
- Sep 16, 2024Bump syft from 0.9.2b2 to 0.9.2b3 — Smartappli/AIMER20 reactions · 3 comments
- Sep 9, 2024Bump syft from 0.9.2b1 to 0.9.2b2 — Smartappli/AIMER0 reactions · 1 comment
- Sep 9, 2024Bump syft from 0.9.2b1 to 0.9.2b2 — Smartappli/AIMER20 reactions · 3 comments
- Sep 5, 2024Bump syft from 0.9.1b10 to 0.9.2b1 — Smartappli/AIMER0 reactions · 1 comment
- Sep 4, 2024Bump syft from 0.9.1b10 to 0.9.1 — Smartappli/AIMER0 reactions · 2 comments
- Sep 3, 2024Bump syft from 0.9.1b8 to 0.9.1b10 — Smartappli/AIMER0 reactions · 1 comment
- Aug 26, 2024Bump syft from 0.9.1b5 to 0.9.1b6 — Smartappli/AIMER0 reactions · 1 comment
- Aug 20, 2024Bump syft from 0.9.1b4 to 0.9.1b5 — Smartappli/AIMER0 reactions · 1 comment
- Apr 2, 2024Bump syft from 0.8.5.post1 to 0.8.5.post2 — Smartappli/AIMER0 reactions · 1 comment
- Mar 29, 2024Bump syft from 0.8.5 to 0.8.5.post1 — Smartappli/AIMER0 reactions · 1 comment
- Mar 29, 2024Added OpenMined PySyft — google/season-of-docs0 reactions
- Mar 22, 2024Bump syft from 0.8.5b9 to 0.8.6b1 — Smartappli/AIMER0 reactions · 1 comment
- Mar 21, 2024Bump syft from 0.8.5b9 to 0.8.5b10 — Smartappli/AIMER0 reactions · 2 comments
- Mar 14, 2024Bump syft from 0.8.5b5 to 0.8.5b6 — Smartappli/AIMER0 reactions · 1 comment
- Mar 14, 2024Bump syft from 0.8.5b2 to 0.8.5b4 — Smartappli/AIMER0 reactions · 1 comment
- Mar 13, 2024Bump syft from 0.8.5b1 to 0.8.5b2 — Smartappli/AIMER0 reactions · 2 comments
- Feb 19, 2024Bump syft from 0.8.4b28 to 0.8.4b30 — Smartappli/AIMER0 reactions
- Feb 16, 2024Bump syft from 0.8.4b23 to 0.8.4b28 — Smartappli/AIMER0 reactions
- Feb 15, 2024Bump syft from 0.8.4b23 to 0.8.4b27 — Smartappli/AIMER0 reactions · 1 comment
- Feb 12, 2024Bump syft from 0.8.4b21 to 0.8.4b22 — Smartappli/AIMER0 reactions
- Feb 8, 2024Bump syft from 0.8.4b19 to 0.8.4b21 — Smartappli/AIMER0 reactions
- Feb 2, 2024Bump syft from 0.8.4b15 to 0.8.4b19 — Smartappli/AIMER0 reactions
On Hacker News · 6
- Dec 4, 2018Jupyter Notebook Tutorial – Privacy-Preserving Deep Learning in PyTorch218 points · 5 comments
- Oct 23, 2018Show HN: Encrypted Deep Learning in PyTorch37 points
- Nov 22, 2018Beginner Tutorial: Privacy Preserving, Decentralized Deep Learning in PyTorch11 points
- Feb 21, 2020Jupyter Tutorial – Privacy-Preserving Deep Learning in PyTorch – Now Translated2 points
- Nov 23, 2018PySyft Step-By-Step Tutorial2 points
1 more on Hacker News
- Oct 24, 2017OpenMined/PySyft: Encrypted Deep Learning Library2 points
On Stack Overflow · 3
- Feb 19, 2020Pysyft Federated learning, Error with Websockets1 vote
- Feb 13, 2020Pysyft Federated learning, Error with Websockets1 vote · 1 answer
- Mar 10, 2021Error Launching Blob Trigger function in Azure Functions expected str, bytes or os.PathLike object, not PosixPath0 votes · 1 answer
On the web · 3
- May 9, 2022FL use Pysyft 0.6.0 · Issue #6467 — google.com
- Dec 18, 2021Need credentials of PyGrid admin UI · Issue #6235 — google.com
- Sep 2, 2020How to run pysyft-notebook docker image with ... — google.com
In this repository2 other files it gives its agents.
- syft-pr-quickfix-iterateSkill
- syft-pr-reviewSkill
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
Reviews can't be read right now.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

