Jadpo is experimental and not ready for production. These docs follow the compiler's main branch as of 30 Oct 2026. What's built · Install 0.1.0
jadpo
Reference: Debugging and review

Debugging and review

jadpo why: why the language decided something

Much of what surprises people in Jadpo is a decision the language made for them: policy hid a record, a lifecycle filtered it out, a subscriber didn't run, or a cache answered. jadpo why explains one such decision from what the compiler knows and what was recorded, and it says so when it doesn't know.

It covers:

  • policy: which grant lists were checked against which facts (Policy);
  • lifecycle: a record that normal reads don't see, such as one that was soft-deleted (Lifecycle);
  • concealment: a record policy hid by answering as if it didn't exist (Concealing records);
  • cache use: a read served from a cached copy;
  • subscriber runs: which subscribers ran for an event, and why others didn't (Subscribers).

Give it a request, event or delivery id (jadpo why <id>), or a record and a caller (jadpo why <Entity> <id> --as <user>):

text
$ jadpo why req_0b1eGET /todos/0192… answered 404 todo_not_found  Todo 0192… exists, but policy concealed it (area 4: hidden looks absent)  read: [owner_id]          owner_id is user 0192…a7; caller is user 0192…c3   no match  policy   domains/planning/entities/todo.jadpo:14$ jadpo why Todo 0192…f1 --as 0192…a7Todo 0192…f1 is not visible to normal reads  lifecycle visible: deleted_at == none   deleted_at is 2026-10-11T08:02:00Z  purged after config.soft_delete_retention (30d), on 2026-11-10  lifecycle  domains/planning/entities/todo.jadpo:22$ jadpo why evt_7c21TodoCompleted from req_9a40 (complete_todo, committed)  update_statistics   succeeded, 1 attempt, 12 ms  send_reminder       not subscribed: listens for ReminderDue$ jadpo why req_5d3e --query todos_for_ownertodos_for_owner served from cache `cache` (age 14 s, keep: 60 s)  display read on GET /todos; your own write was older than the copy (area 6)

Each answer ends with the .jadpo place that made the decision. On your machine, jadpo why reads what jadpo dev recorded and the local database. For production, it reads a log event you exported, as jadpo incident does, so it can only explain what the logs recorded.

Markdown for agents: /docs/explain-a-decision.md.Built from Jadpo main at a707efb.