upstream-rules
Skill0 starsChanged 11 days agoApache-2.0View on GitHub
The non-negotiable rules of the podman-desktop repository: SPDX headers, conventional commits with a package scope, Signed-off-by, schema regeneration, squashing without interactive rebase.
In this repository24 other files it gives its agents.
The file
We split this skill into the rules it gives an agent
3 rules. About 0 are common, 2 are distinctive, and 1 is very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈2
Distinctive · estimate
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 49
A new file's header carries the current year only: Do not copy a neighbor's year or a 2022-2024 range.
- Distinctive: line 52
If an assertion was wrong, it is fixed separately, so a reviewer can see which side was wrong.
- Distinctive: line 61
When this triggers on a commit or a new file, name the one or two rules that apply to what is happening and stop.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 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
Answer from ${CLAUDE_PLUGIN_ROOT}/knowledge/upstream-rules.md. State the rule and what happens
upstream when it is broken — a rule without its consequence reads as a
preference, and preferences get skipped under time pressure.
Everything below is checked against the repository rather than remembered. If
something is not in ${CLAUDE_PLUGIN_ROOT}/knowledge/upstream-rules.md, say that it is our own
discipline rather than upstream's; three of the four rules that file started
with turned out to be wrong when measured.
Rejected by a hook or by CI
- License header. The Red Hat Apache block with the SPDX line inside it.
A bare
// SPDX-License-Identifier: Apache-2.0is not the house format. Thepost-writehook offers the exact block to paste. - One
Signed-off-byper commit..husky/commit-msgappends it when missing and then rejects the commit if it appears twice. - Conventional commit type, from the list in
CONTRIBUTING.md. The scope is optional — say so plainly. Use one anyway, because it tells a reviewer which area they are being asked about, but never report a missing scope as a defect in somebody else's PR. - Regenerated schemas. Touching a schema means
pnpm generate:schemasand committing the result. A stale generated schema fails CI long after the change that caused it, usually inside someone else's PR. - Lint, format, typecheck, unit tests.
pnpm lint:check— there is nopnpm lint— andpnpm test:unit, because plainpnpm testdrags in e2e.
The one that surprises everybody once
Squash with git reset --soft <base> && git commit, not git rebase -i.
The commit-msg hook appends Signed-off-by to a message that already carries
one from the commits being squashed, then rejects the duplicate it just made.
The Bash hook refuses git rebase -i for this reason and says so.
Held to it by a reviewer, not by a machine
packages/extension-api/src/extension-api.d.tsis the public surface. Touching it makes the change a compatibility question — and a type that lives inpackages/maincan be declared there too, so location does not tell you.Steps to checkin the PR body, at any diff size. A reviewer should not have to work out how to verify the change.- Anything CI cannot judge — packaging, platform behavior, a manual check —
belongs in
Notes for reviewers, not in the commit you hope nobody reads. - A new file's header carries the current year only. Do not copy a
neighbor's year or a
2022-2024range. - Existing tests and their implementation are not changed in the same PR. If an assertion was wrong, it is fixed separately, so a reviewer can see which side was wrong.
The maintainer's wider review rule set (tests, Svelte 5, TypeScript, DI,
imports) is in ${CLAUDE_PLUGIN_ROOT}/knowledge/maintainer-rules.md. Point to it rather than
reciting it.
Do not turn this into a lecture
When this triggers on a commit or a new file, name the one or two rules that
apply to what is happening and stop. pdkit preflight checks all of it
mechanically before anything is pushed, so the value here is timing — catching a
missing header while the file is open — not coverage.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
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.

