graph TD
    classDef path fill:#eee,stroke:#000,color:#000
    classDef plan fill:#fff,stroke-width:3px,color:#000
    classDef itemplan fill:#fff,stroke-width:6px,color:#000
    classDef sideeffectplan fill:#f00,stroke-width:6px,color:#000
    classDef bucket fill:#f6f6f6,color:#000,stroke-width:6px,text-align:left


    %% define plans
    __Value0["__Value[0∈0]"]:::plan
    __Value3["__Value[3∈0]<br />ᐸcontextᐳ"]:::plan
    Access18["Access[18∈0]<br />ᐸ3.pgSettingsᐳ"]:::plan
    Access19["Access[19∈0]<br />ᐸ3.withPgClientᐳ"]:::plan
    Object20["Object[20∈0]<br />ᐸ{pgSettings,withPgClient}ᐳ"]:::plan
    PgSelect17[["PgSelect[17∈0]<br />ᐸforumsᐳ"]]:::plan
    __Item21>"__Item[21∈1]<br />ᐸ17ᐳ"]:::itemplan
    PgSelectSingle22["PgSelectSingle[22∈1]<br />ᐸforumsᐳ"]:::plan
    PgClassExpression23["PgClassExpression[23∈1]<br />ᐸ__forums__.”name”ᐳ"]:::plan
    PgClassExpression32["PgClassExpression[32∈1]<br />ᐸ__forums__.”id”ᐳ"]:::plan
    PgClassExpression37["PgClassExpression[37∈1]<br />ᐸ__forums__...chived_at”ᐳ"]:::plan
    PgSelect33[["PgSelect[33∈1]<br />ᐸmessagesᐳ"]]:::plan
    __Item38>"__Item[38∈2]<br />ᐸ33ᐳ"]:::itemplan
    PgSelectSingle39["PgSelectSingle[39∈2]<br />ᐸmessagesᐳ"]:::plan
    PgClassExpression40["PgClassExpression[40∈2]<br />ᐸ__messages__.”body”ᐳ"]:::plan
    PgClassExpression41["PgClassExpression[41∈2]<br />ᐸ__messages...author_id”ᐳ"]:::plan
    PgSelect42[["PgSelect[42∈2]<br />ᐸusersᐳ"]]:::plan
    First46["First[46∈2]"]:::plan
    PgSelectSingle47["PgSelectSingle[47∈2]<br />ᐸusersᐳ"]:::plan
    PgClassExpression48["PgClassExpression[48∈2]<br />ᐸ__users__.”username”ᐳ"]:::plan
    PgClassExpression49["PgClassExpression[49∈2]<br />ᐸ__users__....vatar_url”ᐳ"]:::plan

    %% plan dependencies
    __Value3 --> Access18
    __Value3 --> Access19
    Access18 & Access19 --> Object20
    Object20 --> PgSelect17
    PgSelect17 ==> __Item21
    __Item21 --> PgSelectSingle22
    PgSelectSingle22 --> PgClassExpression23
    PgSelectSingle22 --> PgClassExpression32
    PgSelectSingle22 --> PgClassExpression37
    Object20 & PgClassExpression32 & PgClassExpression37 --> PgSelect33
    PgSelect33 ==> __Item38
    __Item38 --> PgSelectSingle39
    PgSelectSingle39 --> PgClassExpression40
    PgSelectSingle39 --> PgClassExpression41
    Object20 & PgClassExpression41 --> PgSelect42
    PgSelect42 --> First46
    First46 --> PgSelectSingle47
    PgSelectSingle47 --> PgClassExpression48
    PgSelectSingle47 --> PgClassExpression49

    %% plan-to-path relationships
    P0["~"]
    __Value0 -.-> P0
    P17["ᐳforums"]
    PgSelect17 -.-> P17
    P22["ᐳforums[]"]
    PgSelectSingle22 -.-> P22
    P23["ᐳf…]ᐳname"]
    PgClassExpression23 -.-> P23
    P33["ᐳf…]ᐳmessagesList"]
    PgSelect33 -.-> P33
    P39["ᐳf…]ᐳmessagesList[]"]
    PgSelectSingle39 -.-> P39
    P40["ᐳf…]ᐳm…]ᐳbody"]
    PgClassExpression40 -.-> P40
    P47["ᐳf…]ᐳm…]ᐳauthor"]
    PgSelectSingle47 -.-> P47
    P48["ᐳf…]ᐳm…]ᐳa…rᐳusername"]
    PgClassExpression48 -.-> P48
    P49["ᐳf…]ᐳm…]ᐳa…rᐳgravatarUrl"]
    PgClassExpression49 -.-> P49

    subgraph "Buckets for queries/conditions/basics-with-author"
    Bucket0("Bucket 0 (root)<br />~<br />⠀ROOT ᐸ-O- 0<br />⠀⠀forums ᐸ-A- 17"):::bucket
    classDef bucket0 stroke:#696969
    class Bucket0,__Value0,__Value3,PgSelect17,Access18,Access19,Object20 bucket0
    Bucket1("Bucket 1 (item21)<br />Deps: 17, 20<br />~ᐳQuery.forums[]<br />⠀ROOT ᐸ-O- 22<br />⠀⠀name ᐸ-L- 23<br />⠀⠀messagesList ᐸ-A- 33"):::bucket
    classDef bucket1 stroke:#00bfff
    class Bucket1,__Item21,PgSelectSingle22,PgClassExpression23,PgClassExpression32,PgSelect33,PgClassExpression37 bucket1
    Bucket2("Bucket 2 (item38)<br />Deps: 33, 20<br />~ᐳQuery.forums[]ᐳForum.messagesList[]<br />⠀ROOT ᐸ-O- 39<br />⠀⠀body ᐸ-L- 40<br />⠀⠀author ᐸ-O- 47<br />⠀⠀⠀author.username ᐸ-L- 48<br />⠀⠀⠀author.gravatarUrl ᐸ-L- 49"):::bucket
    classDef bucket2 stroke:#7f007f
    class Bucket2,__Item38,PgSelectSingle39,PgClassExpression40,PgClassExpression41,PgSelect42,First46,PgSelectSingle47,PgClassExpression48,PgClassExpression49 bucket2
    Bucket0 --> Bucket1
    Bucket1 --> Bucket2
    end
