# evidence 251 — messaging-leaf-registry-and-memberships
# revision: a24ece9cf797f7ea647e33bf846b115208ed1ba5
# cwd: /shared/codebase/clean-architecture-backend-template/src/messaging
# command: cd /shared/codebase/clean-architecture-backend-template && python3 - <<PY
import json,io,subprocess
d=json.load(io.open("src/config/architecture/modules.json"))
rows=[]
def w(o):
    if isinstance(o,dict):
        if isinstance(o.get("id"),str) and o.get("gradle_path","").startswith(":messaging:"):
            rows.append((o["id"],o["source_path"],o.get("runtime_memberships"),len(o.get("allowed_dependencies") or [])))
        for v in o.values(): w(v)
    elif isinstance(o,list):
        [w(v) for v in o]
w(d)
tot=0
print("leaves:",len(rows))
for i,(a,b,c,n) in enumerate(sorted(rows),1):
    f=len(subprocess.run(["git","ls-files",b],capture_output=True,text=True).stdout.split()); tot+=f
    print(f"{i:2d} {a:42s} files={f:4d} deps={n:2d} rt={c}")
print("leaf file total:",tot)
print("git ls-files src/messaging:",len(subprocess.run(["git","ls-files","src/messaging"],capture_output=True,text=True).stdout.split()))
PY
# ---- raw output ----
leaves: 25
 1 messaging-admin-api                        files=  28 deps= 2 rt=['app-bootstrap']
 2 messaging-admin-runtime                    files=  20 deps= 6 rt=['app-bootstrap']
 3 messaging-claim-check                      files=  11 deps= 2 rt=['app-bootstrap']
 4 messaging-cloudevents                      files=   6 deps= 2 rt=['app-bootstrap']
 5 messaging-core-api                         files=  95 deps= 0 rt=['app-bootstrap']
 6 messaging-inbox-jdbc-postgresql            files=  13 deps= 2 rt=['app-bootstrap']
 7 messaging-kafka                            files=  61 deps= 7 rt=['app-bootstrap']
 8 messaging-kafka-share-experimental         files=   7 deps= 4 rt=[]
 9 messaging-nats-experimental                files=  11 deps= 7 rt=[]
10 messaging-observability                    files=  17 deps= 1 rt=['app-bootstrap']
11 messaging-outbox-jdbc-postgresql           files=  28 deps= 5 rt=['app-bootstrap']
12 messaging-policy                           files=  32 deps= 2 rt=['app-bootstrap']
13 messaging-pulsar-experimental              files=  12 deps= 7 rt=[]
14 messaging-rabbit                           files=  33 deps= 7 rt=['app-bootstrap']
15 messaging-reliability-api                  files=  15 deps= 1 rt=['app-bootstrap']
16 messaging-runtime-core                     files=  12 deps= 6 rt=['app-bootstrap']
17 messaging-schema-api                       files=  15 deps= 1 rt=['app-bootstrap']
18 messaging-schema-avro                      files=   8 deps= 2 rt=[]
19 messaging-schema-json                      files=   6 deps= 2 rt=['app-bootstrap']
20 messaging-schema-protobuf                  files=   6 deps= 2 rt=[]
21 messaging-security                         files=  17 deps= 1 rt=['app-bootstrap']
22 messaging-spring-boot-starter              files=  44 deps=17 rt=['app-bootstrap']
23 messaging-spring-cloud-stream-bridge       files=  10 deps= 3 rt=[]
24 messaging-testkit                          files=  23 deps= 4 rt=[]
25 messaging-transport-spi                    files=  19 deps= 3 rt=['app-bootstrap']
leaf file total: 549
git ls-files src/messaging: 550
