Agent skill

Rigor Type Coverage Uplift

by rigortype in rigortype/rigor

Expand Rigor's core/stdlib folding coverage for a named class, module, or method family.

MPL-2.0Auto-check passedDevelopment

Install Rigor Type Coverage Uplift

skills CLI
$ npx skills add rigortype/rigor --skill rigor-type-coverage-uplift -a claude-code

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

GitHub CLI
$ gh skill install rigortype/rigor rigor-type-coverage-uplift --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/rigortype/rigor.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/rigor-type-coverage-uplift .claude/skills/rigor-type-coverage-uplift && 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
rigor-type-coverage-uplift
GitHub stars
106
Token cost
~5.6k tokens
SKILL.md length
2,000 words
Files
1
Skills in repo
36
Repo updated
First seen
Licence
MPL-2.0

At a glance

Expand Rigor's core/stdlib folding coverage for a named class, module, or method family.

  • Works in 3 steps: Audit → Decision: classify each gap by… → Implementation patterns and common…
  • Auditing ConstantFolding
  • SKILL.md covers Background, Phase 1 — Audit, Phase 2 — Decision: classify… and Phase 3 — Implementation…, plus 5 more sections
  • Calls nix, bundle and make

What it does

Rigor Type Coverage Uplift is an agent skill from rigortype/rigor. Expand Rigor's core/stdlib folding coverage for a named class, module, or method family. Use when implementing or auditing ConstantFolding, ShapeDispatch, or singleton-folding support; not for ordinary type inference or user-project annotations.

Its SKILL.md is about 5.6k 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 Ruby. The repository describes itself as: Inference-first static analysis for Ruby. The licence is MPL-2.0.

When your agent uses it

  • Auditing ConstantFolding
  • Singleton-folding support
  • Not for ordinary type inference
  • User-project annotations

Example prompts

  • “/rigor-type-coverage-uplift”

Workflow steps

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

  1. Audit
  2. Decision: classify each gap by implementation tier
  3. Implementation patterns and common pitfalls

What it can do on your machine

Read from SKILL.md and the folder at commit 57a67cf. 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:

    • nix
    • bundle
    • make
    • ruby

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

  • Network

    No URLs in SKILL.md.

    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

Rigor Type Coverage Uplift loads about 5.6k tokens when it runs. Until then it costs about 69 tokens; SKILL.md has 2,000 words of instructions outside code blocks.

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

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 rigortype/rigor at commit 57a67cf, republished under its MPL-2.0 licence (© rigortype). 2,000 words, ~5,551 tokens.

