A sensor asks. A mixed team does it. The manifest checks it.
A trailer is 312 cartons and a piece of paper that says so. The work is getting them out. The proof is a number that matches, and a record of who handled what.
- Who asks
- The dock door sensor, the moment trailer 4471 is closed and sealed at the door. It posts under the warehouse's mandate, and the warehouse answers for it.
- Who does it
- One team. Two humanoids take the standard cartons. A person takes the crushed, oversized and hazmat ones. Robots (AMRs) carry the pallets to the rack.
- Evidence only
- The warehouse system supplies the manifest to count against. The dock camera shows the trailer empty at the end.
- Evidence
- A barcode scan for every carton, the AMRs' logs, a photo of every damaged carton, and the dock camera's last frame.
- Who pays
- The warehouse runs it in-house. A shortage the carrier caused is charged back to the carrier, with the proof attached.
- You get
- One count against the manifest, and a record of who handled which carton.
The manifest says 312. The proof says 309 on pallets, 3 set aside, and who touched every one.
Humanoids take the standard cartons because there are hundreds of them and they're all alike. A person takes the awkward ones because they aren't. The sensor only asks; the warehouse system and the dock camera only supply evidence.
Harbor Row DC, dock 6 and trailer 4471 are fictional. Figures are illustrative.
309 + 3 = 312, and who did what.
The proof has two halves. The count reconciles with the manifest. And because the team is mixed, each member's share goes on the record: for the person's pay, for everyone's reputation, and so the fleet can learn from its own cartons.
Shares are basis points of cartons handled. The AMR's line counts pallets, a different unit, so it isn't squeezed into the same bar. Team member shares aren't in TAP v0.2 yet. See § 08.
From sealed door to reconciled count, in six steps.
One task, one team, one manifest. The sensor starts it and the count ends it. Everything between is scanned.
- 01
Seal
Door closed, trailer sealed at dock 6. The sensor posts the unload, and the warehouse system attaches the manifest.
- 02
Team
One task, one team: two humanoids, one person, the AMRs. Each with its own zone and its own kind of carton.
- 03
Scan
Every carton is scanned as it's picked. A carton that isn't scanned didn't happen.
- 04
Set aside
Crushed, oversized or hazmat goes to the person at the exception table, photographed, never palletised blind.
- 05
Move
AMRs take each finished pallet down the lane to its slot. The slot scan closes the pallet.
- 06
Reconcile
On pallets plus set aside must equal the manifest. Then the dock camera confirms the trailer is empty.
Five rules and one look.
Counting is arithmetic, and scans don't have opinions. Only one check asks a model: is the trailer really empty in the dock camera's last frame? A versioned policy, not the model, makes the call.
| Check | How | Evidence | By | Result |
|---|---|---|---|---|
| The count reconciles | 309 scanned onto pallets + 3 set aside = 312 on the manifest. No duplicate scans. | Actor telemetry | Rule | Passed |
| Every carton scanned | One pick scan per carton, each tied to the member who picked it. | Actor telemetry | Rule | Passed |
| Damage on record | A photo of each damaged carton, with its barcode, before it leaves the table. | Teleport capture | Rule | Passed |
| Pallets in their slots | Each pallet's location scan matches its assigned slot in rack B. | Actor telemetry | Rule | Passed |
| Zones held | No person was in zone H while a humanoid moved. Pauses logged within half a second. | Actor telemetry | Rule | Passed |
| Trailer empty | The dock camera's after-frame shows an empty floor, door to nose. | Attested device | Model | Passed |
Count off by one? The unload goes to review with the gap named, not a quiet pass. A shortage the carrier caused is a finding: the unload is still accepted, and the claim goes to the carrier.
§ 05 · Separation
One zone per kind of hand.
Humanoids and people inside the same trailer is the risky part. The task sets the zones before anyone moves: humanoids in zone H, people in zone P, AMRs in their lane. A person who steps into zone H pauses every humanoid in it, and a person, not the robot, clears it to restart.
- Humanoids
- Standard cartons, zone H only
- People
- Crushed, oversized, hazmat. Zone P
- AMRs
- Marked lane, pallets only
- Crossing
- Person in zone H: humanoids pause
- Hazmat
- People only. Never a humanoid
- Restart
- A person clears the zone, not the robot
Its hash goes into the proof. A breach is a finding, not a footnote.
What needs care.
A mixed crew is safe and fair only if the task says who goes where, who handles what, and who gets credit.
Shared space, separate zones
Humanoids and people don't work the same square metre. Zone H for humanoids, zone P for people, a lane for the AMRs. A person in zone H pauses every humanoid in it.
Hazmat goes to people
A hazmat-labelled carton is never a humanoid's to handle, whatever its size. The task says so as a rule, not a preference.
Credit where it's due
A mixed team needs each member's share on the record: for the person's pay, for everyone's reputation, and so a fleet can learn from its own cartons.
A shortage isn't a failed unload
If the carrier shipped 310, the crew still unloaded the trailer. The unload is accepted; the shortage is a finding that goes to the carrier claim, with the proof.
Not a race against robots
Shares record who did what. They don't rank a person against a humanoid on speed, and the warehouse's mandate can't use them that way.
The manifest is fixed first
The count is only as good as what it's counted against. The manifest's hash goes into the task at the start, so nobody can quietly edit it to match.
One receipt for the whole trailer.
The warehouse gets a count it can send the carrier, and a split it can pay and learn from. The carrier gets a shortage claim with the proof behind it, not a spreadsheet.
This one is in-house, so no money moves per task. Where it does, dollars pay for work. Nobody needs $PORT to unload a trailer.
- Task
- Unload trailer 4471 · dock 6
- Requested by
- Dock door sensor, for the warehouse
- Performed by
- Humanoid ×2 + person + AMRs
- Shares
- A 45.2% · B 42.3% · person 12.5%
- Evidence
- Scans, AMR logs, dock camera
- Count
- 309 + 3 damaged = 312
- Policy
- trailer-unload v1.0
- Decision
- Accepted
- Finding
- 3 damaged → carrier claim
STATUS: FINAL
Shares record who handled what. They aren't a ranking of people against machines.
For builders.
A SENSOR_EVENT trigger from a DEVICE requester, DIRECT fulfillment to one MULTI_ACTOR performer, and a COUNT condition against a committed manifest.
PhysicalTaskSpec · trailer 4471TAP v0.2 + v0.3 draft · preview, subject to change
{
"schema": "teleport.tap.physical-task",
"version": "0.2.0",
"title": "Unload trailer 4471 at dock 6 against manifest",
"category": "UNLOAD",
"requester": {
"requesterType": "DEVICE",
"principal": { "principalType": "ORGANIZATION" },
"mandateId": "mdt_harborrow_dock_v3",
"authentication": { "method": "DEVICE_ATTESTATION" }
},
"trigger": { "type": "SENSOR_EVENT", "sourceRef": "dock:6:door_closed_sealed" },
"fulfillment": {
"mode": "DIRECT",
"designatedPerformers": [{ "fleetId": "crew_dock6_mixed", "actorType": "MULTI_ACTOR" }]
},
"environment": {
"siteRef": "site:harbor_row_dc:dock_6",
"referenceAssets": ["manifest:trl_4471"]
},
"actorRequirement": {
"permittedActorTypes": ["HUMANOID", "HUMAN", "ROBOT"],
"requiredCapabilities": [
{ "capability": "HANDLE.HAZMAT", "attributes": { "actorType": "HUMAN" } }
]
},
"completionConditions": [
{ "type": "COUNT", "id": "reconciled", "subjectRef": "manifest:trl_4471",
"expression": "scanned + damaged == manifest", "verificationMethod": "DETERMINISTIC" },
{ "type": "LOCATION", "id": "pallets_slotted", "subjectRef": "pallet:*",
"zoneRef": "site:harbor_row_dc:rack_b", "relation": "IN", "verificationMethod": "DETERMINISTIC" },
{ "type": "STATE", "id": "trailer_empty", "subjectRef": "trailer:4471",
"property": "contents", "expected": "EMPTY", "verificationMethod": "PERCEPTION",
"minimumEvidenceOrigin": "ATTESTED_DEVICE" }
],
"safety": { "policyId": "dock-zones-h-p-lane-v1" },
"findings": { "emit": ["SHORTAGE", "DAMAGE"], "affectsAcceptance": false },
"economics": { "performerPayUsdCents": 0, "settlementAssets": ["FIAT"] },
"popw": { "required": true, "assurancePolicyId": "VERIFIED", "proofTiming": "WORKFLOW" }
}Proposed additions this use case surfaced
- Team member shares
- MULTI_ACTOR performers with each member's share: who did which part, a shareBps for pay, and a per-member commitment in the evidence. v0.2 has the team, not the split.
- Separation zones
- Zones per actor type in the safety policy, with the pause rule and who may restart. Checked from the robots' own safety logs.
- Reference assets
- The manifest committed to the task before work starts, so the count is against something that can't move.
- Findings that don't block
- A shortage or damage finding that goes to an outcome event (the carrier claim) while the unload itself is accepted.
- Learning credit
- Per-member evidence a robot fleet can pull for training: its own picks, its own misses, under the task's rights policy.
Example economics: no per-task pay in-house; the warehouse pays for verification and the proof. A shortage chargeback to the carrier carries the proof with it. Developer docs
Warehouse and 3PL operators
Running people and robots on the same dock?
Tell us about your docks. We're working with design partners on mixed-crew operations.