RB
← All projectsRust Bitcoin

rust-bitcoin

Rust library for Bitcoin data structures, serialization, consensus encoding, and scripts.

BitcoinCryptographic librariesNormal
Repository coverage

2070 commits in the local evidence base

Every captured commit receives deterministic security triage and a separate communication-quality score. Security candidates and broader second-pass signals receive full-patch Ollama analysis.

459security candidates448second-pass queue248AI analyses
194commits · 30 days
405commits · 60 days
1283commits · 180 days
2070commits · 365 days
Backfill bands
Aug 5 → Feb 6787 seen32 candidatesComplete
Feb 6 → Jun 6878 seen53 candidatesComplete
Jun 6 → Jul 6211 seen15 candidatesComplete
Jul 6 → Aug 5184 seen2 candidatesComplete
Commit communication

Does the history explain itself?

Message quality measures whether a commit identifies its scope, purpose, rationale, testing, and supporting references. It does not change the security-severity score.

64/100 average clarity
311Strong · 80–100
1054Adequate · 60–79
555Thin · 40–59
150Opaque · 0–39
20security candidates with opaque commit messaging
Read the scoring rubric →
Developer activity

Who is changing the project?

Public Git author strings; identities are not independently verified.

DeveloperCommitsCandidatesAnalyzedHigh riskMessage avg.
Mitchell Bagot640192109068
Tobin C. Harding4096544063
jrakibi944912068
Nick Johnson189204059
Andrew Poelstra512011075
Jamil Lambert, PhD114185061
Fmt Bot311412045
Trevor Arjeski111111069
Shing Him Ng3176056
Ismail Daif2263050
satsfy (Renato Britto)1766066
Martin Habovstiak2754069
Analysis record

Published AI watches

Last scanned 20 minutes ago

Informational 15 AI analysisMessage 60 · Adequate
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

base58ck: Bump version to 0.5.0

This commit is a routine version bump for the base58ck crate from 0.4.0 to 0.5.0. It only updates version numbers in package manifests, lock files, and adds a changelog entry describing unrelated feature changes. There are no code changes,…

8479b56eby Tobin C. Harding+22−168 files
No security note in commit
Informational 20 AI analysisMessage 58 · Thin
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Rename Error to DecodeCheckError

This commit is a routine code cleanup: it renames the `Error` type in the base58 module to the more descriptive `DecodeCheckError`, and adds a deprecated type alias so existing code using `base58::Error` continues to work. There is no chan…

b0eba4c0by Mitchell Bagot+45−395 files
No security note in commit
Informational 15 AI analysisMessage 78 · Adequate
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

hashes: add sha256::Midstate::SHA256_IV constant

This commit is a routine internal refactoring in the rust-bitcoin SHA-256 hashing code. It exposes the SHA-256 initial value (IV) as a public constant and renames an internal helper function so it can start from any midstate rather than al…

dc21841bby Andrew Poelstra+39−143 files
No security note in commit
Informational 15 AI analysisMessage 50 · Thin
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

hashes: add several methods to sha256::Midstate for computing them in const contexts

This commit adds new helper methods to the SHA-256 'Midstate' type in the rust-bitcoin hashes library. These helpers let callers compute SHA-256 intermediate states inside 'const' contexts (compile-time constants). It is a routine feature …

7d8f06d2by Andrew Poelstra+80−72 files
No security note in commit
Informational 17 AI analysisMessage 73 · Adequate
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

taproot-primitives: Implement encoding traits for TapLeafHash

This commit adds standard data-encoding support for a Bitcoin Taproot hash type (TapLeafHash) so it can be properly serialized and deserialized in PSBT data. There is no indication of a security bug being fixed; it appears to be a missing-…

No security-relevant signal in commit message or diffChange is a feature addition (encoding trait implementations)No bounds-checking, memory-safety, or cryptographic flaws evident in diff
b2ab0896by Mitchell Bagot+59−12 files
No security note in commit
Informational 18 AI analysisMessage 73 · Adequate
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Split Address into an extension trait

This commit is a routine code reorganization in the rust-bitcoin library. It moves the `Address::from_script` method out of the main `Address` type into a new 'extension trait' called `AddressExt`. The actual logic of the function is copie…

