Shikanime Org Commit
Commit in shikanime-labs/* / shikanime-studio/*. Repo-enforced hooks
(gitlint, commitlint, DCO) ALWAYS win over the defaults below — detect them per
repo, never assume.
When to Use
- Any commit in a shikanime-owned repo.
Prerequisites
- Working tree in target repo;
ghauthenticated. - Branches push to
origin(the cloned org repo). Local path may readshikanime-labswhile the gh remote isshikanime-studio(nix-containers) — trust the gh remote. - jj repos:
jj bookmark track <branch> --remote=originbefore any push.
Commit style (when no hook enforces otherwise)
- Code repos: plain English, imperative, capitalized title, no prefix, no
body. One trailer ALWAYS:
Co-authored-by: Automata <automata@shikanime.studio>. One logical fix per commit.- Good:
Force NFS v4.0 on RWX StorageClasses+ trailer. - Bad:
fix: force nfs v4.0(conventional prefix not used here).
- Good:
- Doc repos:
doc:prefix, else same shape. No(...)in titles/labels.
Squash / multi-commit hygiene
jj squash / gh pr merge --squash emit INTERNAL artifacts — strip before
commit/merge:
*bullet lines separating former descriptions.---------separators where descriptions overlapped. Final message = exactly one plain-English subject + the correct trailers:- Exactly ONE
Co-authored-by: Automata <automata@shikanime.studio>when agent-assisted. Never a selfCo-authored-by:or repeatedSigned-off-by:. Signed-off-by: <user>only where a hook/ruleset requires DCO.- Never rely on GitHub's auto-concatenation of branch commits — pass it clean:
gh pr merge <M> --repo <org>/<repo> --squash \
-m "<plain-English subject>" \
-m "$(cat <<'EOF'
<coherent body; no * bullets, no --------->
Co-authored-by: Automata <automata@shikanime.studio>
EOF
)"
Repo-enforced overrides (detect, then obey)
ls .gitlint .commitlintrc* commitlint.config.* 2>/dev/null
grep -rl "Signed-off-by" .github/ 2>/dev/null
manifests: gitlint enforces a body (B6 "body message is missing") and aSigned-off-by(CC1). A commit with both + noRelated:passes. Use full issue URLs — never bare#N/owner/repo#N(broken on GitHub):Related: https://github.com/<org>/<repo>/issues/N. 80-col wrap. Capitalized plain title, no prefix. Seereferences/example-commit.mdfor a filled example.- PR↔commit parity: the PR title equals the commit subject and the PR body restates the commit message; author the commit to carry full rationale.
- Any repo with
commitlint: follow its config.
Procedure
- Stage only the intended files.
- Commit; two
-mblocks = subject + trailer paragraph:
jj describe -m "<subject>" -m "Co-authored-by: Automata <automata@shikanime.studio>"
- Confirm the hook accepted it:
jj log -1.
Push / landing
- Push to
origin; open PRs from--head <org>:<branch>(sks-pr). - NEVER push to
mainunless the user explicitly authorizes ("push to main" / "land it") — then push directly, no PR. - Protected
main(e.g.shikanime-studio/actions) → PR; direct push rejected.
Pitfalls
- Assuming cpn conventional style — shikanime code repos use plain English.
- Ignoring a repo hook → local commit rejected; detect first.
- Pushing a branch to the wrong remote —
originis the single push target. - Forgetting
jj bookmark track <branch> --remote=origin→ push fails. - Trailing period / lowercase start in subject — imperative, capitalized.
- Leaving jj
*/---------artifacts or a selfCo-authored-by:in a squashed message.
Verification
jj log -1 --no-graph -T 'description' && jj status
See also
sks-pr— PR title/body derived from this commit (source of truth).sks-dev-workflow— branch discipline this feeds into.