git blame tells you who and when. This tells you why.
Why is this line here?
Understory reconstructs the reasoning behind a line of code — tracing commits, pull requests, and issues back to the decision that introduced it.
- Line 8.
export async function chargeCustomer(req) { - Line 9, investigated line.
for (let attempt = 0; attempt < 3; attempt++) {
- A, commit 92f6a3f, 15 Mar 2023, cited by clause 1, quote verified
- B, review review·dmitri-k, 14 Mar 2023, cited by clause 3, quote verified
- C, review review·ana-l, 12 Mar 2023, cited by clause 3
- D, pull request pr:812, open 9 → 15 Mar 2023, cited by clause 1 and 2. first revision: for (let attempt = 0; attempt < 5; attempt++) {
- E, issue issue:1187, 2 Mar 2023, cited by clause 2, quote verified
- F, commit 7be210e, 18 Jun 2021, not cited by any clause. Line read: while (true) {
- Not recorded: no pull request, review or issue before commit 7be210e
Why exactly 3 retries?
reconstructed why · read downward
- Supported by A, commit 92f6a3f; D, pull request pr:812. 1 quote verified.
- Supported by E, issue issue:1187; D, pull request pr:812. 1 quote verified.
- Supported by B, review review·dmitri-k; C, review review·ana-l. 1 quote verified.
Why exactly 3 retries?
reconstructed why · read downward
- Supported by A, commit 92f6a3f; D, pull request pr:812. 1 quote verified.
- Supported by E, issue issue:1187; D, pull request pr:812. 1 quote verified.
- Supported by B, review review·dmitri-k; C, review review·ana-l. 1 quote verified.
- Line 8.
export async function chargeCustomer(req) { - Line 9, investigated line.
for (let attempt = 0; attempt < 3; attempt++) {
- A, commit 92f6a3f, 15 Mar 2023, cited by clause 1, quote verified
- B, review review·dmitri-k, 14 Mar 2023, cited by clause 3, quote verified
- C, review review·ana-l, 12 Mar 2023, cited by clause 3
- D, pull request pr:812, open 9 → 15 Mar 2023, cited by clause 1 and 2. first revision: for (let attempt = 0; attempt < 5; attempt++) {
- E, issue issue:1187, 2 Mar 2023, cited by clause 2, quote verified
- F, commit 7be210e, 18 Jun 2021, not cited by any clause. Line read: while (true) {
- Not recorded: no pull request, review or issue before commit 7be210e
Not a chat about your repo. A record you can audit.
evidence > assertionsAfter 212 customers were charged twice
- E · issue:1187
- D · pr:812
Every clause points to its sources
Each statement carries the letters of the artifacts behind it. The conclusion is an index to the record.
Stripe returned 504s and 212 customers were charged twice.
✓ Quote found verbatim in issue:1187pr:9999· not in evidence, rejectedCitations are checked, not trusted
A deterministic check finds every quote in its source. A fabricated reference is caught before you see it.
7be210e · direct commit∅ no pull request, review or issuereason: not recorded
It admits a cold trail
When history doesn't explain a line, the gap is shown as a gap, never filled with a plausible story.
From a line you don't understand to the decision behind it.
- Line 8.
export async function chargeCustomer(req) { - Line 9, investigated line.
for (let attempt = 0; attempt < 3; attempt++) { - Line 10.
try {
01Point at a line
Open a GitHub repo, find a file by name or symbol, and select the exact line in question.
- Line 8.
02Follow the trail down
Blame finds the commit; the pull request, reviews and issues behind it carry the reasoning, placed at their real depth in time.
Capped at 3, with backoff
Why it retries at all: not recorded
03Read the reconstruction
A reconstructed why, each clause tied to a source you can open, or an honest “the record is silent.”
Interrogate your own code.
Point it at a repository and a line. See what the history really says.