What featkpr gives your app, followed on one real feature.
BookStack's page revision history: where it lives in the code, the ways people reach it, the person who keeps, drops or rewrites each flow, and what a change to it touches. Then what runs on top of that map: its tests.
BookStack: crawl at commit 0f5164ec, latest run on v26.09's code (1633b3ab) · featkpr's records, exported 20 Oct 2026
One feature, service by service #
Each stop is one service and what it gave this feature, with a real screen and one number from BookStack.
EntitiesView page revision history
BookStack keeps every saved version of a page. This feature lists them, opens one and shows what changed between two. We picked it because featkpr holds the most about it: its routes, its words in the code, the flows that reach it, a change that touched it and a test for each of its cases.
featkpr's own screens below run on sample data, so the numbers inside them are examples. The numbers in the text are BookStack's, from featkpr's records exported 20 Oct 2026.
-
Feature maplive since 22 Sep
Where it lives, in the code's own words #
featkpr reads BookStack's code at one commit and names the feature in the Entities module, one of 13. It knows the routes it lives on and the words the code uses for it, each with its file and line.
its routes, under
GET /books/{bookSlug}/page/{pageSlug}…/revisions…/revisions/{revId}…/revisions/{revId}/changes
its words in the code
revision-view-allapp/Permissions/Permission.php:121'Page Revisions'lang/en/entities.php:287view('pages.revisions')app/Entities/Controllers/PageRevisionController.php:54
BookStack v26.05.5 · commit 771a2d04
5routes it lives on, of 343 read on BookStackfeatkpr's records, exported 20 Oct 2026
The data it shares with other features, the tables and models they both use: being built. Which features lead into it is held already, in the Flows tree.

featkpr's page for this feature (sample data, where it still carries its first draft name) -
User flowslive since 25 Sep
The ways people reach it #
featkpr crawls a throwaway copy of BookStack and joins the screens into flows from the home page. Three end on this feature: open a page, open its revisions, then one revision or the changes between two. Each flow's goal is drafted from where it ends.
GET /GET /books/{bookSlug}/page/{pageSlug}
GET …/revisionsGET …/revisions/{revId}GET …/revisions/{revId}/changes
4flows end on it, of 149 drafted, ending at 89 featurescrawl of 25 Sep 2026 as the Admin · flows read 20 Oct 2026

BookStack's own screen at the end of the flow, as the crawl captured it · GET …/revisions -
The reviewwaits on a person
A person keeps it, drops it or rewrites it #
Nothing is tested from a flow until a person keeps it. Keep one and it is recorded, with what must hold on the way. Say it is not a flow and it is never offered again. Or rewrite its goal in your own words. One question at a time, with the real screens beside it.
148of 149 BookStack flows wait on a person, these 4 among themthe Flows board, read 20 Oct 2026

the review panel, shown on another flow, Create a book (sample data) -
Change impactplanned decided, no week yet
What a change to it touches #
BookStack's pull request #6108 made seeing revisions a permission of its own. featkpr traced its changed files to the routes and page elements behind that permission, then to the cases under them and the tests to re-check. The first verdict went up on #6213, a change to image uploads, on 27 Sep 2026; on 28 Sep 2026 that pull request's own code ran.
19held when #6213's own code ran: 0 broke, 5 not proventhe run of 28 Sep 2026, beside BookStack's development tip; the first verdict, 27 Sep 2026, had run nothing

the trace of #6108, the change that made revisions a permission (a saved run, sample data) -
On top of the map #
Once the feature is on the map and a person has decided on it, anything can read it. Tests run today, each sent again as the wrong user to prove it checks something.
-
Tests on the maplive since 26 Sep
A test for each of its cases, proven to check something #
Each route and each permission check on it gives cases: with the permission the list opens, without it BookStack refuses. featkpr writes one test per case from a template, none by hand; today in Python with pytest, other frameworks are on the plan. Then each test is sent again as the wrong user, and must fail. The test "refused without page-view, with revision-view-all" expects BookStack to hide the revision list; sent again as the Admin, who got through, it failed, as it must.
a user holding only revision-view-all404 Page not foundpasses
the Admin, sent the same requestgets throughfails, as it must
a recorded test on BookStack at commit 0f5164ec, 26 Sep (sample data)
28of its 28 cases have a test that passed in the latest runfeatkpr's records, exported 20 Oct 2026 · commit 045c6a98

its cases, as featkpr lists them (sample data)
Later, on the same map #
Each of these reads the same feature. They come from our plan; the board says when.
- Tests through a browser The flows a person keeps, run in a browser. Today every test calls the app directly.decided, no week yet
- A wrong user for every test A seeded user without the permission for each test that expects to get in, so none stays unchecked.decided, no week yet
- Every state change traced Queries, cache, queues and logs during each state change a test makes.decided, no week yet
- Performance budgets per goal Page speed and web vitals per goal, once browser flows exist.an idea, raised 27 Sep
The four services #
Each reads the same map. Each keeps one line of state from our plan; the roadmap lists every part.
- Feature map Every feature, named from the code, with its routes, checks and real screens.
What does our product actually do, feature by feature, and where is each one in the code?
298features in 13 modules named on BookStack live since 22 Sep · 4 more live · 3 plannedIts parts on the roadmap - User flows The ways people reach each goal, screen by screen, for you to keep or drop.
Which ways do people reach each goal, and which screens do they pass?
149flows ending at 89 features drafted on BookStack live since 25 Sep · 3 more live · 3 plannedIts parts on the roadmap - Change impact What one pull request reaches, from its changed files, and a verdict on it.
This pull request is big. Which features, goals and tests does it reach?
#6213the first verdict, on a real BookStack pull request planned decided, no week yet · 5 more live · 2 plannedIts parts on the roadmap - Tests on the map on top of the map A test for each case on the map, written from a template, each sent again as the wrong user to prove it checks something.
Can we get a test for every case on the map without writing them by hand?
497tests written for BookStack so far, none by hand live since 26 Sep · 4 more live · 5 plannedIts parts on the roadmap
Coming on the same map #
Each reads the map your team approved. Its state is our plan's, and the roadmap says when.
- Telemetry, and what each test changed Rows written, mail sent, files downloaded and calls to other hosts, recorded while each test runs, then your product's own telemetry. planned
- Feature flags and errors you already track Flags and error reports from the tools you use, read beside each goal. planned
- A user guide, written from the map Every goal as steps with screens, who can do it, and where it fails. next
- Tests in any framework The same cases written in TypeScript, and for Selenium and Cucumber, beside pytest. planned
- Any stack PHP, Python and React are read today; Node and Django readers come next. planned
What featkpr needs from you #
- Your repository
- read at one commit: routes, handlers, checks, templates and words
- A copy of the app we can start
- a throwaway one, with a user per role; the crawl and the tests run against it, never your servers
- A pull request
- only for change impact: its changed files, read against the map
Which feature of your app would you follow first? #
Today we set up each app ourselves, from your repository and a test copy. Adding an app yourself was decided on 28 Sep and is being built: paste its address, give one token, follow a setup list. On a 30-minute call we follow a BookStack feature live, then look at what yours would take.