=== data on file ===
patient: John Mwangi (#1) · directory: 6 interpreter(s)

=== routes: the module is mounted ===
  14 named routes registered                     0                          
  create resolves before the binding             /communication/interpreting/create 

=== roster: three shapes of interpreter ===
  freelance KSL/English signer added             ok                         
  signer lands in the directory active           1                          
  signer speaks two languages                    ["ksl","english"]          
  directory flash names the entry                Harness Signer added to the interpreter directory. 
  phone interpreter added                        ok                         
  duplicate languages are deduped                ok                         
  language list collapsed to unique values       ["french","kiswahili"]     
  a rename sticks                                ok                         
  rename flash carries the new name              Harness Roster Entry Renamed updated. 
  an entry with no language refused              invalid: languages         
  a language off the list refused                invalid: languages.0       
  an agency with no agency name refused          invalid: agency            

=== session one: requested → scheduled → live → completed ===
  doctor raises a KSL video request              ok                         
  session number follows INT-{ymd}-{nnnn}        yes                        
  opens as requested                             requested                  
  starts unassigned                              1                          
  vri stores the device                          tablet                     
  requested by the doctor                        4                          
  creation flash names language and mode         Interpreter session INT-20261009-0005 created — Kenyan Sign Language (Video Remote (VRI)). 
  vri without a device refused                   invalid: device            
  an admission not on file refused               invalid: admission_id      
  an interpreter not in the directory refused    invalid: interpreter_id    
  a language mismatch is refused at routing      invalid: interpreter_id    
  the refusal names the interpreter and language Harness Signer does not provide Somali. 
  scheduling assigns the signer                  ok                         
  interpreter and time flip it to scheduled      scheduled                  
  join details are on the record                 HMS Secure Video           
  update flash is terse                          Session INT-20261009-0005 updated. 
  dropping the time flips it back to requested   ok                         
  no time, no schedule                           requested                  
  re-scheduling for the live run                 ok                         
  scheduled again                                scheduled                  
  the room goes live                             ok                         
  status reads in_progress                       in_progress                
  started_at stamped                             1                          
  live flash announces the join                  Session INT-20261009-0005 is live — the interpreter has joined. 
  a live session cannot be started again         refused                    
  the refusal spells out the rule                Only a requested or scheduled session can be started. 
  completing with notes and a follow-up flag     ok                         
  status reads completed                         completed                  
  ended_at stamped                               1                          
  duration rounded up to at least a minute       1                          
  follow-up flag set                             1                          
  notes stored on the record                     1                          
  completion flash counts the minutes            Session INT-20261009-0005 completed — 1 min. 
  a completed session cannot be completed again  refused                    
  the refusal spells out the rule                Only a live session can be completed. 
  a closed session cannot be edited              refused                    
  closed edit redirects with the reason          A closed session is a record — it is not edited. 

=== session two: a booked call that is cancelled ===
  an OPI request is raised                       ok                         
  opi stores no device                           1                          
  opi flash says over the phone                   (Over the Phone (OPI)).   
  cancelling without a reason refused            invalid: cancellation_reason 
  cancelling with a reason sticks                ok                         
  status reads cancelled                         cancelled                  
  cancellation reason stored                     1                          
  cancel flash is terse                          Session INT-20261009-0006 cancelled. 
  a cancelled session cannot be cancelled again  refused                    
  the refusal says it is closed                  This session is already closed. 
  a cancelled session cannot start               refused                    

=== session three: no show ===
  a scheduled VRI request is raised              ok                         
  interpreter plus time schedules it on create   scheduled                  
  marking no show                                ok                         
  status reads no_show                           no_show                    
  no show flashes a warning, not a status        Session INT-20261009-0007 marked no show — the interpreter did not connect. 
  a no show cannot be marked twice               refused                    
  the refusal spells out the rule                Only a requested or scheduled session can be marked no show. 

=== session four: the open request ===
  an open request is left waiting                ok                         
  waiting as requested                           requested                  
  priority label reads Routine                   Routine                    
  mode label reads VRI                           Video Remote (VRI)         

=== directory guard: open sessions pin an interpreter in place ===
  deactivating an interpreter with open sessions refused refused                    
  the refusal counts the open work               Harness Phone Interpreter still has open sessions — close them before deactivating. 
  the signer (all calls closed) can be deactivated ok                         
  deactivation flash is explicit                 Harness Signer deactivated — no new sessions will route to them. 
  a deactivated interpreter cannot be routed to  invalid: interpreter_id    
  the refusal says the interpreter is inactive   That interpreter is not active in the directory. 
  the deactivated signer is still on the roll    0                          
  completed history keeps their name             1                          
  reactivating brings them back                  ok                         
  reactivation flash                             Harness Signer is available again. 

=== confidentiality: the board and the record routes ===
  a sealed patient blocks the session view       HTTP 404                   
  a sealed patient blocks going live             HTTP 404                   
  clearance still opens the view                 ok                         
  the sealed session leaves the nurse board      0                          
  the clearance board still counts it            yes                        
  clearing confidentiality reopens the view      ok                         
  the board repopulates once cleared             yes                        

=== role matrix ===
  doctor · interpreting.view                    yes                        
  doctor · interpreting.manage                  yes                        
  doctor · interpreters.manage                  no                         
  consultant · interpreting.view                yes                        
  consultant · interpreting.manage              yes                        
  consultant · interpreters.manage              no                         
  clinical officer (read-only) · interpreting.view yes                        
  clinical officer (read-only) · interpreting.manage no                         
  nurse · interpreting.view                     yes                        
  nurse · interpreting.manage                   yes                        
  nurse · interpreters.manage                   no                         
  icu nurse · interpreting.view                 yes                        
  icu nurse · interpreting.manage               yes                        
  receptionist · interpreting.view              yes                        
  receptionist · interpreting.manage            yes                        
  receptionist · interpreters.manage            yes                        
  hospital administrator · interpreting.view    yes                        
  hospital administrator · interpreting.manage  yes                        
  hospital administrator · interpreters.manage  yes                        
  system administrator · interpreting.view      yes                        
  system administrator · interpreters.manage    yes                        
  lab technician (no access) · interpreting.view no                         
  lab technician (no access) · interpreting.manage no                         
  billing (no access) · interpreting.view       no                         
  billing (no access) · interpreting.manage     no                         
  billing (no access) · interpreters.manage     no                         

=== audit trail ===
  session creation audited under Communication   1                          
  the lifecycle writes updates to the trail      yes                        
  directory additions audited                    1                          

=== renders ===
OK   interpreting.index (doctor)                53460 bytes
OK   interpreting.index status=all (nurse)      66390 bytes
OK   interpreting.index language=ksl            41397 bytes
OK   interpreting.create patient search (nurse)   31306 bytes
OK   interpreting.create form (reception)       37651 bytes
OK   interpreting.show completed (doctor)       73821 bytes
OK   interpreting.show no show (nurse)          67532 bytes
OK   interpreting.show open opi (reception)     61882 bytes
OK   interpreting.show open vri (reception)     65260 bytes
OK   interpreting.edit open (doctor)            46859 bytes
OK   interpreters.index (reception)             77334 bytes
OK   interpreters.index ?edit=ID (reception)    77745 bytes
OK   interpreters.index (doctor, view-only)     64745 bytes
OK   interpreters.index q + language filter     42424 bytes

>>> interpreting module green — lifecycle, directory, language match and confidentiality all verified
