Where things diverge

One row per type or operator, one dot per executed check, coloured by outcome. Sorted worst first, so the clusters are the top of each table.

all agreeRaku++ differsdocumentation staleRaku++ matches the docs, Rakudo does notall three differnot run

Over time #

One point per regeneration of the data, oldest first. The history is kept append-only in src/data/history.jsonl, so this chart can be replaced by something richer without losing the record.

okrakupp-differsdoc-driftrakudo-differsall-differ
peak 8532026-07-252026-07-27

Types

Each dot is one example from the official documentation, run on both engines and compared against the output the documentation asserts.

TypenagreeR++docrkalloutcome
Cool996213015
routines51243728
Any967454111
IO::CatHandle2128
List100812216
Str8971482
Baggy33211115
Enumeration16427
Pair30193312
IO::Handle122414
DateTime32232511
Code16814
Mu33253112
Parameter2517413
Promise91312
Range3527312
Attribute15832
BagHash114124
Hash34271113
IO::Path342715
Iterator181132
Array251932
Bag82411
Buf1711221
Dateish272124
Instant642
Setty159122
Blob149113
Seq1385
SetHash116221
Signature514
Supply20153
Bool95112
Capture161211
Failure1062
IO::Spec::Win322117211
Junction181413
Mix841111
MixHash7322
Nil10631
Routine62112
Sub5121
Backtrace312
CompUnit::Repository::FileSystem31
CompUnit::Repository::Installation3
Compiler32
Complex171412
Grammar412
Int14111
Label633
Map161311
Metamodel::ClassHOW413
Scalar12921
Set85111
Thread31
Unicode312
Allomorph5311
Associative4211
CallFrame21
ComplexStr21
IO::Spec::Unix181611
Kernel312
Metamodel::MethodDelegation21
Metamodel::Mixins312
Metamodel::ParametricRoleGroupHOW22
Metamodel::ParametricRoleHOW22
Metamodel::Stashing22
Metamodel::TypePretense211
Proc::Async22
QuantHash312
Real421
Sequence21
ValueObjAt211
Variable421
WhateverCode21
X::Bind::Slice22
Backtrace::Frame11
Collation11
Exception211
ForeignCode11
Format541
HyperSeq11
HyperWhatever431
IO::Path::Parts431
IO::Special321
IntStr211
Iterable541
Lock211
Match14131
Metamodel::C3MRO211
Metamodel::ConcreteRoleHOW11
Metamodel::EnumHOW11
Metamodel::MethodContainer211
Metamodel::MultipleInheritance11
Metamodel::PackageHOW11
Metamodel::Primitives11
Method43
Num981
NumStr211
Positional11
PositionalBindFailover21
Proc21
Proxy11
PseudoStash11
RaceSeq11
RatStr211
Rational43
Signal11
Slip431
Stash11
StrDistance541
Systemic211
Version1091
Whatever431
X::AdHoc11
X::Assignment::RO11
X::Cannot::Empty11
X::ControlFlow11
X::ControlFlow::Return11
X::Dynamic::NotFound11
X::Method::InvalidQualifier11
X::Numeric::DivideByZero11
X::Numeric::Real11
X::OutOfRange11
X::Phaser::PrePost11
X::Proc::Async::AlreadyStarted11
X::Proc::Async::CharsOrBytes11
X::Proc::Async::MustBeStarted11
X::Proc::Async::OpenForWriting11
X::Proc::Async::TapBeforeSpawn11
X::Str::Numeric11
X::TypeCheck::Splice11
Block55
Callable22
Channel55
Date1616
Endian11
FatRat11
Formatter22
IO::Spec::Cygwin99
IO::Spec::QNX33
Metamodel::DefiniteHOW33
Metamodel::Naming11
Metamodel::RolePunning11
Metamodel::Versioning22
Numeric11
ObjAt11
Rat44
Regex22
Routine::WrapHandle11
Submethod11
Test11
X::Channel::ReceiveOnClosed11
X::Channel::SendOnClosed11
X::Constructor::Positional11
X::Control11
X::Eval::NoSuchLang11
X::Mixin::NotComposable11
X::NoDispatcher11
X::Numeric::CannotConvert11
X::Str::Match::x11
X::Temporal::InvalidFormat11
X::TypeCheck::Assignment11
X::TypeCheck::Binding11
X::TypeCheck::Return11
utf811

Operators

Each dot is the same expression run on both engines. Only operators with at least one disagreement are listed.

Operatornagreedifferboth rejectoutcome
but infix77
^ prefix66
~^ prefix66
... infix743
+< infix7421
+^ infix752
mod infix7421
!= infix761
% infix7511
+& infix761
+> infix761
+| infix761
=> infix761
?^ infix761
X infix761
Z infix761
^ infix761
^ff infix761
^ff^ infix761
^fff infix761
^fff^ infix761
andthen infix761
coll infix761
div infix7511
does infix716
ff infix761
ff^ infix761
fff infix761
fff^ infix761
max infix761
min infix761
minmax infix761
notandthen infix761
unicmp infix761
x infix761
xx infix761
~ infix761
~^ infix761
infix761
infix761
infix761
infix761
infix761
infix761
infix761
infix761
+ prefix6411
+^ prefix651
- prefix6411
let prefix615
temp prefix615