c900fa8cby Mitchell Bagot+35−263 files
No security note in commit
Informational 15 AI analysisMessage 60 · Adequate
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

primitives: Bump version to 0.103.0

This commit is a routine release preparation: it bumps the version number of the `bitcoin-primitives` crate from 0.102.0 to 0.103.0, updates related dependency declarations in other crates, refreshes lock files, and adds a changelog entry.…

5612224dby Tobin C. Harding+48−88 files
No security note in commit
Informational 15 AI analysisMessage 45 · Thin
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

hashes: bump version to 1.1.0

This commit is a routine version bump for the bitcoin_hashes crate from 1.0.0 to 1.1.0. It updates dependency references across the workspace, records the release in the changelog, and adjusts deprecation lint allowances in tests. There is…

bf3f25f4by Nick Johnson+34−269 files
No security note in commit
Informational 17 AI analysisMessage 80 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

refactor(bip32): Xpub child tweak api

This commit is a straightforward API refactor in the BIP-32 (Bitcoin key derivation) code. It replaces a function that returned a raw secret key and chain code with one that returns a new structured type called XpubChildTweak. The actual c…

No security-relevant behavioral change observedAPI rename and return-type encapsulation onlyNo new validation, bounds checking, or constant-time guarantees added
37191717by Trevor Arjeski+21−71 file
No security note in commit
Informational 18 AI analysisMessage 85 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

refactor(bip32): rename Xpub and Xpriv derivation methods

This is a routine code cleanup in a Bitcoin library. It renames key-derivation methods on extended public and private keys (Xpub/Xpriv) to clearer names and removes old aliases. There is no security bug being fixed and no new vulnerability…

No security-relevant logic changePure API renaming/refactoringDeprecated method removal may break downstream callers at compile time
f8f053fdby Trevor Arjeski+61−852 files
No security note in commit
Informational 15 AI analysisMessage 60 · Adequate
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

internals: Bump version to 0.6.0

This commit is a routine version bump for the internal 'bitcoin-internals' crate from 0.5.0 to 0.6.0. It updates version numbers across package manifests and lock files, and adds a changelog describing API cleanups and small improvements. …

aed7a9ceby Tobin C. Harding+73−5616 files
No security note in commit
Informational 15 AI analysisMessage 68 · Adequate
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Remove hex dep from internals

This commit simply removes an unused software dependency (the hex-conservative crate) from the internals sub-package and updates related package configuration files. It is a routine cleanup change with no security relevance.

bd0d4bc0by Tobin C. Harding+8−118 files
No security note in commit
Informational 17 AI analysisMessage 73 · Adequate
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Replace external uses of base58 encoding with Base58CkString

This commit is a routine internal code cleanup in the rust-bitcoin project. It swaps old base58 encoding helper functions for a new equivalent type, Base58CkString, in three source files. There is no indication from the commit itself that …

No security-relevant signal in the diff: equivalent API swap onlyNo new dependencies or unsafe blocks introducedNo changes to input validation, parsing, or secret handling
7f5fbd13by Mitchell Bagot+10−103 files
No security note in commit
Informational 15 AI analysisMessage 68 · Adequate
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Add try_push to Buffer trait

This commit adds a new `try_push` method to an internal `Buffer` trait used during Base58 encoding. It is a straightforward, additive change that lets encoding code gracefully handle a full fixed-size buffer in no-allocation builds. There …

aafb6065by Mitchell Bagot+15−01 file
No security note in commit
Informational 15 AI analysisMessage 73 · Adequate
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

consensus_encoding: Rename _with decoder functions

This commit is a simple renaming of internal Rust functions from names ending in '_with' to names ending in '_with_decoder'. It does not change what the code does, only what the functions are called, to avoid confusion with another functio…

12325a67by Mitchell Bagot+18−174 files
No security note in commit
Informational 17 AI analysisMessage 63 · Adequate
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Move ScriptPubKeyBufExt to addresses

This commit is a routine internal code reorganization in the rust-bitcoin library. It moves a helper trait (ScriptPubKeyBufExt) and its functions from one internal module to another, and re-exports it so existing users see no change. There…

ed00d91aby Mitchell Bagot+92−552 files
No security note in commit
Informational 16 AI analysisMessage 50 · Thin
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

hashes: Deprecate sha256t_tag macro

