Docs & Rules

Netflix/mantisGitHubLast refreshed Oct 2, 2026

This is a public, read-only report. Striff reads this repository's docs, turns each sentence that makes a claim about the code into a rule, and checks the rule against the code on the default branch. How this works

2 names in these docs no longer match the code.

masterfec205elisted 13h ago

Is this yours? Install to manage it

Once installed, Striff checks every pull request.

60
8
8
52
52
22
13
13
9
8
5
3
1 stale
1 stale1
21
19
18
1
2
9
9
31 docs, listed Oct 2
Netflix/mantisOpen repository

Names these docs write that the code no longer has2

Each sentence below names a type the default branch doesn't declare, or declares somewhere else. Edit the doc so it matches the code, or bring the type back.

  • GoneReduceFunctionImpl
    .reduce((ReduceFunctionImpl<WordCountPair>) (acc, item) -> {

    The repository once held mantis-runtime/src/main/java/io/mantisrx/runtime/core/functions/ReduceFunctionImpl.java. It doesn't now. Closest names there: ReduceFunction, SimpleReduceFunction.

    View on GitHub

  • GoneReduceFunctionImpl
    .reduce((ReduceFunctionImpl<WordCountPair>) (acc, item) -> {

    The repository once held mantis-runtime/src/main/java/io/mantisrx/runtime/core/functions/ReduceFunctionImpl.java. It doesn't now. Closest names there: ReduceFunction, SimpleReduceFunction.

    View on GitHub

Netflix/mantis — documented rules

60 of 60 rules, printed October 3, 2026.

The sentence in your docs
Read Oct 2
ResourceClusterActor became a thin router: it now creates child actors for ReservationRegistryActor, ExecutorStateManagerActor, and AssignmentHandlerActor and forwards reservation messages and lifecycle updates to them (TaskExecutorRegistration, heartbeats, disable/enable, etc.).
ResourceClusterActor depends on ExecutorStateManagerActor
Holds
Read Oct 2
AssignmentHandlerActor now handles the RPC-heavy TaskExecutorAssignmentRequest lifecycle, reusing TaskExecutorGateway futures, enforcing retries, and reporting failures back to ResourceClusterActor so the queue can decide whether to requeue a reservation or propagate the failure downstream.
AssignmentHandlerActor depends on TaskExecutorGateway
Holds
Read Oct 2
ResourceClusterActor handles this by querying the registry for pending reservations, translating them into PendingReservationInfo, and forwarding them to the executor state manager before replying to the scaler.
ResourceClusterActor depends on PendingReservationInfo
Holds
Read Oct 2
the default scheduler factory implementation forwards that call to ResourceClustersAkkaImpl, which relays MarkReady.INSTANCE to every ResourceClusterActor.
ResourceClustersAkkaImpl depends on MarkReady
Holds
Read Oct 2
ResourceCluster interface gained upsertReservation, cancelReservation, and markRegistryReady defaults so clients can interact with reservations without leaking actor internals.
ResourceCluster has upsertReservation
Holds
Read Oct 2
ResourceCluster interface gained upsertReservation, cancelReservation, and markRegistryReady defaults so clients can interact with reservations without leaking actor internals.
ResourceCluster has cancelReservation
Holds
Read Oct 2
ResourceCluster interface gained upsertReservation, cancelReservation, and markRegistryReady defaults so clients can interact with reservations without leaking actor internals.
ResourceCluster has markRegistryReady
Holds
Read Oct 2
ResourceClusterActor->>ExecutorStateManager: findBestFit(...)
ResourceClusterActor depends on ExecutorStateManager
Holds
Read Oct 2
Name openSuccessCount, Type Counter, Description Number of times a file was successfully opened
WriterMetrics has openSuccessCount
Holds
Read Oct 2
Name openFailureCount, Type Counter, Description Number of times a file failed to open
WriterMetrics has openFailureCount
Holds
Read Oct 2
Name writeSuccessCount, Type Counter, Description Number of times an Iceberg Record was successfully written to a file
WriterMetrics has writeSuccessCount
Holds
Read Oct 2
Name writeFailureCount, Type Counter, Description Number of times an Iceberg Record failed to be written to a file
WriterMetrics has writeFailureCount
Holds
Read Oct 2
Name batchSuccessCount, Type Counter, Description Number of times a file was successfully flushed to produce a DataFile
WriterMetrics has batchSuccessCount
Holds
Read Oct 2
Name batchFailureCount, Type Counter, Description Number of times a file failed to flush
WriterMetrics has batchFailureCount
Holds
Read Oct 2
Name batchSize, Type Gauge, Description Number of Iceberg Records per writer flush as described within a DataFile
WriterMetrics has batchSize
Holds
Read Oct 2
Name batchSizeBytes, Type Gauge, Description Cumulative size of Iceberg Records from a writer flush
WriterMetrics has batchSizeBytes
Holds
Read Oct 2
Name invocationCount, Type Counter, Description Number of times a commit was invoked
CommitterMetrics has invocationCount
Holds
Read Oct 2
Name commitSuccessCount, Type Counter, Description Number of times a commit was successful
CommitterMetrics has commitSuccessCount
Holds
Read Oct 2
Name commitFailureCount, Type Counter, Description Number of times a commit failed
CommitterMetrics has commitFailureCount
Holds
Read Oct 2
Name commitLatencyMsec, Type Gauge, Description Time it took to perform the most recent commit
CommitterMetrics has commitLatencyMsec
Holds
Read Oct 2
Name commitBatchSize, Type Gauge, Description Cumulative size of DataFile s from a commit
CommitterMetrics has commitBatchSize
Holds
Read Oct 2
The GroupByStage implements ToGroupComputation<RequestEvent, String, RequestEvent> which tells Mantis that the call method will be returning MantisGroup<String, RequestEvent> which represents a group key and the data.
GroupByStage implements ToGroupComputation
Holds
Read Oct 2
The GroupByStage implements ToGroupComputation<RequestEvent, String, RequestEvent> which tells Mantis that the call method will be returning MantisGroup<String, RequestEvent> which represents a group key and the data.
GroupByStage has a call method
Holds
Read Oct 2
The GroupByStage implements ToGroupComputation<RequestEvent, String, RequestEvent> which tells Mantis that the call method will be returning MantisGroup<String, RequestEvent> which represents a group key and the data.
GroupByStage depends on MantisGroup
Holds
Read Oct 2
Notice how we still group by MantisGroup::getKeyValue.
MantisGroup has getKeyValue
Holds
Read Oct 2
We can see in the code below the stream is windowed for five seconds, then we flatmap a reduce over the window and invoke the RequestAggregationAccumulator#generateReport() method on the reduced value.
RequestAggregationAccumulator has a generateReport method
Holds
Read Oct 2
Our [TwitterSource](https://github.com/Netflix/mantis/blob/master/mantis-runtime/src/main/java/io/mantisrx/runtime/source/Source.java) must implement [io.mantisrx.runtime.source.Source](https://github.com/Netflix/mantis/blob/master/mantis-runtime/src/main/java/io/mantisrx/runtime/source/Source.java) which requires us to implement call and optionally init.
TwitterSource implements Source
Holds
Read Oct 2
Our [TwitterSource](https://github.com/Netflix/mantis/blob/master/mantis-runtime/src/main/java/io/mantisrx/runtime/source/Source.java) must implement [io.mantisrx.runtime.source.Source](https://github.com/Netflix/mantis/blob/master/mantis-runtime/src/main/java/io/mantisrx/runtime/source/Source.java) which requires us to implement call and optionally init.
TwitterSource has call
Holds
Read Oct 2
Our [TwitterSource](https://github.com/Netflix/mantis/blob/master/mantis-runtime/src/main/java/io/mantisrx/runtime/source/Source.java) must implement [io.mantisrx.runtime.source.Source](https://github.com/Netflix/mantis/blob/master/mantis-runtime/src/main/java/io/mantisrx/runtime/source/Source.java) which requires us to implement call and optionally init.
TwitterSource has init
Holds
Read Oct 2
MantisJobProvider#getJobInstance() provides the runtime with an entry point to your job's code.
MantisJobProvider has a getJobInstance method
Holds
Read Oct 2
Pass this method a Lifecycle object, that is to say, an object that implements the following methods: **startup()** — initialize arbitrary application configs, perform dependency injection, and any long running or shared service libraries.
Lifecycle has a startup method
Holds
Read Oct 2
of this class MantisStream ⟶, this method source() ⟶, returns an object of this class MantisStream
MantisStream has a source method
Holds
Read Oct 2
of this class MantisStream ⟶, this method sink() ⟶, returns an object of this class MantisStream
MantisStream has a sink method
Holds
Read Oct 2
of this class MantisStream ⟶, this method map, flatMap, ⟶, returns an object of this class MantisStream
MantisStream has a map method
Holds
Read Oct 2
of this class MantisStream ⟶, this method map, flatMap, ⟶, returns an object of this class MantisStream
MantisStream has a flatMap method
Holds
Read Oct 2
of this class MantisStream ⟶, this method keyBy() ⟶, returns an object of this class KeyedMantisStream
MantisStream has a keyBy method
Holds
Read Oct 2
of this class KeyedMantisStream ⟶, this method map, window, ⟶, returns an object of this class KeyedMantisStream
KeyedMantisStream has a map method
Holds
Read Oct 2
of this class KeyedMantisStream ⟶, this method map, window, ⟶, returns an object of this class KeyedMantisStream
KeyedMantisStream has a window method
Holds
Read Oct 2
of this class KeyedMantisStream ⟶, this method reduce ⟶, returns an object of this class MantisStream
KeyedMantisStream has a reduce method
Holds
Read Oct 2
of this class MantisJob ⟶, this method source() ⟶, returns an object of this class SourceHolder
MantisJob has a source method
Holds
Read Oct 2
of this class SourceHolder ⟶, this method stage() ⟶, returns an object of this class Stages
SourceHolder has a stage method
Holds
Read Oct 2
**shutdown()** — gracefully close connections, shut down long running or shared service libraries, and general process cleanup.
Lifecycle has a shutdown method
Holds
Read Oct 2
**getServiceLocator()** — returns a ServiceLocator that implements the service(key) method.
Lifecycle has a getServiceLocator method
Holds
Read Oct 2
<!-- A Validator has a description, available via its getDescription() method, and a validation function, available via its getValidator() method.
Validator has a getDescription method
Holds
Read Oct 2
<!-- A Validator has a description, available via its getDescription() method, and a validation function, available via its getValidator() method.
Validator has a getValidator method
Holds
Read Oct 2
<code>Validators.range(<var>start</var>, <var>end</var>)</code> — will reject as invalid Parameter values that do not lie between the indicated *start* and *end* numerical values (where *start* and *end* themselves are valid Parameter values)
Validators has a range method
Holds
Read Oct 2
Validators.notNullOrEmpty() — will reject empty strings or null values
Validators has a notNullOrEmpty method
Holds
Read Oct 2
Validators.alwaysPass() — will not reject any Parameter values as invalid
Validators has an alwaysPass method
Holds
Read Oct 2
[Here](https://github.com/Netflix/mantis-connectors/blob/master/mantis-connector-kafka/src/main/java/io/mantisrx/connector/kafka/source/KafkaSource.java) is an example in a source which implements the Source interface to consume data from Kafka.
KafkaSource implements Source
Holds
Read Oct 2
instead, Mantis will create and configure a JobMasterService. This service creates a subscription to worker metrics via the WorkerMetricHandler and a MetricsClient which receives metrics over HTTP via [SSE] and sends them over to the JobAutoScaler.
JobMasterService depends on WorkerMetricHandler
Holds
Read Oct 2
instead, Mantis will create and configure a JobMasterService. This service creates a subscription to worker metrics via the WorkerMetricHandler and a MetricsClient which receives metrics over HTTP via [SSE] and sends them over to the JobAutoScaler.
JobMasterService depends on MetricsClient
Holds
Read Oct 2
KeyedMantisStream —— It's keyed companion, that's used for streams partitioned by a key. In addition, it has window and reduce.
KeyedMantisStream has window
Holds
Read Oct 2
KeyedMantisStream —— It's keyed companion, that's used for streams partitioned by a key. In addition, it has window and reduce.
KeyedMantisStream has reduce
Holds
Read Oct 2
MantisStream —— primary interface for building data pipeline that has filter, map, flatMap, keyBy, materialize.
MantisStream has filter
Holds
Read Oct 2
MantisStream —— primary interface for building data pipeline that has filter, map, flatMap, keyBy, materialize.
MantisStream has map
Holds
Read Oct 2
MantisStream —— primary interface for building data pipeline that has filter, map, flatMap, keyBy, materialize.
MantisStream has flatMap
Holds
Read Oct 2
MantisStream —— primary interface for building data pipeline that has filter, map, flatMap, keyBy, materialize.
MantisStream has keyBy
Holds
Read Oct 2
MantisStream —— primary interface for building data pipeline that has filter, map, flatMap, keyBy, materialize.
MantisStream has materialize
Holds
Read Oct 2
public interface MapFunction<IN, OUT> extends MantisFunction { OUT apply(IN in); } ``
MapFunction extends MantisFunction
Holds
Read Oct 2
public interface SimpleReduceFunction<IN> extends ReduceFunction<IN, IN> { Object EMPTY = new Object();
SimpleReduceFunction extends ReduceFunction
Holds
60 rules from 9 docs

See these where the change is. The browser extension puts a pull request's doc findings, and a diagram of what it changed, on the GitHub page itself, so the code and what your docs say about it are side by side.