awp-python 0.1.0a1__tar.gz → 0.1.0a2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/CHANGELOG.md +8 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/PKG-INFO +7 -5
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/README.md +6 -4
- awp_python-0.1.0a2/conformance/README.md +63 -0
- awp_python-0.1.0a2/conformance/core-world-lockstep.json +1655 -0
- awp_python-0.1.0a2/conformance/core-world-streaming.json +1657 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/pyproject.toml +1 -1
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/src/awp/__init__.py +1 -1
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/src/awp_sim/arm.py +17 -3
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/src/awp_sim/server.py +3 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/src/awp_sim/world.py +26 -0
- awp_python-0.1.0a2/tests/test_evidence.py +181 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/uv.lock +1 -1
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/.gitignore +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/.gitmodules +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/.python-version +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/LICENSE +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/scripts/check_traces.py +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/scripts/sync_spec.py +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/src/awp/_spec/lifecycle.json +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/src/awp/_spec/schemas/action-cancel-result.schema.json +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/src/awp/_spec/schemas/action-ref.schema.json +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/src/awp/_spec/schemas/action-schema.schema.json +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/src/awp/_spec/schemas/action-status.schema.json +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/src/awp/_spec/schemas/action-submit-result.schema.json +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/src/awp/_spec/schemas/action-submit.schema.json +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/src/awp/_spec/schemas/agent-manifest.schema.json +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/src/awp/_spec/schemas/approval-requested.schema.json +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/src/awp/_spec/schemas/approval-respond.schema.json +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/src/awp/_spec/schemas/common.schema.json +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/src/awp/_spec/schemas/embodiment.schema.json +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/src/awp/_spec/schemas/empty-result.schema.json +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/src/awp/_spec/schemas/error.schema.json +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/src/awp/_spec/schemas/frame-inline.schema.json +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/src/awp/_spec/schemas/frame-tree.schema.json +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/src/awp/_spec/schemas/obs-report.schema.json +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/src/awp/_spec/schemas/observation-channel.schema.json +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/src/awp/_spec/schemas/ping-result.schema.json +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/src/awp/_spec/schemas/ping.schema.json +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/src/awp/_spec/schemas/profiles/gui-actions.schema.json +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/src/awp/_spec/schemas/reset-result.schema.json +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/src/awp/_spec/schemas/reset.schema.json +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/src/awp/_spec/schemas/restore.schema.json +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/src/awp/_spec/schemas/safety-policy.schema.json +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/src/awp/_spec/schemas/session-open.schema.json +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/src/awp/_spec/schemas/session-ready.schema.json +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/src/awp/_spec/schemas/session-resume.schema.json +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/src/awp/_spec/schemas/session-state.schema.json +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/src/awp/_spec/schemas/session-telemetry.schema.json +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/src/awp/_spec/schemas/session-transfer-result.schema.json +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/src/awp/_spec/schemas/session-transfer.schema.json +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/src/awp/_spec/schemas/snapshot-result.schema.json +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/src/awp/_spec/schemas/subscribe-result.schema.json +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/src/awp/_spec/schemas/subscribe.schema.json +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/src/awp/_spec/schemas/task-update.schema.json +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/src/awp/_spec/schemas/tick-result.schema.json +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/src/awp/_spec/schemas/tick.schema.json +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/src/awp/_spec/schemas/unsubscribe.schema.json +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/src/awp/_spec/schemas/world-event.schema.json +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/src/awp/_spec/schemas/world-manifest.schema.json +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/src/awp/aio.py +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/src/awp/client.py +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/src/awp/clock.py +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/src/awp/errors.py +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/src/awp/frames.py +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/src/awp/jsonrpc.py +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/src/awp/lifecycle.py +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/src/awp/py.typed +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/src/awp/schema.py +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/src/awp_sim/__init__.py +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/src/awp_sim/__main__.py +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/src/awp_sim/audit.py +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/src/awp_sim/cli.py +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/src/awp_sim/config.py +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/src/awp_sim/demo.py +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/src/awp_sim/loopback.py +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/src/awp_sim/py.typed +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/src/awp_sim/recorder.py +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/src/awp_sim/replay.py +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/src/awp_sim/scenarios.py +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/src/awp_sim/session.py +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/tests/__init__.py +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/tests/conftest.py +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/tests/helpers.py +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/tests/test_audit.py +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/tests/test_cli.py +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/tests/test_client_traces.py +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/tests/test_e2e.py +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/tests/test_features.py +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/tests/test_frames.py +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/tests/test_regressions.py +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/tests/test_scenarios.py +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/tests/test_schema.py +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/tests/test_streams.py +0 -0
- {awp_python-0.1.0a1 → awp_python-0.1.0a2}/tests/test_world.py +0 -0
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.1.0a2
|
|
4
|
+
|
|
5
|
+
Targets specification revision `0.1-draft.8`.
|
|
6
|
+
|
|
7
|
+
- `awp_sim`: the world checks the arm against its envelope after every step; leaving it emits `envelope_violation` and fails the executing action with reason `envelope` (AWP-ENV-003). `World.disturb` and `Server.disturb` inject an external disturbance.
|
|
8
|
+
- `awp_sim`: a stop during servo motion ends at the envelope's boundary instead of past it.
|
|
9
|
+
- `conformance/`: reports for Core World in both time models and the evidence for their manual rows, with tests in `tests/test_evidence.py`.
|
|
10
|
+
|
|
3
11
|
## 0.1.0a1
|
|
4
12
|
|
|
5
13
|
First release, targeting specification revision `0.1-draft.7`.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: awp-python
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.0a2
|
|
4
4
|
Summary: Agent World Protocol client protocol layer and reference world for Python.
|
|
5
5
|
Project-URL: Specification, https://www.agentworldprotocol.com
|
|
6
6
|
Project-URL: Source, https://github.com/Hyperduality/awp-python
|
|
@@ -26,11 +26,13 @@ Python implementation of the [Agent World Protocol](https://www.agentworldprotoc
|
|
|
26
26
|
- **`awp`** — the client protocol layer. `ClientConnection` is the agent side of AWP as a sans-IO state machine; `awp.aio.AsyncClient` drives it over a WebSocket.
|
|
27
27
|
- **`awp_sim`** — the reference world. A sans-IO world engine with a simulated arm, a WebSocket server, an audit log, and a scenario suite that records wire traces.
|
|
28
28
|
|
|
29
|
-
It targets specification revision **`0.1-draft.
|
|
29
|
+
It targets specification revision **`0.1-draft.8`**, pinned as the `spec/` submodule. This is an alpha: the API will change with the draft.
|
|
30
30
|
|
|
31
31
|
## Status
|
|
32
32
|
|
|
33
|
-
|
|
33
|
+

|
|
34
|
+
|
|
35
|
+
The world is **Core World: AWP-conformant against 0.1-draft.8** in both time models: [awp-conformance](https://github.com/Hyperduality/awp-conformance) reports no failure and nothing untested, and [`conformance/`](conformance/README.md) holds the reports and the evidence for their manual rows. The **sim** profile in lockstep and the client as **Core Agent** in both time models are *self-assessed against 0.1-draft.8*: the suite reports no failure and leaves a few requirements untested. Every recorded trace also passes the spec's own checker, which verifies schemas, the action lifecycle table, idempotency, replay, and frame sequencing.
|
|
34
36
|
|
|
35
37
|
| Implemented | Not implemented |
|
|
36
38
|
|---|---|
|
|
@@ -38,7 +40,7 @@ The world and client target **Core World** and **Core Agent** for both time mode
|
|
|
38
40
|
| Inline and `ws` stream bindings; binary frame codec (all spec vectors) | Other stream bindings (`webrtc`, `webtransport`, `shm`, `grpc`) |
|
|
39
41
|
| Full action lifecycle; preemption (`replace`, `queue`, `reject`, `blend`); idempotency | Standing approvals, grant expiry |
|
|
40
42
|
| Watchdog and safe state, heartbeats, resumption with replay and acknowledgement | Multi-bind and shared control (one embodiment) |
|
|
41
|
-
| Spatial, velocity, and rate envelopes (`command_check`) | Robotics profile (a simulated arm proves nothing physical) |
|
|
43
|
+
| Spatial, velocity, and rate envelopes (`command_check`), monitored during execution | Robotics profile (a simulated arm proves nothing physical) |
|
|
42
44
|
| Audit log with redaction and hash chain; e-stop; `world.reset` | |
|
|
43
45
|
| Beyond Core (`--features`): task, approval, transfer, seeding, snapshots, replay bundles, a servo command channel | |
|
|
44
46
|
|
|
@@ -107,7 +109,7 @@ The connection tracks the action lifecycle against the spec's transition table,
|
|
|
107
109
|
src/awp/ client protocol layer (sans-IO), asyncio adapter, frame codec, schemas
|
|
108
110
|
src/awp/_spec/ schemas and lifecycle table bundled from spec/ (scripts/sync_spec.py)
|
|
109
111
|
src/awp_sim/ world engine, arm, server, audit log, loopback, scenarios, CLI
|
|
110
|
-
spec/ agent-world-protocol, pinned at spec-v0.1-draft.
|
|
112
|
+
spec/ agent-world-protocol, pinned at spec-v0.1-draft.8
|
|
111
113
|
scripts/ spec sync and trace checking
|
|
112
114
|
```
|
|
113
115
|
|
|
@@ -5,11 +5,13 @@ Python implementation of the [Agent World Protocol](https://www.agentworldprotoc
|
|
|
5
5
|
- **`awp`** — the client protocol layer. `ClientConnection` is the agent side of AWP as a sans-IO state machine; `awp.aio.AsyncClient` drives it over a WebSocket.
|
|
6
6
|
- **`awp_sim`** — the reference world. A sans-IO world engine with a simulated arm, a WebSocket server, an audit log, and a scenario suite that records wire traces.
|
|
7
7
|
|
|
8
|
-
It targets specification revision **`0.1-draft.
|
|
8
|
+
It targets specification revision **`0.1-draft.8`**, pinned as the `spec/` submodule. This is an alpha: the API will change with the draft.
|
|
9
9
|
|
|
10
10
|
## Status
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+

|
|
13
|
+
|
|
14
|
+
The world is **Core World: AWP-conformant against 0.1-draft.8** in both time models: [awp-conformance](https://github.com/Hyperduality/awp-conformance) reports no failure and nothing untested, and [`conformance/`](conformance/README.md) holds the reports and the evidence for their manual rows. The **sim** profile in lockstep and the client as **Core Agent** in both time models are *self-assessed against 0.1-draft.8*: the suite reports no failure and leaves a few requirements untested. Every recorded trace also passes the spec's own checker, which verifies schemas, the action lifecycle table, idempotency, replay, and frame sequencing.
|
|
13
15
|
|
|
14
16
|
| Implemented | Not implemented |
|
|
15
17
|
|---|---|
|
|
@@ -17,7 +19,7 @@ The world and client target **Core World** and **Core Agent** for both time mode
|
|
|
17
19
|
| Inline and `ws` stream bindings; binary frame codec (all spec vectors) | Other stream bindings (`webrtc`, `webtransport`, `shm`, `grpc`) |
|
|
18
20
|
| Full action lifecycle; preemption (`replace`, `queue`, `reject`, `blend`); idempotency | Standing approvals, grant expiry |
|
|
19
21
|
| Watchdog and safe state, heartbeats, resumption with replay and acknowledgement | Multi-bind and shared control (one embodiment) |
|
|
20
|
-
| Spatial, velocity, and rate envelopes (`command_check`) | Robotics profile (a simulated arm proves nothing physical) |
|
|
22
|
+
| Spatial, velocity, and rate envelopes (`command_check`), monitored during execution | Robotics profile (a simulated arm proves nothing physical) |
|
|
21
23
|
| Audit log with redaction and hash chain; e-stop; `world.reset` | |
|
|
22
24
|
| Beyond Core (`--features`): task, approval, transfer, seeding, snapshots, replay bundles, a servo command channel | |
|
|
23
25
|
|
|
@@ -86,7 +88,7 @@ The connection tracks the action lifecycle against the spec's transition table,
|
|
|
86
88
|
src/awp/ client protocol layer (sans-IO), asyncio adapter, frame codec, schemas
|
|
87
89
|
src/awp/_spec/ schemas and lifecycle table bundled from spec/ (scripts/sync_spec.py)
|
|
88
90
|
src/awp_sim/ world engine, arm, server, audit log, loopback, scenarios, CLI
|
|
89
|
-
spec/ agent-world-protocol, pinned at spec-v0.1-draft.
|
|
91
|
+
spec/ agent-world-protocol, pinned at spec-v0.1-draft.8
|
|
90
92
|
scripts/ spec sync and trace checking
|
|
91
93
|
```
|
|
92
94
|
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# Conformance
|
|
2
|
+
|
|
3
|
+

|
|
4
|
+
|
|
5
|
+
| Class | Configuration | Claim | Report |
|
|
6
|
+
|---|---|---|---|
|
|
7
|
+
| Core World | `awp-sim serve --mode lockstep` | Core World (lockstep): AWP-conformant against 0.1-draft.8 (awp-conformance 0.1.0a2) | [`core-world-lockstep.json`](core-world-lockstep.json) |
|
|
8
|
+
| Core World | `awp-sim serve` | Core World (streaming): AWP-conformant against 0.1-draft.8 (awp-conformance 0.1.0a2) | [`core-world-streaming.json`](core-world-streaming.json) |
|
|
9
|
+
|
|
10
|
+
Each report, from awp-conformance 0.1.0a2 against awp-python 0.1.0a2, has no failure and nothing untested; the evidence for its `manual` rows follows (AWP-CNF-005). Every other configuration remains self-assessed against 0.1-draft.8.
|
|
11
|
+
|
|
12
|
+
## Reproduce
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
pip install --pre awp-python awp-conformance
|
|
16
|
+
curl -LO https://raw.githubusercontent.com/Hyperduality/awp-conformance/v0.1.0a2/fixtures/awp-sim.json
|
|
17
|
+
awp-sim serve --mode lockstep & # or `awp-sim serve` for streaming
|
|
18
|
+
export AWP_SIM_PID=$!
|
|
19
|
+
awp-conformance world ws://127.0.0.1:8710 --fixture awp-sim.json --out report/
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
The fixture's e-stop hooks signal `$AWP_SIM_PID`; without it the e-stop test is skipped and AWP-EVT-002 is reported untested. The tests cited below run in this repository's CI:
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
uv run pytest tests/test_frames.py tests/test_evidence.py
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Manual evidence
|
|
29
|
+
|
|
30
|
+
### AWP-DAT-002, AWP-TRN-009 — latest-wins delivery (streaming)
|
|
31
|
+
|
|
32
|
+
- **Drop policy.** Each connection's send queue (`_Outbox`, [`src/awp_sim/server.py`](../src/awp_sim/server.py)) holds at most one unsent frame per latest-wins channel and replaces it when a newer one is produced; control messages and reliable frames queue in order, so a stalled latest-wins channel delays them by at most its one pending frame. A peer that stops reading is disconnected at 10,000 pending items rather than buffered without limit.
|
|
33
|
+
- **Stalled-receiver test.** `test_a_stalled_receiver_holds_one_frame_per_latest_wins_channel`: 1,000 `proprio` frames and 10 `arm_state` frames are produced while nothing drains the queue; one `proprio` frame, the newest, and all 10 `arm_state` frames remain, in order.
|
|
34
|
+
|
|
35
|
+
### AWP-DAT-008 — frame test vectors
|
|
36
|
+
|
|
37
|
+
`test_vectors` (`tests/test_frames.py`) decodes every vector in `schemas/test-vectors/frames.json` of the `spec/` submodule, pinned at `spec-v0.1-draft.8`: the 10 valid vectors to the listed fields, and the 7 marked `expect_error` rejected with the listed error. `test_roundtrip_without_vendor` re-encodes the 8 valid vectors without an unknown extension or reserved bits byte for byte.
|
|
38
|
+
|
|
39
|
+
### AWP-ENV-003 — envelope violations during execution
|
|
40
|
+
|
|
41
|
+
After every simulation step the world checks the arm against its envelope: position within `aabb_m`, speed within `max_velocity_mps`. On leaving it, the world stops the arm, emits `world.event: envelope_violation` to every session, and fails the executing action with reason `envelope` once its safe abort completes. An external disturbance is injected with `World.disturb(offset_m)` (or `Server.disturb`).
|
|
42
|
+
|
|
43
|
+
- `test_a_disturbance_during_execution_fails_the_action`: in each time model, a move is executing when the arm is pushed out of the envelope; the world emits `envelope_violation` and the move ends `failed` with reason `envelope`.
|
|
44
|
+
- `test_commanded_motion_never_leaves_the_envelope`: 400 seeded random submissions, replacements, queued moves, stops, and cancels in each time model, checked after every advance; no violation is reported.
|
|
45
|
+
- `test_servo_motion_never_leaves_the_envelope`: servo setpoints toward the walls, and stops during them.
|
|
46
|
+
|
|
47
|
+
### AWP-UNI-001 — SI units and unit suffixes
|
|
48
|
+
|
|
49
|
+
The fields awp-sim defines, reviewed:
|
|
50
|
+
|
|
51
|
+
| Field | Where | Unit |
|
|
52
|
+
|---|---|---|
|
|
53
|
+
| `p_m` | `proprio` payload | m |
|
|
54
|
+
| `v_mps` | `proprio` payload; `servo_arm` setpoints | m/s |
|
|
55
|
+
| `target_m` | `arm_state` payload | m |
|
|
56
|
+
| `max_velocity_mps` | `move_to_pose` params | m/s |
|
|
57
|
+
| `phase`, `action_id` | `arm_state` payload | not physical |
|
|
58
|
+
|
|
59
|
+
Every other field is defined by the specification's schemas. `test_world_defined_fields_carry_si_suffixes` collects every action parameter, channel schema field, and payload field across every feature, and fails on any field not reviewed as non-physical that lacks a unit suffix.
|
|
60
|
+
|
|
61
|
+
### AWP-VER-009 — the draft revision is named
|
|
62
|
+
|
|
63
|
+
The [README](../README.md) and the [awp-sim page](https://www.agentworldprotocol.com/adapters/awp-sim) name `0.1-draft.8`; `awp.SPEC_REVISION` is `"0.1-draft.8"`; the `spec/` submodule is pinned at the tag `spec-v0.1-draft.8`; each report records `"specification": "0.1-draft.8"` and its claim names the revision.
|