This is a routine code-maintenance change: the developers are marking an old helper macro as deprecated and telling users how to write the same code by hand. There is no bug fix, no security patch, and no vulnerability being addressed in t…

ac921e97by jrakibi+26−123 files
No security note in commit
Informational 15 AI analysisMessage 45 · Thin
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

2026-07-05 automated rustfmt nightly

This commit is a routine automated code-formatting run by the rustfmt tool. It only changes whitespace, import order, and line breaks in five files. There are no functional changes, no bug fixes, and no security-related modifications.

673e5ee4by Fmt Bot+12−115 files
No security note in commit
Informational 15 AI analysisMessage 68 · Adequate
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

hashes: implement sha256t::Tag without the macro

This commit is a routine code cleanup in the rust-bitcoin library. It replaces a macro used to define SHA-256 tagged hash identifiers with direct Rust code that does the same thing. The actual hash values and behavior are unchanged; only t…

0131814dby jrakibi+30−133 files
No security note in commit
Informational 15 AI analysisMessage 95 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

ci: adapt default and no feature bip32 test for rbmt 0.4.0

This is a routine update to the project's automated testing configuration. A tool used to run example tests changed its syntax, so the developer updated one line to keep the same tests running the same way. There is no user-facing change a…

5f933d5cby satsfy (Renato Britto)+1−11 file
No security note in commit
Repository ledger

Explore captured commits

Expand any commit for its author, full message, clarity score, changed files, triage signals, analysis, and source link.

AI review queuedaddresses: Add pub externsby Mitchell Bagot · b734eec7 · Jul 27, 2026 · 1 fileMessage 58 · ThinTriage 0Details
Commit message · Mitchell Bagot

addresses: Add pub externs

If a dependency crate has types appearing in the public api of a crate,
that crate should be pub extern'd.

Add pub externs for all crates with types in the public api.

58/100 · ThinMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context
Why it was queued
second-pass: broader security terminology
Lower-priorityMove address module to single file in crateby Mitchell Bagot · af312700 · Jul 27, 2026 · 2 filesMessage 68 · AdequateTriage 0Details
Commit message · Mitchell Bagot

Move address module to single file in crate

The address::error module is now just a re-export for errors in the
addresses crate. It can be trivially inlined into the now much smaller
address module. With the smaller size of the address module, it can now
be moved to an address.rs file in the crate root.

Move address::error submodule inline in the parent address module.
Move address module subdirectory to address.rs file in crate root.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Lower-priorityFix lint errors in addresses crateby Mitchell Bagot · 7cade829 · Jul 27, 2026 · 1 fileMessage 80 · StrongTriage 0Details
Commit message · Mitchell Bagot

Fix lint errors in addresses crate

After the major move of types to addresses, various lint errors now
appear due to stricter lint requirements.

Adjust docs and code to resolve all lint errors in addresses.

80/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode
Lower-priorityMove address types to addressesby Mitchell Bagot · 889f5657 · Jul 27, 2026 · 8 filesMessage 68 · AdequateTriage 0Details
Commit message · Mitchell Bagot

Move address types to addresses

With the previous changes made, all of the address and error types can
now be moved to the addresses crate.

Move all address types to addresses and re-export in bitcoin.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Security candidateSplit Address into an extension traitby Mitchell Bagot · c900fa8c · Jul 27, 2026 · 3 filesMessage 73 · AdequateInformational 18Details
Commit message · Mitchell Bagot

Split Address into an extension trait

The Address::from_script function relies on Params in the function
signature. Since Params can't be moved to addresses or primitives, this
function should be left behind in an extension trait for now.

Introduce AddressExt extension trait and move minimal functionality
from Address into it.

73/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Names security-relevant behavior explicitly
Why it was queued
signing boundary
AI analysis · Informational 18/100

This commit is a routine code reorganization in the rust-bitcoin library. It moves the `Address::from_script` method out of the main `Address` type into a new 'extension trait' called `AddressExt`. The actual logic of the function is copied unchanged. This is a design change to resolve a dependency issue (the `Params` type cannot be moved into a lower-level crate), not a security fix.

Lower-priorityRemove all uses of extension traits from Addressby Mitchell Bagot · 16366bc2 · Jul 27, 2026 · 1 fileMessage 68 · AdequateTriage 0Details
Commit message · Mitchell Bagot

