featkpr
Private demo

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.

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.

  1. 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:287
    • view('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.

    The feature map

    featkpr's page for the revisions feature: what it is, the three words it is known by with file and line, and the route it lives on with its real screen
    featkpr's page for this feature (sample data, where it still carries its first draft name)
  2. 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.

    1. GET /
    2. GET /books/{bookSlug}/page/{pageSlug}
    • GET …/revisions
    • GET …/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

    User flows

    BookStack's Page Revisions screen on the throwaway copy: three revisions of a seeded page, each with Changes, Preview, Restore and Delete
    BookStack's own screen at the end of the flow, as the crawl captured it · GET …/revisions
  3. 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

    How the review works

    featkpr's review panel for one drafted flow: read the goal, walk the steps, see the result, decide, then Keep as a flow or Not a flow
    the review panel, shown on another flow, Create a book (sample data)
  4. 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

    Change impact

    featkpr's trace of pull request #6108: its changed files wired to the revision routes and template conditions behind the new permission, then the cases under them, then the share of BookStack's own tests to re-check
    the trace of #6108, the change that made revisions a permission (a saved run, sample data)
  5. 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.

  6. 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

    Tests on the map

    featkpr's list of the revisions feature's cases: the revision list, one revision and the changes between revisions, each with and without the permission, all covered
    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.

  1. 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
  2. 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
  3. 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
  4. 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.

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.

↑ ↓ to move, Enter to open, Esc to close