Docs & Rules

instituutnederlandsetaal/BlackLabGitHubLast 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

1 name in these docs no longer matches the code.

dev0addd34listed 20h ago

Is this yours? Install to manage it

Once installed, Striff checks every pull request.

32
21
21
1 stale18
3
11
11
11
11
4
7
35 docs, listed Oct 2
instituutnederlandsetaal/BlackLabOpen repository

Names these docs write that the code no longer has1

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.

  • GoneBLSpansWrapper
    BLSpansWrapper (always pass but it's a BLSpans now)

    The repository once held engine/src/main/java/nl/inl/blacklab/search/lucene/BLSpansWrapper.java. It doesn't now.

    View on GitHub

instituutnederlandsetaal/BlackLab — documented rules

32 of 32 rules, printed October 3, 2026.

The sentence in your docs
Read Oct 2
text-pattern could eventually become unnecessary as we move their functionality into the various SpanQuery classes, and could then be moved to contrib for legacy uses.
BlackLabEngine has searchExecutorService
Holds
Read Oct 2
BLSpanQuery adds an optimize method that is run first.
BLSpanQuery has an optimize method
Holds
Read Oct 2
optimize() is only implemented by SpanQuerySequence for now.
SpanQuerySequence has an optimize method
Holds
Read Oct 2
BlackLabEngine is the class that manages the BlackLab search threads. It has a searchExecutorService that search threads can be submitted to. The open and openForWriting methods can be used to open indexes.
BlackLabEngine has an open method
Holds
Read Oct 2
BlackLabEngine is the class that manages the BlackLab search threads. It has a searchExecutorService that search threads can be submitted to. The open and openForWriting methods can be used to open indexes.
BlackLabEngine has an openForWriting method
Holds
Read Oct 2
BlackLabIndex represents a single opened index. You can use it to search the index directly using methods like find(BLSpanQuery), or you can construct a Search description using the search() methods and then either execute it synchronously using Search.execute() or go through the cache using Search.executeAsync().
BlackLabIndex has a find method
Holds
Read Oct 2
BlackLabIndex represents a single opened index. You can use it to search the index directly using methods like find(BLSpanQuery), or you can construct a Search description using the search() methods and then either execute it synchronously using Search.execute() or go through the cache using Search.executeAsync().
BlackLabIndex has a search method
Holds
Read Oct 2
SearchResult is the base interface that all types of results objects implement: Hits (and its subclasses like HitsFromQueryParallel), HitGroups, DocResults, Facets, etc.
SearchResult is a contract
Holds
Read Oct 2
SearchResult is the base interface that all types of results objects implement: Hits (and its subclasses like HitsFromQueryParallel), HitGroups, DocResults, Facets, etc.
HitGroups implements SearchResult
Holds
Read Oct 2
SearchResult is the base interface that all types of results objects implement: Hits (and its subclasses like HitsFromQueryParallel), HitGroups, DocResults, Facets, etc.
DocResults implements SearchResult
Holds
Read Oct 2
SearchResult is the base interface that all types of results objects implement: Hits (and its subclasses like HitsFromQueryParallel), HitGroups, DocResults, Facets, etc.
Facets implements SearchResult
Holds
Read Oct 2
These are the important interfaces and classes involved in BlackLab's cache system and BLS's implementation: Search<R extends SearchResult> and its subclasses can be used to build complete descriptions of search requests (e.g. a query for hits, with optional sorting, grouping, etc.). It has execute() and executeAsync() methods that execute the search task described by the "tree" of Searches.
Search has an execute method
Holds
Read Oct 2
These are the important interfaces and classes involved in BlackLab's cache system and BLS's implementation: Search<R extends SearchResult> and its subclasses can be used to build complete descriptions of search requests (e.g. a query for hits, with optional sorting, grouping, etc.). It has execute() and executeAsync() methods that execute the search task described by the "tree" of Searches.
Search has an executeAsync method
Holds
Read Oct 2
The different classes rely on each other's functionality, so SearchHitsSorted gets a SearchHits as a parameter and will call its execute method before sorting the hits produced by that.
SearchHitsSorted depends on SearchHits
Holds
Read Oct 2
Search<R>.executeAsync() calls SearchCache.getAsync(this), which will return a SearchCacheEntry<R extends SearchResult> that either has already completed (i.e. the results are actually in the cache from before) or will be executed and produce its results when the SearchCacheEntry (a Future) completes (i.e. wasn't in the cache but is now and is being or will be executed).
SearchCache is a contract
Holds
Read Oct 2
Its main two methods are get() and getAsync(), which take a search (subclass of Search<R extends SearchResult>, where R is the type of SearchResult we expect from the search).
SearchCache has a getAsync method
Holds
Read Oct 2
BlsCache implements SearchCache that manages the cache based on the amount of free Java heap memory to strive for, how long a search has been running, how long since results have been accessed, etc.
BlsCache implements SearchCache
Holds
Read Oct 2
BlsCacheEntry submits a Runnable to BlackLabEngine's searchExecutorService.
BlsCacheEntry depends on BlackLabEngine
Holds
Read Oct 2
SpanQuerySequence.optimize() (should be able to eliminate this as rewrite() does everything as well?)
SpanQuerySequence has an optimize method
Holds
Read Oct 2
BLSpanQuery.rewrite() (bulk of the optimizations) including ClauseCombiner (called from SpanQuerySequence.rewrite())
BLSpanQuery has a rewrite method
Holds
Read Oct 2
BLSpanQuery.rewrite() (bulk of the optimizations) including ClauseCombiner (called from SpanQuerySequence.rewrite())
SpanQuerySequence depends on ClauseCombiner
Holds
Read Oct 2
To do this, pass usecontent=orig to BlackLab Server, or call Hits.settings().setConcordanceType(ConcordanceType.CONTENT_STORE).
ConcordanceType has CONTENT_STORE
Holds
Read Oct 2
The AnnotationWriter.addValue(String) method adds a value to an annotation at the next corpus position.
AnnotationWriter has an addValue method
Holds
Read Oct 2
You can do so using the AnnotationWriter.addValueAtPosition(String, Integer) method.
AnnotationWriter has an addValueAtPosition method
Holds
Read Oct 2
Then use AnnotationWriter.addPayload().
AnnotationWriter has an addPayload method
Holds
Read Oct 2
the return value of the getId() method.
Plugin has a getId method
Holds
Read Oct 2
A plugin's name is just the value returned by getName().
Plugin has a getName method
Holds
Read Oct 2
From the initialize() method, you can access the configuration using either method like cfgString(key, defaultValue) or fullConfig() to get the full map.
Plugin has an initialize method
Holds
Read Oct 2
From the initialize() method, you can access the configuration using either method like cfgString(key, defaultValue) or fullConfig() to get the full map.
Plugin has a cfgString method
Holds
Read Oct 2
From the initialize() method, you can access the configuration using either method like cfgString(key, defaultValue) or fullConfig() to get the full map.
Plugin has a fullConfig method
Holds
Read Oct 2
then in the plugin's code (e.g. FileConverter.perform()), you can access the parameter value via e.g.
FileConverter has a perform method
Holds
Read Oct 2
Note that QueryFunction.applyFunc() is declared to return TextPattern.EvalResult.
QueryFunction has an applyFunc method
Holds
32 rules from 4 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.