Remove all uses of extension traits from Address

The functions in Address currently use BuilderExt functions to simplify
their implementations. Since the underlying functionality already
exists in primitives, we can remove the dependence on bitcoin
functionality by adjusting the impls.

Remove all uses of BuilderExt from Address functions.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Lower-priorityChange ScriptBuf::default to call ScriptBuf::newby Mitchell Bagot · 92b08c5c · Jul 27, 2026 · 1 fileMessage 68 · AdequateTriage 0Details
Commit message · Mitchell Bagot

Change ScriptBuf::default to call ScriptBuf::new

According to C-CTOR, for types that implement Default and have a new
constructor, the two should have the same behaviour. While ScriptBuf
already satisfies this, regressions can be prevented by implementing
Default by calling new, rather than repeating the logic.

Adjust ScriptBuf Default impl to call through to ScriptBuf::new.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Security candidateci: update cargo-rbmt ever month instead of weekby Nick Johnson · 778018e1 · Jul 27, 2026 · 1 fileMessage 80 · StrongTriage 0Details
Commit message · Nick Johnson

ci: update cargo-rbmt ever month instead of week

The week updates have been too noisy with the rbmt churn, hoping the
monthly schedule gives us a poke if we fall behind, but isn't noisy.

80/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context
Why it was queued
boot or update pathdocumentation-only discount
Lower-prioritybitcoin: seal WorkExtby Nick Johnson · 73efa990 · Jul 26, 2026 · 1 fileMessage 51 · ThinTriage 0Details
Commit message · Nick Johnson

bitcoin: seal WorkExt

An un-sealed WorkExt exposes a non-additive feature. With the `std`
feature is enabled, a function is added without a default implementation.
Sealing the trait since it is not designed for consumers to implement.
This also makes it additive.

51/100 · ThinMessage clarity
✓ Subject identifies a change✓ Provides detailed explanatory context
Lower-priorityfuzz: fold fuzz-util.sh into generate-bins.shby Nick Johnson · b41211de · Jul 26, 2026 · 2 filesMessage 55 · ThinTriage 5Details
Commit message · Nick Johnson

fuzz: fold fuzz-util.sh into generate-bins.sh

55/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Mentions testing or verification! No meaningful explanatory body
Why it was queued
fuzzing or regression evidence
Lower-priorityfuzz: detach fuzz.sh from fuzz-util.sh, use cargo-fuzz insteadby Nick Johnson · 351903c5 · Jul 26, 2026 · 1 fileMessage 60 · AdequateTriage 5Details
Commit message · Nick Johnson

fuzz: detach fuzz.sh from fuzz-util.sh, use cargo-fuzz instead

60/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Mentions testing or verification! No meaningful explanatory body
Why it was queued
fuzzing or regression evidence
Lower-priorityfuzz: fold cycle.sh script into fuzz.shby Nick Johnson · a673433b · Jul 26, 2026 · 3 filesMessage 55 · ThinTriage 5Details
Commit message · Nick Johnson

fuzz: fold cycle.sh script into fuzz.sh

55/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Mentions testing or verification! No meaningful explanatory body
Why it was queued
fuzzing or regression evidence
Lower-priority2026-07-26 automated rustfmt nightlyby Fmt Bot · e4dc1996 · Jul 26, 2026 · 3 filesMessage 45 · ThinTriage 0Details
Commit message · Fmt Bot

2026-07-26 automated rustfmt nightly

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Lower-priorityAutomated update to Github CI to cargo-semver-checks version-0.49.0by Update cargo-semver-checks Bot · ac2a1b1d · Jul 25, 2026 · 1 fileMessage 50 · ThinTriage 0Details
Commit message · Update cargo-semver-checks Bot

Automated update to Github CI to cargo-semver-checks version-0.49.0

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
documentation-only discount
AI review queuedprimitives: update API filesby Nick Johnson · 2706ed4e · Jul 24, 2026 · 3 filesMessage 35 · OpaqueTriage 0Details
Commit message · Nick Johnson

primitives: update API files

35/100 · OpaqueMessage clarity
✓ Descriptive subject! No meaningful explanatory body
Why it was queued
documentation-only discountsecond-pass: opaque commit message
Lower-priorityci: move github label script under the github directoryby Nick Johnson · de0a0970 · Jul 24, 2026 · 2 filesMessage 62 · AdequateTriage 0Details
Commit message · Nick Johnson

