Night Shift

Synthetic data. Field events are simulated.

Night Shift / Agent fleet

Agent fleet

Six specialists, six authority boundaries. An agent cannot see a tool it has no authority for, the broker refuses the call, and the service refuses it again.

Qualification and identity

A revision with no qualification record is treated as unqualified, never as probably fine

AgentRevisionQualificationTrafficRuntimeIdentityLatest drillTools
incident-commanderrev-1ACTIVE100%Cloud Run (not managed Agent Runtime)ns-commander@project-2ac1d1fb-7da1-46b4-90e.iam.gserviceaccount.comProvisioned Google service account. The gateway mints this agent's outbound OIDC token as it.PASS1.0.05 allowed32 denied
signal-investigatorrev-1ACTIVE100%Cloud Run (not managed Agent Runtime)ns-signal@project-2ac1d1fb-7da1-46b4-90e.iam.gserviceaccount.comProvisioned Google service account. The gateway mints this agent's outbound OIDC token as it.PASS1.0.06 allowed31 denied
impact-analystrev-1ACTIVE100%Cloud Run (not managed Agent Runtime)ns-impact@project-2ac1d1fb-7da1-46b4-90e.iam.gserviceaccount.comProvisioned Google service account. The gateway mints this agent's outbound OIDC token as it.PASS1.0.06 allowed31 denied
capacity-brokerrev-1ACTIVE100%Cloud Run (not managed Agent Runtime)ns-capacity@project-2ac1d1fb-7da1-46b4-90e.iam.gserviceaccount.comProvisioned Google service account. The gateway mints this agent's outbound OIDC token as it.PASS1.0.09 allowed28 denied
dispatch-agentrev-1ACTIVE100%Cloud Run (not managed Agent Runtime)ns-dispatch@project-2ac1d1fb-7da1-46b4-90e.iam.gserviceaccount.comProvisioned Google service account. The gateway mints this agent's outbound OIDC token as it.PASS1.0.010 allowed27 denied
custody-agentrev-1ACTIVE100%Cloud Run (not managed Agent Runtime)ns-custody@project-2ac1d1fb-7da1-46b4-90e.iam.gserviceaccount.comProvisioned Google service account. The gateway mints this agent's outbound OIDC token as it.PASS1.0.014 allowed23 denied

What “identity” means here

Each agent has its own provisioned Google service account, and the gateway mints that agent’s outbound OIDC token as it. The permission matrix below is enforced twice in our own code: the tool broker checks it on every call, and each domain service checks it again before it acts. All 24 authorization denials recorded in the drill corpus are ours, because the corpus runs in-process where there is no network hop for Cloud Run to refuse.

One denial is Google’s. evidence/iam-denial.json records ns-dispatch taking an HTTP 403 from the Cloud Run edge on the Inventory service while ns-impact gets 200 on the same route. A broken endpoint would have refused both. That single platform denial is reported on its own and is never pooled into the corpus counts.

Agents are not registered as managed Agent Registry or Agent Runtime resources on this deployment. That is recorded on the specific claims it affects rather than glossed over. See LIMITATIONS.md.

Permission matrix

Read the gaps: the Dispatch Agent has no inventory column at all, which is what makes the poisoned-vendor drill a real denial rather than a prompt

Agenttelemetryinventorycapacityfacilitiescustody
incident-commandersummary————
signal-investigatorread, equipment_read————
impact-analystsummaryscoped_read———
capacity-brokerbackup_readplacement_viewread, write——
dispatch-agentequipment_read——read, write—
custody-agentdestination_readincident_readread—read, write
incident-ingestorreadwrite———
responder-appdestination_readincident_read——read, write
drill-controller—————

Operational skills

Content-addressed procedural playbooks. The hash is the revision, so editing one changes its reference rather than rewriting history.

SkillRevisionGovernance
freezer-failure-responsesha256:7a784028e4d9203dcontent-addressed
impact-assessmentsha256:54401c2ee0955d59content-addressed
backup-capacity-placementsha256:41f1ade4bae64c30content-addressed
after-hours-dispatchsha256:c3977cbe3a6c413ccontent-addressed
specimen-transfer-proceduresha256:bdffc0636bfade5bcontent-addressed
incident-recovery-and-closeoutsha256:9467a4ae40a17a5ccontent-addressed

Tool registry

Unregistered tools are unreachable by default

ToolServiceDomain
apply_containment_holdinventoryinventory.writemutating
commit_ready_transferscustodycustody.writemutating
commit_transfercustodycustody.writemutating
create_work_orderfacilitiesfacilities.writemutating
dispatch_responderfacilitiesfacilities.writemutating
flag_custody_exceptioncustodycustody.writemutating
get_backup_freezer_statetelemetrytelemetry.backup_read
get_capacitycapacitycapacity.read
get_container_summaryinventoryinventory.scoped_read
get_custody_statecustodycustody.read
get_destination_temperaturetelemetrytelemetry.destination_read
get_dispatch_statefacilitiesfacilities.read
get_equipment_historytelemetrytelemetry.equipment_read
get_freezer_statetelemetrytelemetry.read
get_hold_stateinventoryinventory.scoped_read
get_incidentincident_controlincident.read
get_incident_container_idsinventoryinventory.incident_read
get_incident_telemetry_summarytelemetrytelemetry.summary
get_incident_timelineincident_controlincident.read
get_placement_requirementsinventoryinventory.placement_view
get_recent_door_eventstelemetrytelemetry.read
get_reservationcapacitycapacity.read
get_responder_rosterfacilitiesfacilities.read
get_study_notesinventoryinventory.write
get_temperature_windowtelemetrytelemetry.read
get_work_orderfacilitiesfacilities.read
list_impacted_containersinventoryinventory.scoped_read
list_qualified_destinationscapacitycapacity.read
reconcile_incidentcustodycustody.read
record_destination_scancustodycustody.writemutating
record_pickupcustodycustody.writemutating
record_repair_statusfacilitiesfacilities.writemutating
release_reservationcapacitycapacity.writemutating
request_incident_closeincident_controlincident.transitionmutating
request_incident_transitionincident_controlincident.transitionmutating
reserve_capacitycapacitycapacity.writemutating
send_vendor_messagefacilitiesfacilities.writemutating