featkpr
Private demo

What one pull request reaches, and a verdict on it.

Change impact analysis, per feature: what a pull request reaches, traced from its changed files before anyone runs it. featkpr reads the changed files against the map: the routes and checks they touch, the goals behind them and the tests that prove those goals. Then it gives a verdict from the goals the change proved or broke.

The first verdict, on a real pull request #

#6213 Hide image upload options in Image Manager when user lacks permissionBookStack, on Codeberg · read in a private mirror of the repository
verdict
needs a look
goals touched
2
goals proven
0
tests run on its code
none yet, on 27 Sep

On 27 Sep featkpr did not yet run a pull request's own code, so the verdict could only say which goals the change touches. On 28 Sep 2026 it did: the pull request's own code ran, isolated, beside BookStack's development tip, and 19 held, 5 were not proven and 0 broke. Held means the test passed before and after the change and failed as the wrong user. That result was not posted then: featkpr had no token to post with yet.

The pull request on Codeberg

How a change is traced #

From the changed files to the routes and page elements behind a permission, then to the cases under them and the tests that cover them. Shown on a saved run of another BookStack pull request, #6108, which added a permission to see page revisions.

featkpr's trace of a pull request: twelve changed files wired to the routes and template conditions behind a permission, then the cases under them, then a meter of BookStack's own tests to re-check
The trace of BookStack pull request #6108, on a saved run Open the screen at full size Screens of featkpr's app run on sample data, so the numbers inside them are examples, not BookStack's.
  1. Changed filescontrollers, the permission list, templates, language files and tests
  2. Behind a permissionthe routes and page elements those lines guard
  3. Casesa dot per case; a hollow one has no test yet, an amber one waits on a person
  4. Tests to re-checkthe product's own tests that touch the change, out of the whole suite

The list of tests is advice for a reviewer. featkpr runs nothing and skips nothing on a pull request yet. Pull request #6108 on Codeberg

Works today, and not yet #

Works today #

  1. How your app ships, drawn and approvedfeatkpr reads your branches, tags and merge history, proposes one of nine release flows with its evidence, and you fix the drawing and approve it. Then each arrow shows what featkpr does there.live 28 Sep; BookStack read as development → release, featkpr as dev → prod · since 28 Sep
  2. Features named from the codeModules and features named from the repository, each with the routes and permission checks behind it.298 features in 13 modules on BookStack · since 22 Sep
  3. A goal's record of proofEach goal keeps its own record, computed from runs: which tests prove it, and when they last did.since 27 Sep
  4. A test for each caseA test per case, written from a template, none by hand. They call the app directly.497 written so far; 311 ran on 20 Oct 2026, 03:18 UTC · since 26 Sep
  5. Apps hosted on GitHubApps on GitHub, followed by webhook; featkpr's own code is the first.since 28 Sep

Not yet #

  1. What a pull request reaches, and its verdictThe routes, goals and tests a change touches, then a verdict from the goals it proved and broke.the pull request's own code ran on BookStack #6213, 28 Sep 2026: 0 broke, 19 held, 5 not proven · decided, no week yet
  2. Where a goal counts as provenEach goal says where it was proven: a stage and an environment per product, never a plain "proven". The release flow it hangs on is live.decided, no week yet
  3. Keeps working when the code host is downA queue, a mirror of the repository and an operations page.decided, no week yet

Bring a pull request you worry about #

On a 30-minute call we show the verdict and the trace on BookStack, then look at what reading your pull requests would take.

The map a pull request is read against

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