Skip to content

Commit 9b16fa6

Browse files
committed
README: embed 3 paper figures + fix stale v0.1/roadmap text
Added inline: - hallucination.png after Why DCP (strongest visual hook) - footprint.png in Validated on hardware section - wire_format.png replaces ASCII frame box Also fixed: - manifest sample bumped from dcp: 0.1 to dcp: 0.3 - 'What's not in v0.1' -> 'What's not in v0.3' with current list (capability tokens are no longer stubbed; called out CAN FD as v0.4 work) - Roadmap: marked hardware validation + public repo + PyPI release as done; added T-Panel/CAN-FD/hallucination-bench as new TODOs
1 parent 75a00e7 commit 9b16fa6

1 file changed

Lines changed: 34 additions & 15 deletions

File tree

README.md

Lines changed: 34 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,13 @@ DCP keeps MCP's mental model (manifest + tool calls) but:
4343
A reference Bridge translates **DCP ↔ MCP**, so any MCP-compatible LLM works
4444
out of the box. DCP is the last mile to physical hardware.
4545

46+
![Coverage of LLM-induced failure modes by each protocol's schema-level defenses](docs/paper/figures/hallucination.png)
47+
48+
*Why this matters in one chart: the protocol's schema decides how many
49+
hallucinated or adversarial calls are stopped before any byte reaches a
50+
device. DCP catches all six categories at the wire layer; the others
51+
catch what their existing schema happens to cover.*
52+
4653
## Design principles
4754

4855
1. **Intent, not register.** `set_brightness(50%)`, not `write_pwm(pin=5, duty=128)`.
@@ -74,13 +81,19 @@ ESP32-WROOM-32 dev board** over CH340 USB-Serial at 115 200 baud:
7481
- The pure DCP layer is approximately 14 KB over a baseline empty
7582
sketch (measurement script in `docs/paper/figures/`)
7683

84+
![Memory footprint: DCP target vs IoT-MCP measured vs Direct MCP vs Matter](docs/paper/figures/footprint.png)
85+
86+
*DCP design target sits roughly 5× under IoT-MCP and 20× under Matter on
87+
the same class of MCU. Hatched bars are design targets, plain bars are
88+
measured / typical of the cited sources.*
89+
7790
See [docs/RATIONALE.md §7](docs/RATIONALE.md) for what the hardware
7891
validation does and does not prove.
7992

8093
## Manifest
8194

8295
```yaml
83-
dcp: 0.1
96+
dcp: 0.3
8497
device:
8598
id: lamp-kitchen-01
8699
model: smart_lamp_v1
@@ -111,24 +124,25 @@ coordination.
111124

112125
## Wire format
113126

114-
A single frame:
127+
![DCP frame layout + on-wire size comparison](docs/paper/figures/wire_format.png)
115128

116-
```
117-
┌────────┬────────┬────────┬─────────────┬───────┐
118-
│ ver:u8 │ kind:u8│ seq:u16│ intent_id:u16│ cbor │
119-
└────────┴────────┴────────┴─────────────┴───────┘
120-
```
129+
A frame is a 6-byte fixed header + CBOR payload + an optional 16-byte
130+
truncated HMAC-SHA256. Header fields:
121131

122132
| field | meaning |
123133
|-------------|------------------------------------------------------------------|
124-
| `ver` | 1 for v0.1 |
134+
| `ver` | 1 in v0.3 |
125135
| `kind` | 0x01 call · 0x02 reply · 0x03 event · 0x04 error · 0x81 dry-run |
126136
| `seq` | client-chosen, echoed in reply |
127137
| `intent_id` | CRC-16/CCITT of intent name |
128138
| `cbor` | CBOR map: params / return / event payload / error |
129139

130140
Reply status codes: `ok`, `denied`, `range`, `busy`, `unknown_intent`, `capability_required`.
131141

142+
A typical `set_brightness(50)` call is 19 bytes on the wire; the MCP
143+
JSON-RPC equivalent is approximately 180 bytes. The full normative spec
144+
lives at [SPEC.md](SPEC.md).
145+
132146
## Adding a feature
133147

134148
See [docs/ADDING_FEATURES.md](docs/ADDING_FEATURES.md) for the full
@@ -215,13 +229,14 @@ Claude ─MCP─▶ dcp serve ─Bridge─▶ Loopback ─DCP wire─▶ Generic
215229
For production use, replace ``GenericSimulator`` with a real transport
216230
(UART / MQTT / BLE — coming next).
217231

218-
## What's *not* in v0.1 (intentional)
232+
## What's *not* in v0.3 (intentional)
219233

220-
- Multi-device transactions
234+
- Multi-device atomic transactions
221235
- Firmware OTA
222-
- Mesh routing
223-
- LLM authentication (Bridge's problem)
224-
- Capability token signing (stubbed — see `safety.py`)
236+
- Mesh routing (use Thread / Zigbee underneath if you need it)
237+
- LLM-side authentication (delegated to the MCP host's session model)
238+
- Native CAN FD frames (ESP32-S3 TWAI is classic CAN; v0.4 ESP32-P4
239+
port enables true CAN FD)
225240

226241
## License
227242

@@ -249,5 +264,9 @@ MIT.
249264
- [x] Conformance test suite (golden frames, language-neutral YAML)
250265
- [x] Codegen `--stubs`: emits handler signatures + binding table
251266
- [x] Quickstart video script ([docs/QUICKSTART_VIDEO.md](docs/QUICKSTART_VIDEO.md))
252-
- [ ] Real-hardware UART validation (waiting on ESP32+CH340 board)
253-
- [ ] Public launch under `device-context-protocol` GitHub org
267+
- [x] Real-hardware UART validation (ESP32-WROOM-32, 10/10 round-trips)
268+
- [x] Public repo at `device-context-protocol/dcp` (v0.3.0 released)
269+
- [x] PyPI release (`pip install pydcp`)
270+
- [ ] T-Panel S3 + CAN bus demo (firmware ready, awaiting hardware)
271+
- [ ] LLM-driven hallucination-rejection benchmark (planned for v0.4 paper)
272+
- [ ] ESP32-P4 port for native CAN FD

0 commit comments

Comments
 (0)