App map
`describe_app()` reads an app's `Feature()` contracts → its graph, live. This page runs it on a demo app. The same thing runs on yours through `describe_app(app.features)` — it cannot fall out of step, it is the running code, read.14 features4 routes18 dependencies
The same graph, DRAWN
`ui.diagram` lays a directed graph out in layers, rendered on the server — no drawing library, no canvas. The same nodes and the same edges as the tables below: it is `describe_app()` that supplies them, not a hand entry.shellshell
errorserror
settingspage
dashboardpage
reportingdata
boardpage
statspage
authlogic
moneylogic
realtimeinfra
tasksdata
usersdata
project_datadata
dbinfra
The features, by kind
shell1
shellshell
page4
dashboardpage
providesdashboard_page · page /
usesproject_datausersmoney
settingspage
providessettings_page · page /settings
usesusersauth
boardpage
providesboard_page · page /p/{id}
usesproject_datatasksrealtime
statspage
providesstats_page · page /p/{id}/stats
usesproject_datatasksmoney
data4
usersdata
providesUserRepo · function
usesdb
project_datadata
providesProjectRepo · function
usesdb
tasksdata
providesTaskRepo · function
usesdbproject_data
reportingdata
providesglobal_stats · function
readsproject_datausers
logic2
moneylogic
providesformat_price · function
authlogic
provideslogin_required · function
usesusers
infra2
dbinfra
realtimeinfra
providesbroadcast · function
error1
errorserror
Mounted routes
| Path | Feature |
|---|---|
| / | dashboard |
| /p/{id} | board |
| /p/{id}/stats | stats |
| /settings | settings |
The map, machine-readable
`describe_app(app.features).to_dict()` — what an AI reads to understand the app's shape, instead of grepping.{
"nodes": [
{
"name": "shell",
"kind": "shell",
"provides": [],
"uses": [],
"reads": [],
"path": [],
"module": "examples.docs.features.app_map",
"renderable": false,
"render_parent": "",
"optimal_parent": ""
},
{
"name": "errors",
"kind": "error",
"provides": [],
"uses": [],
"reads": [],
"path": [],
"module": "examples.docs.features.app_map",
"renderable": false,
"render_parent": "",
"optimal_parent": ""
},
{
"name": "db",
"kind": "infra",
"provides": [],
"uses": [],
"reads": [],
"path": [],
"module": "examples.docs.features.app_map",
"renderable": false,
"render_parent": "",
"optimal_parent": ""
},
{
"name": "money",
"kind": "logic",
"provides": [
{
"label": "format_price",
"kind": "function",
"detail": "",
"module": "examples.docs.features.app_map"
}
],
"uses": [],
"reads": [],
"path": [],
"module": "examples.docs.features.app_map",
"renderable": false,
"render_parent": "",
"optimal_parent": ""
},
{
"name": "realtime",
"kind": "infra",
"provides": [
{
"label": "broadcast",
"kind": "function",
"detail": "",
"module": "examples.docs.features.app_map"
}
],
"uses": [],
"reads": [],
"path": [],
"module": "examples.docs.features.app_map",
"renderable": false,
"render_parent": "",
"optimal_parent": "board"
},
{
"name": "users",
"kind": "data",
"provides": [
{
"label": "UserRepo",
"kind": "function",
"detail": "",
"module": "examples.docs.features.app_map"
}
],
"uses": [
"db"
],
"reads": [],
"path": [],
"module": "examples.docs.features.app_map",
"renderable": false,
"render_parent": "",
"optimal_parent": ""
},
{
"name": "auth",
"kind": "logic",
"provides": [
{
"label": "login_required",
"kind": "function",
"detail": "",
"module": "examples.docs.features.app_map"
}
],
"uses": [
"users"
],
"reads": [],
"path": [],
"module": "examples.docs.features.app_map",
"renderable": false,
"render_parent": "",
"optimal_parent": "settings"
},
{
"name": "project_data",
"kind": "data",
"provides": [
{
"label": "ProjectRepo",
"kind": "function",
"detail": "",
"module": "examples.docs.features.app_map"
}
],
"uses": [
"db"
],
"reads": [],
"path": [],
"module": "examples.docs.features.app_map",
"renderable": false,
"render_parent": "",
"optimal_parent": ""
},
{
"name": "tasks",
"kind": "data",
"provides": [
{
"label": "TaskRepo",
"kind": "function",
"detail": "",
"module": "examples.docs.features.app_map"
}
],
"uses": [
"db",
"project_data"
],
"reads": [],
"path": [],
"module": "examples.docs.features.app_map",
"renderable": false,
"render_parent": "",
"optimal_parent": ""
},
{
"name": "dashboard",
"kind": "page",
"provides": [
{
"label": "dashboard_page",
"kind": "page",
"detail": "/",
"module": "examples.docs.features.app_map"
}
],
"uses": [
"project_data",
"users",
"money"
],
"reads": [],
"path": [],
"module": "examples.docs.features.app_map",
"renderable": true,
"render_parent": "",
"optimal_parent": ""
},
{
"name": "settings",
"kind": "page",
"provides": [
{
"label": "settings_page",
"kind": "page",
"detail": "/settings",
"module": "examples.docs.features.app_map"
}
],
"uses": [
"users",
"auth"
],
"reads": [],
"path": [],
"module": "examples.docs.features.app_map",
"renderable": true,
"render_parent": "",
"optimal_parent": ""
},
{
"name": "board",
"kind": "page",
"provides": [
{
"label": "board_page",
"kind": "page",
"detail": "/p/{id}",
"module": "examples.docs.features.app_map"
}
],
"uses": [
"project_data",
"tasks",
"realtime"
],
"reads": [],
"path": [],
"module": "examples.docs.features.app_map",
"renderable": true,
"render_parent": "",
"optimal_parent": ""
},
{
"name": "stats",
"kind": "page",
"provides": [
{
"label": "stats_page",
"kind": "page",
"detail": "/p/{id}/stats",
"module": "examples.docs.features.app_map"
}
],
"uses": [
"project_data",
"tasks",
"money"
],
"reads": [],
"path": [],
"module": "examples.docs.features.app_map",
"renderable": true,
"render_parent": "",
"optimal_parent": ""
},
{
"name": "reporting",
"kind": "data",
"provides": [
{
"label": "global_stats",
"kind": "function",
"detail": "",
"module": "examples.docs.features.app_map"
}
],
"uses": [],
"reads": [
"project_data",
"users"
],
"path": [],
"module": "examples.docs.features.app_map",
"renderable": false,
"render_parent": "",
"optimal_parent": ""
}
],
"routes": [
[
"/",
"dashboard"
],
[
"/p/{id}",
"board"
],
[
"/p/{id}/stats",
"stats"
],
[
"/settings",
"settings"
]
],
"edges": [
[
"users",
"db",
"uses"
],
[
"auth",
"users",
"uses"
],
[
"project_data",
"db",
"uses"
],
[
"tasks",
"db",
"uses"
],
[
"tasks",
"project_data",
"uses"
],
[
"dashboard",
"project_data",
"uses"
],
[
"dashboard",
"users",
"uses"
],
[
"dashboard",
"money",
"uses"
],
[
"settings",
"users",
"uses"
],
[
"settings",
"auth",
"uses"
],
[
"board",
"project_data",
"uses"
],
[
"board",
"tasks",
"uses"
],
[
"board",
"realtime",
"uses"
],
[
"stats",
"project_data",
"uses"
],
[
"stats",
"tasks",
"uses"
],
[
"stats",
"money",
"uses"
],
[
"reporting",
"project_data",
"reads"
],
[
"reporting",
"users",
"reads"
]
]
}