ci: move github label script under the github directory

62/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope! No meaningful explanatory body
Why it was queued
documentation-only discount
Lower-priorityci: add a CI labeller workflow to handle labeling PRs from all branchesby Nick Johnson · 0290e6b0 · Jul 24, 2026 · 1 fileMessage 62 · AdequateTriage 0Details
Commit message · Nick Johnson

ci: add a CI labeller workflow to handle labeling PRs from all branches

62/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope! No meaningful explanatory body
Why it was queued
documentation-only discount
AI review queuedUse generic arguments for functionsby Mitchell Bagot · e887140a · Jul 23, 2026 · 4 filesMessage 68 · AdequateTriage 12Details
Commit message · Mitchell Bagot

Use generic arguments for functions

While most of primitives uses generic arguments where useful, there
are a couple of functions which can be adjusted to use generics to
specify argument requirements.

Adjust Block::compute_*_root and *MerkleNode::calculate_root functions
to use generics in place of slices and types.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
Lower-priorityRemove .clone() call in check_witness_commitmentby Mitchell Bagot · 3983cd3f · Jul 23, 2026 · 1 fileMessage 68 · AdequateTriage 0Details
Commit message · Mitchell Bagot

Remove .clone() call in check_witness_commitment

In Block::check_witness_commitment, clone is used to clone the first
transaction in the block. However, this transaction is only used in
ways that need a ref. Thus, the clone can be replaced by ref access.

Replace transaction clone with taking a ref in check_witness_commitment.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Lower-prioritytaproot-primitives: Enable crypto featuresby Mitchell Bagot · 8101f23d · Jul 23, 2026 · 1 fileMessage 68 · AdequateTriage 0Details
Commit message · Mitchell Bagot

taproot-primitives: Enable crypto features

The crypto dep of taproot-primitives is currently used with no features.
While no features are currently required for the limited use of crypto
in the crate, this may change, so the features of crypto should be
enabled based on the features of taproot-primitives.

Add feature enabling on crypto for all taproot-primitives features.y

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Lower-prioritycontrib: remove old test scripts stale referencesby satsfy (Renato Britto) · 069ff853 · Jul 22, 2026 · 5 filesMessage 78 · AdequateTriage 0Details
Commit message · satsfy (Renato Britto)

contrib: remove old test scripts stale references

The labeler config, gitignore, and label generator still reference
dep_test, run_task.sh, extra_tests.sh, and test_vars.sh, leftovers
from before cargo-rbmt.

Drop the dead entries and delete test_vars.sh, inlining the
CRATES list into test-miri.sh.

78/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
Lower-priorityprimitives: Document check_witness_commitmentby Tobin C. Harding · c150fd94 · Jul 22, 2026 · 1 fileMessage 50 · ThinTriage 0Details
Commit message · Tobin C. Harding

primitives: Document check_witness_commitment

Document the return type/value and the its later usage.

50/100 · ThinMessage clarity
✓ Descriptive subject✓ Provides an explanatory body
Lower-priorityfuzz: move rustflag handing into fuzz.shby Nick Johnson · 82c5ac0f · Jul 22, 2026 · 2 filesMessage 55 · ThinTriage 5Details
Commit message · Nick Johnson

fuzz: move rustflag handing into fuzz.sh

55/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Mentions testing or verification! No meaningful explanatory body
Why it was queued
fuzzing or regression evidence
Lower-priorityfuzz: update the generate-files script to only discover and manage binsby Nick Johnson · f9deb1c0 · Jul 22, 2026 · 2 filesMessage 60 · AdequateTriage 5Details
Commit message · Nick Johnson

fuzz: update the generate-files script to only discover and manage bins

60/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Mentions testing or verification! No meaningful explanatory body
Why it was queued
fuzzing or regression evidence
Lower-priorityfuzz: rename generate files scriptby Nick Johnson · 97f9d5a0 · Jul 22, 2026 · 4 filesMessage 70 · AdequateTriage 5Details
Commit message · Nick Johnson

fuzz: rename generate files script

The script only manages the `[[bin]]` sections in the manifest now.

70/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Mentions testing or verification
Why it was queued
fuzzing or regression evidence