Download SKILL.mdSave it as .claude/skills/rigor-type-coverage-uplift/SKILL.md (or your agent's skills folder).
name
rigor-type-coverage-uplift
description
Expand Rigor's core/stdlib folding coverage for a named class, module, or method family. Use when implementing or auditing `ConstantFolding`, `ShapeDispatch`, or singleton-folding support; not for ordinary type inference or user-project annotations.
metadata.internal
true

Rigor Type-Coverage Uplift

A contributor workflow for systematically discovering, prioritising, and implementing precision improvements across Rigor's method-dispatch pipeline. The flow has three phases:

  1. Audit — enumerate each type's own methods, cross-reference against the existing implementation, and produce a machine-readable coverage doc.
  2. Decision — classify every gap by implementation tier; this document is the parallelisation artifact that lets separate agents work on independent tiers.
  3. Implementation — one tier at a time, apply the per-tier patterns and commit each slice.

Background

Rigor's method-dispatch pipeline resolves receiver.method(args) through ordered tiers. For a given call site, the first tier that returns a non-nil type wins. The order is defined by dispatch_precise_tiers in lib/rigor/inference/method_dispatcher.rb; read it before relying on this summary:

DataFolding / StructFolding — Data / Struct value objects
meta-introspection          — `Singleton[*].new` and other class-object lifts
ConstantFolding             — scalar constant receivers (String, Integer, Float, bool, nil, Regexp, Symbol)
LiteralStringFolding        — mutable literal-string concatenation
ShapeDispatch               — structural types (Tuple, HashShape, Difference, Size-carrying Nominals)
STDLIB_SINGLETON_FOLDERS    — one folder per stdlib singleton receiver (File, Shellwords, Math, …)
Kernel intrinsics           — Kernel / Object methods (puts, pp, raise, …)
MethodFolding, ReduceFolding, ArrayToHFolding, BlockFolding
RbsDispatch                 — RBS envelope (fallback, always non-nil)

A "coverage gap" is any method where the RBS fallback gives a wide type (String, Integer, Array[T], …) when a precise Constant[T] or Tuple or Refined type could be returned because all the relevant arguments are statically known.

The underlying design documents:


Phase 1 — Audit

1-a. Enumerate each type's own methods

Use Ruby's reflection API to get only the methods that belong to a specific class or module, stripping inherited noise:

ruby
# Instance methods of a class
"".methods - Object.new.methods          # String-specific
0.methods  - Object.new.methods          # Integer-specific (Numeric + Integer)
0.0.methods - Object.new.methods         # Float-specific
true.methods - Object.new.methods        # TrueClass
[].methods  - Object.new.methods         # Array
{}.methods  - Object.new.methods         # Hash
require "set"; Set.new.methods - Object.new.methods   # Set

# Class / module functions (singleton methods)
Math.methods     - Module.methods        # Math module functions
Shellwords.methods - Module.methods      # Shellwords
CGI.methods      - Module.methods        # CGI
URI.methods      - Module.methods        # URI
Regexp.methods   - Class.methods         # Regexp class methods

Run this inside nix develop --command bundle exec ruby -e '…' so the environment matches the project's Ruby 4.0.5.

1-b. Cross-reference against the existing implementation

For instance methods on scalar types, inspect:

  • lib/rigor/inference/method_dispatcher/constant_folding.rb — STRING_UNARY, STRING_BINARY, INTEGER_UNARY, FLOAT_UNARY, BOOL_UNARY, BOOL_BINARY, NUMERIC_BINARY, plus the named handlers try_fold_string_format, try_fold_string_array_unary / _binary, invoke_unary, invoke_binary.

For structural types (Tuple, HashShape, Size-carrying Nominals), inspect:

  • lib/rigor/inference/method_dispatcher/shape_dispatch.rb — TUPLE_HANDLERS, HASH_SHAPE_HANDLERS, SIZE_RETURNING_NOMINALS, dispatch_difference.

For stdlib module functions, look for a dedicated *_folding.rb sibling registered in STDLIB_SINGLETON_FOLDERS (e.g. file_folding.rb for Singleton["File"], shellwords_folding.rb for Singleton["Shellwords"]).

For block-based methods, inspect:

  • lib/rigor/inference/method_dispatcher/block_folding.rb
1-c. Assign a coverage status to every method

Use the four-symbol legend:

SymbolMeaning
✅Already implemented — ConstantFolding, ShapeDispatch, BlockFolding, or another tier.
🔷Another tier is sufficient — e.g. LiteralStringFolding for <</concat, RBS for a wide but correct return.
🔲Gap — a Constant[T] / Tuple / Refined result is achievable and would increase precision.
🚫Out of scope — mutating methods, Enumerator-returning stubs, platform-dependent, or non-deterministic.
1-d. Produce the coverage document

Write docs/notes/<YYYYMMDD>-<type>-method-coverage.md (or a multi-type file if the scope is broad). Follow the format of:

Minimum required sections per type:

  1. Source of the enumeration ("".methods - Object.new.methods, version stamp).
  2. Method table: | method | status | note |.
  3. Implementation checklist grouped by priority: high (🔴), medium (🟡), low (🟢).
  4. Implementation file reference (which source file to edit).

For stdlib module functions, split into two separate files:

The split matters: the deterministic doc becomes the implementation backlog; the non-deterministic doc records the exclusion rationale so the question is never re-litigated.

Intermediate reports as parallelisation artifacts. The coverage doc is not mandatory for simple single-method additions, but it is invaluable when the scope spans 20+ methods or involves multiple implementation tiers. A complete coverage doc lets two agents work independently: one handles Tier A (UNARY/BINARY set additions), another handles Tier B (new module-function folding). Producing the doc as a first commit before any implementation is the recommended approach.


Phase 2 — Decision: classify each gap by implementation tier

Once the coverage doc exists, walk the 🔲 entries and assign each to exactly one of four tiers. This is the decision-heavy step; the implementation itself is largely mechanical once the tier is chosen.

Tier A — ConstantFolding UNARY / BINARY set additions

Use when: the method takes a scalar receiver (Constant[String], Constant[Integer], etc.) with zero or one additional scalar argument, and invoke_unary / invoke_binary can evaluate it by simply calling the method on the unwrapped Ruby value.

invoke_unary calls value.public_send(method_name) and wraps the result in Constant[T]. invoke_binary calls value.public_send(method_name, other_value).

Required conditions:

  • The method is defined directly on the receiver's Ruby class (not inherited from Object).
  • The method is non-mutating (no !-suffix, no in-place change).
  • The return value is a scalar Ruby type (String, Integer, Float, TrueClass, FalseClass, NilClass) so it wraps cleanly in Constant[T].
  • The method cannot raise on well-typed inputs (or if it can raise, it will raise at inference time and return nil from invoke_unary / invoke_binary — that is acceptable for static errors like division-by-zero on literal 0).

To add a method:

  1. Add the method name Symbol to the appropriate Set in constant_folding.rb: STRING_UNARY, STRING_BINARY, INTEGER_UNARY, FLOAT_UNARY, BOOL_UNARY, BOOL_BINARY, or NUMERIC_BINARY.
  2. No other code change is needed — invoke_unary / invoke_binary pick up the new entry automatically.

Example — String#chop (Tier A):

ruby
STRING_UNARY = Set[
  :capitalize, :chomp, :chop, # ← add :chop here
  …
].freeze

NUMERIC_BINARY is shared by Integer and Float: adding a Symbol there makes it available to both. Integer-only operations (&, |, ^, <<, >>) can be added to NUMERIC_BINARY safely — if a Float receiver calls them, invoke_binary rescues the NoMethodError and returns nil, falling through to the RBS tier. No separate Integer-only binary set is needed.

Tier B — ShapeDispatch HANDLERS entries

Use when: the receiver is a structural type (Tuple, HashShape, or a Difference like non-empty-string) and the precise result depends on the shape, not just the scalar value.

To add a method:

  1. Add a method_name: :handler_method_name entry to TUPLE_HANDLERS or HASH_SHAPE_HANDLERS in shape_dispatch.rb.
  2. Add the private handler method that receives (receiver_type, args) and returns the precise type or nil.

Example — Tuple#last (Tier B):

ruby
TUPLE_HANDLERS = {
  …
  :last => :tuple_last,
}.freeze

def tuple_last(tuple, _method_name, args)
  return nil if args.size > 1
  tuple.elements.last  # Constant[T] element type
end

Handler signature: every handler receives (receiver, method_name, args) — three positional parameters. The dispatch call is send(handler, receiver, method_name, args) (see dispatch_tuple / dispatch_hash_shape). A handler written as def h(tuple, args) silently receives method_name in args and args is bound to nil, causing mysterious nil-related bugs. Use _method_name if you do not need it.

Tier C — ExpressionTyper / BlockFolding

Use when: the method takes a block and the precise return type depends on evaluating the block's body over element types (e.g. Array#map, Array#select, Hash#transform_values).

These are already handled by BlockFolding and the ExpressionTyper block-evaluation path. New block methods fit here by registering in block_folding.rb. This tier is complex; reach for it only when the block return type is genuinely needed for a downstream narrowing.

Tier D — New singleton-folding module (module function dispatch)

Use when: the receiver is a module or class constant (e.g. Math, CGI, Regexp) called as a singleton, and the folding logic cannot be expressed as a simple UNARY/BINARY set entry.

Receiver identification: at dispatch time, Math in Math.sqrt(4.0) resolves to a Type::Singleton object. Guard with:

ruby
SingletonFolding.receiver?(receiver, "Math")

Pattern to follow: ShellwordsFolding is the canonical reference (lib/rigor/inference/method_dispatcher/shellwords_folding.rb). Structure:

ruby
module MathFolding
  MATH_UNARY_METHODS  = Set[:sqrt, :exp, :log, :log2, :log10, :sin, :cos, :tan, …].freeze
  MATH_BINARY_METHODS = Set[:atan2, :hypot, :ldexp, :log, …].freeze

  module_function

  def try_dispatch(context)
    method_name = context.method_name
    return nil unless SingletonFolding.receiver?(context.receiver, "Math")
    return nil unless MATH_UNARY_METHODS.include?(method_name) ||
                      MATH_BINARY_METHODS.include?(method_name)
    fold_math(method_name, context.args)
  end

  def fold_math(method_name, args)
    # validate arg count and types, then:
    #   Math.public_send(method_name, *unwrapped_args)
    # wrap result in Constant[T] or Tuple
  end
end

To wire a new Tier D module:

  1. Create lib/rigor/inference/method_dispatcher/<name>_folding.rb exposing try_dispatch(context).
  2. Add require_relative "method_dispatcher/<name>_folding" in method_dispatcher.rb.
  3. Register it in STDLIB_SINGLETON_FOLDERS as "<ClassName>" => <Name>Folding. The table is consulted only for Singleton receivers, so no ordering decision is needed.

Phase 3 — Implementation patterns and common pitfalls

Stdlib module fixture: must use a project-directory fixture

The test harness selects the RBS environment based on fixture layout:

  • Flat spec/integration/fixtures/<name>.rb → Environment.default (RBS core only; no stdlib libraries). Shellwords, Math, CGI, URI, Digest, etc. are not in RBS core and will not be found.
  • Directory spec/integration/fixtures/<name>/demo.rb → Environment.for_project (loads DEFAULT_LIBRARIES, which includes shellwords, uri, json, digest, and others).

Rule: any fixture that exercises a stdlib module not in RBS core MUST be a directory fixture. Using a flat fixture causes all type lookups to return Dynamic[top], making every test pass vacuously.

DEFAULT_LIBRARIES includes (as of Ruby 4.0.5): shellwords, benchmark, base64, did_you_mean, pathname, json, yaml, fileutils, uri, digest, securerandom, logger, tempfile, tmpdir, open-uri, …

Show full SKILL.md (788 more words)Show less
assert_type backslash escaping

assert_type(expected_string, expr) calls expr_type.describe(:short) which calls value.inspect on Constant values. inspect doubles backslashes.

describe(:short) returns only value.inspect — the bare "..." form with no wrapper. %(Constant["hello.world"]) as the first argument to assert_type is always wrong; it checks against Constant["hello.world"] (a string that starts with the letter C) which will never match describe(:short).

When an expected string contains backslashes, use single-quoted literals and count carefully:

assert_type argumentString it checks against
'"hello\\\\ world"'"hello\\ world" (two chars: \ + )
'"hello\\ world"'"hello\ world" (one char: \ ) — wrong

Rule of thumb: to assert a string whose inspect has N visible backslashes, write 2N backslashes inside a single-quoted Ruby string literal as the first argument to assert_type.

Regexp results require extra attention because the chain has three steps: Regexp.escape introduces one backslash per escaped meta-character → inspect doubles each → the single-quoted source must double again:

ruby
Regexp.escape("a.b")            # value: "a\.b"   — 1 backslash
# describe(:short) = "a\\.b"   — 2 backslashes (inspect doubled)
assert_type('"a\\\\.b"',   …)  # ✓  4 source backslashes → 2 actual → matches
assert_type('"a\\.b"',    …)   # ✗  2 source backslashes → 1 actual → mismatch

For a value with multiple escaped characters (Regexp.escape("[a-z]") has three backslashes):

ruby
assert_type('"\\\\[a\\\\-z\\\\]"', Regexp.escape("[a-z]"))  # ✓ 4 per group = 12 total

When in doubt, read the got: field from an assert_type mismatch error — it shows the actual.inspect value. The content between the outermost \" delimiters in got: is exactly what belongs between the '" and "' of the correct single-quoted argument.

Safe error handling in fold methods

A fold method that can raise at inference time should rescue and return nil to defer to the RBS tier:

ruby
def fold_split(args)
  # … validate args …
  Shellwords.split(arg.value)
rescue ArgumentError
  nil  # unmatched quotes — let RBS return Array[String]
end

Never let fold methods propagate exceptions to the inference engine.

Size safety caps

When a fold returns a Tuple of potentially unbounded size (e.g. Shellwords.split on a long command), cap the result:

ruby
SPLIT_LIMIT = 64
tokens = Shellwords.split(arg.value)
return nil if tokens.size > SPLIT_LIMIT

STRING_ARRAY_LIFT_LIMIT in ConstantFolding uses the same pattern; keep the convention consistent.


Measuring precision impact

Use rigor coverage --format json to get a before/after machine-readable precision score. Run once before implementation begins and again after each slice to confirm the uplift is real:

sh
# Before implementing the slice:
nix develop --command \
  bundle exec exe/rigor coverage --format json \
  spec/integration/fixtures/<name>/demo.rb > /tmp/before.json

# After implementing:
nix develop --command \
  bundle exec exe/rigor coverage --format json \
  spec/integration/fixtures/<name>/demo.rb > /tmp/after.json

# Compare:
ruby -r json -e '
  b = JSON.parse(File.read("/tmp/before.json"))["summary"]
  a = JSON.parse(File.read("/tmp/after.json"))["summary"]
  puts "precise_ratio: #{(b["precise_ratio"]*100).round(2)}% → #{(a["precise_ratio"]*100).round(2)}%"
  puts "dynamic_opaque: #{b["dynamic_opaque_count"]} → #{a["dynamic_opaque_count"]}"
'

For a broader signal (impact on all of lib/):

sh
nix develop --command \
  bundle exec exe/rigor coverage lib

make coverage enforces the precision floor set by its --threshold in the Makefile — any slice that regresses precision below it fails CI.


Verification

After every implementation slice:

sh
nix develop --command make verify-changed

make verify-changed is the local gate; the full gate (tests, lint, check, check-plugins) is CI on the Draft PR. CI's self-check runs rigor check lib — Rigor's self-check must stay clean.

If the self-check surfaces new diagnostics in lib/, the cause is almost always:

  • a method added to a UNARY/BINARY set that Rigor itself uses — check that the Rigor codebase is not calling the method on a non-literal receiver that now resolves differently; or
  • a blocklist entry missing for a method the catalog classifies as :leaf but is actually mutating.

Coverage doc maintenance

After implementing a 🔲 item:

  1. Update the corresponding docs/notes/…-coverage.md — change the symbol from 🔲 to ✅.
  2. Commit the doc update in the same commit as the implementation (or as an immediate follow-up), so the doc stays in sync as the living record.

Quick checklist

Before declaring a coverage-uplift slice done:

  • Coverage doc produced (or an existing one updated) with ✅/🔷/🔲/🚫 per method.
  • Each 🔲 entry assigned to Tier A / B / C / D.
  • Tier A additions: Symbol added to the correct UNARY/BINARY Set; no other code change needed.
  • Tier B additions: HANDLERS entry + private handler method in shape_dispatch.rb.
  • Tier D additions: new *_folding.rb file following the ShellwordsFolding pattern; require_relative added to method_dispatcher.rb; registered in STDLIB_SINGLETON_FOLDERS.
  • Unit spec for each new method / module in spec/rigor/inference/method_dispatcher/.
  • Integration fixture in spec/integration/fixtures/<name>/demo.rb (directory form for stdlib modules; flat form for core types). Create together with the describe block below — a fixture file with no spec wiring is dead code and will never catch regressions.
  • Integration describe block in spec/integration/type_construction_spec.rb.
  • Precision snapshots updated: UPDATE_SNAPSHOTS=1 bundle exec rspec spec/integration/precision_snapshot_spec.rb. Run this whenever you add or modify a fixture — the golden files in spec/integration/snapshots/ must reflect the new precise types or the CI snapshot gate will fail.
  • make verify-changed clean locally; CI green on the Draft PR (it runs make coverage too).
  • Changelog fragment under changelog.d/<section>/ (user-visible description of the new folds).
  • Implemented 🔲 entries updated to ✅ in the coverage doc.

Example: end-to-end Shellwords implementation

The ShellwordsFolding module is the canonical worked example of Tier D (new singleton-folding module):

  1. Coverage doc produced: docs/notes/20260522-stdlib-deterministic-module-coverage.md — §2 Shellwords lists escape/shellescape, split/shellsplit/shellwords, join/shelljoin as 🔲 with receiver identification notes and fixture considerations.

  2. Module file: lib/rigor/inference/method_dispatcher/shellwords_folding.rb
    — try_dispatch(context) guards with SingletonFolding.receiver?(receiver, "Shellwords"). — fold_escape, fold_split, fold_join each validate argument count and type before calling the real Shellwords method and wrapping the result.

  3. Registered in STDLIB_SINGLETON_FOLDERS in method_dispatcher.rb.

  4. Unit spec: spec/rigor/inference/method_dispatcher/shellwords_folding_spec.rb
    — 27 examples covering each method, its aliases, non-constant inputs, arity guards, and a split → join round-trip.

  5. Integration fixture (directory form, for Environment.for_project): spec/integration/fixtures/shellwords_folding/demo.rb
    — assert_type calls demonstrating all three method groups and the fallback-to-RBS behaviour for non-constant inputs.

  6. Integration spec wired in type_construction_spec.rb.

  7. Coverage doc updated: Shellwords section in docs/notes/20260522-stdlib-deterministic-module-coverage.md changed to ✅.

The whole slice — doc, implementation, unit spec, integration fixture, spec wiring, changelog — was one commit.

© rigortype, MPL-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/rigor-type-coverage-uplift of rigortype/rigor.

Open the folder on GitHubat commit 57a67cf

Compare with similar skills

Rigor Type Coverage Uplift 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.

Rigor Type Coverage Uplift compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Rigor Type Coverage Uplift this skillrigortype/rigor106—~5.6kAutomated safety check: PassMPL-2.0
Gumroad Prod Consoleantiwork/gumroad9.8k—~2.9kAutomated safety check: NotesMIT
Fastlane Pull Request Reviewfastlane/fastlane42k—~550Automated safety check: PassMIT
Dependency UpdaterAsvarox/allkaraoke2614 repos~3.5kAutomated safety check: PassMIT
Wise APIlineofflight/frankfurter2k—~1.1kAutomated safety check: PassMIT
Write RbsDataDog/dd-trace-rb417—~805Automated safety check: PassCustom licence

Similar skills

  • Gumroad Prod Console

    antiwork/gumroad

    Execute read-only Ruby/Rails commands against Gumroad's production database for debugging and investigation.

    9.8k GitHub stars~2.9k tokensUpdated today
    DevelopmentAuto-check: notes
  • Reviews a fastlane pull request against its linked issue and the project guides, separating blocking from non-blocking findings and handling vulnerabilities privately.

    42k GitHub stars~550 tokensUpdated today
    DevelopmentAuto-check passed
  • Dependency Updater

    Asvarox/allkaraoke

    Smart dependency management for any language. An agent skill from Asvarox/allkaraoke.

    261 GitHub starsUsed in 4 repos~3.5k tokens
    DevelopmentAuto-check passed
  • Wise API

    lineofflight/frankfurter

    A skill your agent uses when querying Wise for exchange rates (real-time or historical), validating Frankfurter rates against Wise mid-market, debugging rate discrepancies, or when the user mentions…

    2k GitHub stars~1.1k tokensUpdated 6 days ago
    DevelopmentAuto-check passed
  • Write Rbs

    DataDog/dd-trace-rb

    Official

    A skill your agent uses when writing, reviewing, or modifying RBS type signatures (sig//.rbs, vendor/rbs//.rbs, or inline : annotations) or running Steep – e.g.

    417 GitHub stars~805 tokensUpdated today
    DevelopmentAuto-check passed
  • Addresses unresolved pull request review threads and suppressed (low-confidence) Copilot review comments on the current branch, folds each fix into the…

    1.8k GitHub stars~657 tokensUpdated 6 days ago
    DevelopmentAuto-check passed

More from rigortype/rigor

All 36 skills in this repo
  • Rigor Regression Sweep

    rigortype/rigor

    Measure Rigor's baseline drift across the tagged history of a real OSS Ruby project.

    106 GitHub stars~2.9k tokensUpdated today
    Auto-check passed
  • Adjudicate a rigor unused report safely before proposing dead-code removal.

    106 GitHub stars~1.1k tokensUpdated today
    Auto-check passed
  • Rigor Baseline Reduce

    rigortype/rigor

    Reduce an existing .rigor-baseline.yml rule by rule by triaging sites, fixing or intentionally suppressing them, and regenerating the baseline.

    106 GitHub stars~1.3k tokensUpdated today
    Auto-check passed
  • Rigor Doctor

    rigortype/rigor

    Validate that a project's Rigor configuration, plugins, paths, and baseline are actually healthy.

    106 GitHub stars~767 tokensUpdated today
    Auto-check passed
  • Rigor Plugin Author

    rigortype/rigor

    Author a new Rigor plugin, choosing plugins/ for production support or examples/ for a contract walkthrough.

    106 GitHub stars~3.3k tokensUpdated today
    Auto-check: notes
  • Rigor Plugin Author

    rigortype/rigor

    Author a Rigor plugin in an adopting project or standalone rigor- gem for a DSL, framework, or metaprogramming pattern.

    106 GitHub stars~1.9k tokensUpdated today
    Auto-check passed

Works with

Categories

Questions about Rigor Type Coverage Uplift

What does Rigor Type Coverage Uplift do?

Expand Rigor's core/stdlib folding coverage for a named class, module, or method family. Rigor Type Coverage Uplift is an agent skill from rigortype/rigor. Expand Rigor's core/stdlib folding coverage for a named class, module, or method family.

When should I use Rigor Type Coverage Uplift?

Rigor Type Coverage Uplift fits situations like: auditing ConstantFolding; singleton-folding support; not for ordinary type inference; user-project annotations.

How do I install Rigor Type Coverage Uplift in Claude Code?

Run `npx skills add rigortype/rigor --skill rigor-type-coverage-uplift -a claude-code`. Or copy the skill folder (.claude/skills/rigor-type-coverage-uplift in rigortype/rigor) into .claude/skills/rigor-type-coverage-uplift in your project. Claude Code loads it when a task matches its description.

How do I install Rigor Type Coverage Uplift in Codex?

Run `npx skills add rigortype/rigor --skill rigor-type-coverage-uplift -a codex`. Or copy the skill folder (.claude/skills/rigor-type-coverage-uplift in rigortype/rigor) into .agents/skills/rigor-type-coverage-uplift in your project. Codex loads it when a task matches its description.

Can I use Rigor Type Coverage Uplift 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 rigortype/rigor --skill rigor-type-coverage-uplift -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/rigor-type-coverage-uplift, .gemini/skills/rigor-type-coverage-uplift, .github/skills/rigor-type-coverage-uplift and .opencode/skills/rigor-type-coverage-uplift in your project.

What does Rigor Type Coverage Uplift need to run?

Going by SKILL.md and its folder, Rigor Type Coverage Uplift needs the command-line tools its instructions call (nix, bundle, make and ruby).

Does Rigor Type Coverage Uplift access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Rigor Type Coverage Uplift 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 Rigor Type Coverage Uplift use?

Rigor Type Coverage Uplift is published under the MPL-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Rigor Type Coverage Uplift use?

About 5.6k tokens (SKILL.md is roughly 22k 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 Rigor Type Coverage Uplift?

Skills that share tags, products or a category with Rigor Type Coverage Uplift: Gumroad Prod Console (antiwork/gumroad, 9.8k stars), Fastlane Pull Request Review (fastlane/fastlane, 42k stars), Dependency Updater (Asvarox/allkaraoke, 261 stars) and Wise API (lineofflight/frankfurter, 2k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Rigor Type Coverage Uplift?

rigortype (a GitHub organization) maintains it in rigortype/rigor, which has 106 GitHub stars. The repository holds 36 skills in this directory. The repository was last updated on October 8, 2026.

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