Agent skill

Pre Publish Check

by cmpute in cmpute/dashu

Runs formatting/lint/test/semver checks before publishing. An agent skill from cmpute/dashu.

Apache-2.0Auto-check passedDevelopment

Install Pre Publish Check

skills CLI
$ npx skills add cmpute/dashu --skill pre-publish-check -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install cmpute/dashu pre-publish-check --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/cmpute/dashu.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/pre-publish-check .claude/skills/pre-publish-check && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
pre-publish-check
GitHub stars
142
Token cost
~3.1k tokens
SKILL.md length
1,478 words
Files
1
Skills in repo
2
Repo updated
First seen
Licence
Apache-2.0

At a glance

Runs formatting/lint/test/semver checks before publishing. An agent skill from cmpute/dashu.

  • Works in 10 steps: Identify target crate(s) and version(s) → Determine the required bump from the diff → Run the normal CI-equivalent checks → …
  • Asks to publish dashu
  • SKILL.md covers Repository context…, Workflow and Common failure modes
  • Calls cargo and git

What it does

Pre Publish Check is an agent skill from cmpute/dashu. Runs formatting/lint/test/semver checks before publishing. This skill should be used when the user asks to "publish dashu", "publish a sub-crate", "do pre-publish checks", "prepare a release", "cut a release", "bump the version", "check before publishing", or mentions publishing/releasing a new version of dashu or any sub-crate (dashu-base, dashu-int, dashu-float, dashu-ratio, dashu-macros).

Its SKILL.md is about 3.1k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Development. It works with Rust. The repository describes itself as: A library set of arbitrary precision numbers implemented in Rust. The licence is Apache-2.0.

When your agent uses it

  • Asks to publish dashu
  • Publish a sub-crate
  • Do pre-publish checks
  • Prepare a release

Example prompts

  • “publish dashu”
  • “publish a sub-crate”
  • “do pre-publish checks”
  • “/pre-publish-check”

Requirements

  • Python 3

Workflow steps

10 steps, taken from the step headings in SKILL.md.

  1. Identify target crate(s) and version(s)
  2. Determine the required bump from the diff
  3. Run the normal CI-equivalent checks
  4. Verify CHANGELOG.md is updated for every affected crate
  5. Backward-compatibility verification
  6. MSRV verification
  7. Cross-crate version sync
  8. dashu-specific sanity checks
  9. Pre-publish packaging dry-run
  10. Report

What it can do on your machine

Read from SKILL.md and the folder at commit aadb058. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • cargo
    • git

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use git, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Pre Publish Check loads about 3.1k tokens when it runs. Until then it costs about 106 tokens; SKILL.md has 1,478 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~106
When it runs · the whole SKILL.md, loaded when a task matches
~3.1k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from cmpute/dashu at commit aadb058, republished under its Apache-2.0 licence (© cmpute). 1,478 words, ~3,068 tokens.

Download SKILL.mdSave it as .claude/skills/pre-publish-check/SKILL.md (or your agent's skills folder).
name
pre-publish-check
description
Runs formatting/lint/test/semver checks before publishing. This skill should be used when the user asks to "publish dashu", "publish a sub-crate", "do pre-publish checks", "prepare a release", "cut a release", "bump the version", "check before publishing", or mentions publishing/releasing a new version of `dashu` or any sub-crate (`dashu-base`, `dashu-int`, `dashu-float`, `dashu-ratio`, `dashu-macros`).

Pre-Publish Check for dashu

Run a consistent set of checks before publishing dashu (the meta crate) or any sub-crate to crates.io. Fail loudly on any regression that would break downstream users or violate the project's release policy.

Repository context (load-bearing facts)

  • The workspace contains 6 publishable crates: dashu (meta, at repo root), base/, integer/, float/, rational/, macros/. python/ is not published and is excluded from workspace commands with --exclude dashu-python.
  • Major versions are always aligned across all crates (0.4.x today). Minor and patch may differ — dashu-float is at 0.4.4 while the others are at 0.4.2.
  • Every crate's Cargo.toml pins the path and the version range of its dashu-internal dependencies. When sub-crate X bumps its version, every crate that depends on X (including the meta crate) must have its version requirement updated to >= the new version of X.
  • The MSRV is 1.68, declared both in rust-version = "1.68" in every Cargo.toml and in the README badge (MSRV 1.68). MSRV bumps are breaking changes and require a major version bump or an explicit policy exception (see CHANGELOG history for the 1.61 → 1.68 bump pattern).
  • Every crate has its own CHANGELOG.md with an ## Unreleased section. The meta dashu crate does not have a CHANGELOG — it follows the sub-crates.
  • Feature-flag policy: third-party integrations are gated behind versioned feature flags (rand_v08, num-traits_v02, diesel_v2, postgres-types_v02) with an unversioned alias that points to the latest. Adding a new major-version dependency means adding a new versioned feature.
  • Doc examples (# Examples blocks) on every public API are mandatory and are exercised by cargo test --doc.

Workflow

Step 1 — Identify target crate(s) and version(s)

Inspect the user's prompt for both pieces of information:

  • Target crate: one of dashu, dashu-base, dashu-int, dashu-float, dashu-ratio, dashu-macros, or all.
  • Target version: a SemVer string (e.g., 0.4.5, 0.5.0).

If either is missing, use AskUserQuestion to ask. Ask at most two questions in a single call:

  1. "Which crate(s) are being published?" — options: each sub-crate, dashu (meta), all sub-crates + meta.
  2. "What is the target version?" — leave this as free-text via the user's "Other" option, since the next version depends on what changed (major/minor/patch). Pre-populate sensible options based on the current Cargo.toml version: e.g., if current is 0.4.2, offer 0.4.3 (patch), 0.5.0 (minor — note pre-1.0 minor acts like major in SemVer), 0.4.x (let user specify).

Pre-1.0 SemVer rule for this project: since the major version is 0, a minor bump (0.4.x → 0.5.0) is the breaking-change release (acts like a major bump). A patch bump (0.4.2 → 0.4.3) only allows backward-compatible additions and fixes — no removals, no signature changes, no MSRV bumps.

Step 2 — Determine the required bump from the diff

Run git log <last-release-tag>..HEAD --oneline and read each affected crate's CHANGELOG.md ## Unreleased section. Cross-reference the changelog against the SemVer rule:

Change in ## UnreleasedRequired bump
### Remove of a public item, or ### Change of a public signatureminor (since major is 0)
### Add (new public items, additive)patch OK
### Fix (bug fix preserving API)patch OK
### Improve (perf/internal)patch OK
MSRV bump (any magnitude)minor + explicit ## Unreleased note

If the user-provided target version is smaller than what the diff requires, halt and report. If it is larger (e.g., user wants 0.5.0 but only patch-level changes are listed), warn and ask for confirmation — they may know about an additional breaking change not yet in the changelog.

Step 3 — Run the normal CI-equivalent checks

Run these from the repo root. All must pass:

sh
# Format check (no fix — surface the diff so the user decides)
cargo fmt --all -- --check

# Clippy on 64-bit Word (warnings are errors)
cargo clippy --all-features --all-targets --workspace --exclude dashu-python -- -D warnings

# Clippy on 32-bit Word (the NTT module has 32-bit-specific paths)
RUSTFLAGS='--cfg force_bits="32"' cargo clippy --all-features --all-targets --workspace --exclude dashu-python -- -D warnings

# Check + tests with all features (matches CI)
cargo check --all-features --tests
cargo test --workspace --exclude dashu-python --all-features --no-fail-fast

# no_std path — ensures default code paths do not pull in std
cargo test --no-default-features --features rand --workspace --exclude dashu-python

Report any failure verbatim. Do not auto-fix unless the user asks — these checks gate the release, so the user must own the fix.

Step 4 — Verify CHANGELOG.md is updated for every affected crate

For each crate being published (and any crate whose version is bumped as a dependency side-effect):

  1. Open <crate>/CHANGELOG.md.
  2. Confirm ## Unreleased exists and is non-empty.
  3. Confirm every notable commit since the last release of that crate is reflected. Use git log <last-tag-for-crate>..HEAD -- <crate>/ to find commits that touched the crate.
  4. Confirm an MSRV change is mentioned in the changelog if and only if rust-version changed (see Step 6).

If a crate's ## Unreleased is empty or missing entries, halt with a list of uncovered commits.

Step 5 — Backward-compatibility verification

Use cargo-semver-checks to compare the working tree against the currently-published version on crates.io. Bump the version in <crate>/Cargo.toml first — the tool picks its crates.io baseline from the version declared there, so running it before the bump compares against the wrong version (often the same one):

sh
# Install if missing
cargo install cargo-semver-checks --locked

# Run against the specific crate(s) being released
cargo semver-checks check-release --package <crate-name> --verbose

Interpret the output against the project's pre-1.0 SemVer rule:

  • If target is a patch bump: zero semver violations are allowed. Any major or minor finding from semver-checks is a hard failure.
  • If target is a minor bump (breaking for this project): major/minor findings are allowed but each must correspond to an entry under ### Remove or ### Change in the changelog. Unlisted breakage is a hard failure.

If cargo-semver-checks is unavailable (e.g., MSRV-incompatible), fall back to a manual public-API diff:

sh
# Install if missing
cargo install cargo-public-api --locked

# Compare current against the published version
cargo public-api --package <crate-name> diff <published-version>

Review the diff manually using the same rules.

Show full SKILL.md (661 more words)Show less
Step 6 — MSRV verification

For each crate being published:

  1. Diff rust-version in <crate>/Cargo.toml against the version on master (or the last release tag). Use git show <last-tag>:<crate>/Cargo.toml | grep rust-version.
  2. If rust-version changed:
    • Verify the changelog ## Unreleased section explicitly mentions the MSRV bump (e.g., "Bump MSRV from 1.61 to 1.68" — match the wording used in past entries).
    • Verify the README badge (MSRV 1.68 in the root README.md) matches the new value.
    • Verify the target version is at least a minor bump (since MSRV bumps are breaking for this project).
    • Verify .github/workflows/tests.yml still tests the new MSRV (the rust: [stable, "1.85", "1.68"] matrix and the drop_incompatible_deps_for_msrv.py invocation).
    • Verify .github/workflows/drop_incompatible_deps_for_msrv.py is still correct for the new MSRV — new deps may need to be stripped for MSRV builds.
  3. If the user explicitly requested an MSRV change in their prompt but it's not in the changelog, halt and ask them to add the entry first.
Step 7 — Cross-crate version sync

When publishing sub-crate X with new version V:

  1. Every other crate Y whose Cargo.toml depends on X must be updated so that version = "..." accepts V. Use grep -rn 'dashu-X = ' */Cargo.toml Cargo.toml to find all references.
  2. If Y is also being released in this cycle, update Y's version = "..." for X to the exact new version (e.g., dashu-float = { version = "0.4.5", ... }).
  3. If Y is not being released, the version requirement still needs to be widened (e.g., 0.4.2 → 0.4.5), but Y's own version stays put. This is a real scenario — for example, when dashu-float shipped 0.4.4 while siblings stayed at 0.4.2.
  4. The meta dashu crate at the repo root depends on every sub-crate. Its Cargo.toml must list version requirements that accept each new sub-crate version.
  5. Run cargo update -p <crate-name> and cargo build --workspace --exclude dashu-python to confirm everything resolves.
Step 8 — dashu-specific sanity checks

Verify project invariants documented in AGENTS.md:

  1. no_std: default code paths must not use std. Confirm with cargo build --no-default-features --workspace --exclude dashu-python for each crate.
  2. Feature flags: if the diff adds a new third-party dependency, confirm there's a versioned feature flag (e.g., rand_v08) plus an unversioned alias. Adding rand (unversioned) without a versioned variant is a violation.
  3. Doc examples: every new public function or method must have a # Examples section. Run cargo test --doc --workspace --exclude dashu-python --all-features to confirm examples compile and pass.
  4. rustfmt config: only fn_call_width = 80 is set in rustfmt.toml. Long call sites that exceed this should be split — Step 3's cargo fmt --check already enforces this.
  5. Workspace integrity: dashu-python is excluded from workspace tests and clippy. Never remove the --exclude dashu-python flag from any workspace command.
Step 9 — Pre-publish packaging dry-run

For each crate being published, run cargo publish --dry-run --allow-dirty --features <all-features-for-this-crate> -p <crate-name> from the repo root. Resolve any errors before the actual publish.

Step 10 — Report

Produce a checklist summary with one section per crate:

## dashu-float 0.4.5

- [x] fmt clean
- [x] clippy clean (64-bit and 32-bit)
- [x] tests pass (all-features and no-std)
- [x] CHANGELOG Unreleased matches commits since 0.4.4
- [x] semver-checks: 0 violations (patch-level changes only)
- [x] MSRV unchanged at 1.68
- [x] downstream deps updated: dashu-ratio/Cargo.toml, dashu-macros/Cargo.toml, dashu (meta)
- [x] cargo publish --dry-run succeeded

Halt the release and surface the failure if any box is unchecked. Do not run cargo publish for real — that is a human action. After the report, suggest the user run cargo publish -p <crate> themselves (or via ! cargo publish -p <crate> in this session).

Common failure modes

  • Forgot --exclude dashu-python: dashu-python is in early development; workspace commands fail without the exclude.
  • 32-bit clippy not run: the NTT module has 32-bit-specific code paths. Always run clippy with both --cfg force_bits="32" (the default) and without.
  • dashu-base version pin drift: dashu-int pins dashu-base = "0.4.1" (older than the others' 0.4.2). This is intentional but easy to miss when bumping versions. Re-read every cross-crate pin in Step 7.
  • MSRV bump without CHANGELOG entry: 1.61 → 1.68 was a coordinated bump that touched every crate's CHANGELOG. Any future MSRV change must do the same.
  • Semver-checks reports a violation but the changelog doesn't list it: this is a hidden breaking change. Halt and ask the user whether to (a) add it to the changelog and bump minor, or (b) revert the change to keep the patch release.

© cmpute, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .claude/skills/pre-publish-check of cmpute/dashu.

Open the folder on GitHubat commit aadb058

Compare with similar skills

Pre Publish Check next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Pre Publish Check compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Pre Publish Check this skillcmpute/dashu142—~3.1kAutomated safety check: PassApache-2.0
Migrate Core Code to Submodulestinyhumansai/openhuman42k—~2.6kAutomated safety check: PassGPL-3.0
Rust Best Practicesfarm-fe/farm5.6k3 repos~1.1kAutomated safety check: PassMIT
OpenLogi macOS Permissions TriageAprilNEA/OpenLogi23k—~2.5kAutomated safety check: NotesApache-2.0
RTK Rust Design Patternsrtk-ai/rtk83k—~1.9kAutomated safety check: PassApache-2.0
Release Skillsnexmoe/eve4213 repos~3.3kAutomated safety check: PassNone

Similar skills

  • Migrate Core Code to Submodules

    tinyhumansai/openhuman

    Plans and carries out moving non-host-specific code and its tests from the OpenHuman core into vendored tiny submodule libraries, then releases the submodule and re-pins the host.

    42k GitHub stars~2.6k tokensUpdated yesterday
    DevelopmentAuto-check passed
  • Guide for writing idiomatic Rust code based on Apollo GraphQL's best practices handbook.

    5.6k GitHub starsUsed in 3 repos~1.1k tokens
    DevelopmentAuto-check passed
  • Decides whether an OpenLogi device problem on macOS is a privacy-permission (TCC) problem, using agent log lines, and says which identity needs which grant.

    23k GitHub stars~2.5k tokensUpdated 5 days ago
    DevelopmentAuto-check: notes
  • Describes seven Rust design patterns for the RTK CLI filter modules, with when to use each, RTK examples, and notes on when a pattern is overkill.

    83k GitHub stars~1.9k tokensUpdated yesterday
    DevelopmentAuto-check passed
  • Release Skills

    nexmoe/eve

    Universal release workflow. An agent skill from nexmoe/eve.

    421 GitHub starsUsed in 3 repos~3.3k tokens
    DevelopmentAuto-check passed
  • Pnpm Engine

    teambit/bit

    Work on the pnpm Rust engine (@pnpm/napi, the pacquet crates) that bit install runs through.

    18k GitHub stars~1.9k tokensUpdated yesterday
    DevelopmentAuto-check passed

More from cmpute/dashu

  • This skill should be used when the user asks to "support a trait from another crate", "implement a third-party trait", "add an integration for crate X", "add num-traits / serde / rand / ...

    142 GitHub stars~3.9k tokensUpdated 4 days ago
    Auto-check passed

Works with

Categories

Questions about Pre Publish Check

What does Pre Publish Check do?

Runs formatting/lint/test/semver checks before publishing. An agent skill from cmpute/dashu. Pre Publish Check is an agent skill from cmpute/dashu. Runs formatting/lint/test/semver checks before publishing.

When should I use Pre Publish Check?

Pre Publish Check fits situations like: asks to publish dashu; publish a sub-crate; do pre-publish checks; prepare a release.

How do I install Pre Publish Check in Claude Code?

Run `npx skills add cmpute/dashu --skill pre-publish-check -a claude-code`. Or copy the skill folder (.claude/skills/pre-publish-check in cmpute/dashu) into .claude/skills/pre-publish-check in your project. Claude Code loads it when a task matches its description.

How do I install Pre Publish Check in Codex?

Run `npx skills add cmpute/dashu --skill pre-publish-check -a codex`. Or copy the skill folder (.claude/skills/pre-publish-check in cmpute/dashu) into .agents/skills/pre-publish-check in your project. Codex loads it when a task matches its description.

Can I use Pre Publish Check in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add cmpute/dashu --skill pre-publish-check -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/pre-publish-check, .gemini/skills/pre-publish-check, .github/skills/pre-publish-check and .opencode/skills/pre-publish-check in your project.

What does Pre Publish Check need to run?

Going by SKILL.md and its folder, Pre Publish Check needs the command-line tools its instructions call (cargo and git). Our summary lists: Python 3.

Does Pre Publish Check access the network?

SKILL.md contains no URLs. Its commands use git, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Pre Publish Check safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Pre Publish Check use?

Pre Publish Check is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Pre Publish Check use?

About 3.1k tokens (SKILL.md is roughly 12k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Pre Publish Check?

Skills that share tags, products or a category with Pre Publish Check: Migrate Core Code to Submodules (tinyhumansai/openhuman, 42k stars), Rust Best Practices (farm-fe/farm, 5.6k stars), OpenLogi macOS Permissions Triage (AprilNEA/OpenLogi, 23k stars) and RTK Rust Design Patterns (rtk-ai/rtk, 83k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Pre Publish Check?

cmpute (a GitHub user) maintains it in cmpute/dashu, which has 142 GitHub stars. The repository holds 2 skills in this directory. The repository was last updated on October 4, 2026.

Source: cmpute/dashu on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.