Skip to content

Commit 29f9295

Browse files
committed
feat(protocol): add v0.1.1 minimal interop flow
Lab-only demo baseline with new schemas, examples, and spec updates.
1 parent 09a3030 commit 29f9295

17 files changed

+439
-30
lines changed

CHANGELOG.md

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,21 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
3838
### Security
3939
- Nothing yet
4040

41+
## [0.1.1] - 2025-12-20
42+
43+
### Added
44+
- Minimal interop flow definition (MaterialDNA → Offer → Match → Transfer) for lab demos
45+
- JSON schemas for Offer, Match, and Transfer (v0.1.1)
46+
- v0.1.1 examples for lab demo payloads
47+
- MaterialDNA schema versioning field for interop validation
48+
49+
### Changed
50+
- MaterialDNA example payloads updated for schema version 0.1.1
51+
- Documentation updates to clarify lab-only scope and demo status
52+
53+
### Security
54+
- Added STRIDE-lite and GDPR data-minimization notes in the security guide
55+
4156
## [0.1.0] - 2025-05-27
4257

4358
### Added
@@ -103,7 +118,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
103118

104119
| Version | Date | Status | Key Changes |
105120
|---------|------|---------|------------|
106-
| 0.1.0 | 2025-05-27 | **Current** | Initial public release |
121+
| 0.1.1 | 2025-12-20 | **Current** | Minimal interop lab demo baseline |
122+
| 0.1.0 | 2025-05-27 | Superseded | Initial public release |
107123
| 0.0.9-draft | 2025-05-15 | Superseded | Internal draft |
108124
| 0.0.1-concept | 2025-04-01 | Archived | Concept document |
109125

@@ -160,7 +176,8 @@ This changelog is maintained by the LOOP Protocol core team.
160176

161177
---
162178

163-
[Unreleased]: https://github.com/local-loop-io/loop-protocol/compare/v0.1.0...HEAD
179+
[Unreleased]: https://github.com/local-loop-io/loop-protocol/compare/v0.1.1...HEAD
180+
[0.1.1]: https://github.com/local-loop-io/loop-protocol/releases/tag/v0.1.1
164181
[0.1.0]: https://github.com/local-loop-io/loop-protocol/releases/tag/v0.1.0
165182
[0.0.9-draft]: https://github.com/local-loop-io/loop-protocol/releases/tag/v0.0.9-draft
166183
[0.0.1-concept]: https://github.com/local-loop-io/loop-protocol/releases/tag/v0.0.1-concept

README.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# LOOP Protocol
22

3-
[![Version](https://img.shields.io/badge/version-0.1.0-blue.svg)](https://github.com/local-loop-io/loop-protocol/releases)
3+
[![Version](https://img.shields.io/badge/version-0.1.1-blue.svg)](https://github.com/local-loop-io/loop-protocol/releases)
44
[![License](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)
55
[![Discussions](https://img.shields.io/github/discussions/local-loop-io/loop-protocol)](https://github.com/local-loop-io/loop-protocol/discussions)
66
[![Specification](https://img.shields.io/badge/spec-v0.1-orange.svg)](SPECIFICATION.md)
@@ -52,7 +52,7 @@ npm test
5252

5353
## 📋 Specification
5454

55-
Read the full LOOP Protocol Specification v0.1
55+
Read the full LOOP Protocol Specification v0.1.1 (lab demo baseline)
5656

5757
### Design Goals
5858

@@ -70,7 +70,7 @@ are building one, open an issue or RFC so we can link it here.
7070
## 🧪 Test Network
7171

7272
No public test network is available yet. This is an early, low-TRL concept and the
73-
reference materials here are for specification and research only.
73+
reference materials here are for specification and lab-only research demonstrations.
7474

7575
## 🤝 Contributing
7676

@@ -90,11 +90,11 @@ the repository documentation.
9090

9191
## 🎯 Roadmap
9292

93-
### v0.1 (Current)
93+
### v0.1.1 (Current)
9494

95-
-Core protocol specification
95+
-Minimal interop flow (MaterialDNA → Offer → Match → Transfer)
9696
- ✅ Reference documentation and schemas
97-
- ⏳ Prototype implementations (in progress)
97+
- ⏳ Prototype implementations (lab demo in progress)
9898

9999
### v0.2 (Planned)
100100

SPECIFICATION.md

Lines changed: 42 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,20 @@
1-
# LOOP Protocol Specification v0.1
1+
# LOOP Protocol Specification v0.1.1
22

33
**Local Optimization with Overflow Protocol**
44

55
*Draft Specification - Request for Comments*
66

7-
**Version:** 0.1.0
8-
**Status:** Draft
9-
**Updated:** May 2025
7+
**Version:** 0.1.1
8+
**Status:** Draft (Lab Demo Baseline)
9+
**Updated:** December 2025
1010
**License:** CC BY-SA 4.0
1111

1212
## Table of Contents
1313

1414
1. [Introduction](#1-introduction)
1515
2. [Terminology](#2-terminology)
1616
3. [Protocol Overview](#3-protocol-overview)
17+
3.5. [Minimal Interop Flow v0.1.1](#35-minimal-interop-flow-v011)
1718
4. [MaterialDNA Specification](#4-materialdna-specification)
1819
5. [LoopCoin Specification](#5-loopcoin-specification)
1920
6. [LoopSignal Specification](#6-loopsignal-specification)
@@ -39,7 +40,7 @@ LOOP allows cities to:
3940
- Calculate optimal material routing (LoopCost)
4041
- Settle transactions across municipal boundaries
4142

42-
This document specifies LOOP Protocol version 0.1, focusing on core functionality required for basic interoperability.
43+
This document specifies LOOP Protocol version 0.1.1, focusing on core functionality required for basic interoperability and lab-only demos.
4344

4445
---
4546

@@ -154,6 +155,35 @@ All protocol messages MUST use:
154155

155156
---
156157

158+
### 3.5 Minimal Interop Flow v0.1.1
159+
160+
This subsection defines the smallest interoperable flow required for lab-only demonstrations. It is intentionally minimal, scoped to controlled environments, and **does not represent a public pilot**.
161+
162+
#### Flow sequence
163+
1. **MaterialDNA** is registered by a node.
164+
2. **Offer** is published for that material.
165+
3. **Match** is accepted between two nodes.
166+
4. **Transfer** is completed and recorded.
167+
168+
#### Required entities
169+
170+
All payloads MUST include `@context`, `@type`, and `schema_version` set to `0.1.1`.
171+
172+
- **MaterialDNA**
173+
Schema: `https://loop-protocol.org/schemas/v0.1.1/material-dna.schema.json`
174+
- **Offer**
175+
Schema: `https://loop-protocol.org/schemas/v0.1.1/offer.schema.json`
176+
- **Match**
177+
Schema: `https://loop-protocol.org/schemas/v0.1.1/match.schema.json`
178+
- **Transfer**
179+
Schema: `https://loop-protocol.org/schemas/v0.1.1/transfer.schema.json`
180+
181+
#### Data minimization
182+
183+
To remain GDPR-aligned for lab demos, payloads **MUST NOT** include personal data. Node identifiers, city names, and organization identifiers are permitted; emails, phone numbers, and names are not permitted in these entities.
184+
185+
---
186+
157187
## 4. MaterialDNA Specification
158188

159189
### 4.1 Identifier Format
@@ -181,15 +211,18 @@ DE-MUC-2025-PLASTIC-B847F3
181211

182212
```json
183213
{
184-
"@context": "https://loop-protocol.org/v1",
214+
"@context": "https://loop-protocol.org/v0.1.1",
185215
"@type": "MaterialDNA",
216+
"schema_version": "0.1.1",
186217
"id": "DE-MUC-2025-PLASTIC-B847F3",
187218
"category": "plastic-pet",
188219
"quantity": {
189220
"value": 1000,
190221
"unit": "kg"
191222
},
192223
"quality": 0.95,
224+
"origin_city": "Munich",
225+
"current_city": "Munich",
193226
"location": {
194227
"lat": 48.1351,
195228
"lon": 11.5820,
@@ -199,11 +232,6 @@ DE-MUC-2025-PLASTIC-B847F3
199232
"expires": "2025-06-03T10:00:00Z",
200233
"certifications": ["food-grade", "iso-14001"],
201234
"images": ["https://example.com/material-photo.jpg"],
202-
"contact": {
203-
"name": "Munich Recycling Center",
204-
"email": "materials@munich.loop",
205-
"phone": "+49-89-123456"
206-
},
207235
"metadata": {
208236
"source": "consumer-collection",
209237
"batch_number": "2025-W22-01",
@@ -214,10 +242,12 @@ DE-MUC-2025-PLASTIC-B847F3
214242

215243
### 4.3 Required Fields
216244

245+
- `schema_version`: Schema version (v0.1.1)
217246
- `id`: Unique MaterialDNA identifier
218247
- `category`: Standardized category code
219248
- `quantity`: Amount and unit
220-
- `location`: Geographic coordinates
249+
- `origin_city`: Registering city
250+
- `current_city`: Current custodian city
221251
- `available_from`: When material becomes available
222252

223253
### 4.4 Standard Categories

docs/security-guide.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,23 @@ This guide summarizes operational security expectations for LOOP nodes.
2222
- Encrypt sensitive data at rest and in transit.
2323
- Keep immutable audit logs for registrations and settlements.
2424

25+
## STRIDE-lite threat model (lab baseline)
26+
27+
| Threat | Example | Mitigation |
28+
| --- | --- | --- |
29+
| Spoofing | Fake node identity | Mutual TLS, signed requests |
30+
| Tampering | Offer payload modified | JSON schema validation, hash signing |
31+
| Repudiation | Deny match acceptance | Immutable event log with timestamps |
32+
| Information disclosure | Leaking PII | Data minimization, redact logs |
33+
| Denial of service | Flood endpoints | Rate limiting, circuit breakers |
34+
| Elevation of privilege | Bypass roles | Least privilege, access audits |
35+
36+
## GDPR-aligned data minimization
37+
- Keep personal data out of protocol payloads.
38+
- Use pseudonymous node IDs rather than human names.
39+
- Collect consent explicitly for any optional contact data.
40+
- Retain only what is required for lab validation and delete on request.
41+
2542
## Key management
2643
- Store private keys in HSMs or dedicated secrets managers.
2744
- Rotate keys regularly and revoke compromised keys immediately.

examples/01-material-registration.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
{
2-
"@context": "https://loop-protocol.org/v1",
2+
"@context": "https://loop-protocol.org/v0.1.1",
33
"@type": "MaterialDNA",
4+
"schema_version": "0.1.1",
45
"id": "DE-MUC-2025-PLASTIC-B847F3",
56
"category": "plastic-pet",
67
"quantity": {
78
"value": 1000,
89
"unit": "kg"
910
},
1011
"quality": 0.95,
12+
"origin_city": "Munich",
13+
"current_city": "Munich",
1114
"location": {
1215
"lat": 48.1351,
1316
"lon": 11.5820,

examples/05-complete-flow.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
[
22
{
3-
"@context": "https://loop-protocol.org/v1",
3+
"@context": "https://loop-protocol.org/v0.1.1",
44
"@type": "MaterialDNA",
5+
"schema_version": "0.1.1",
56
"id": "DE-MUC-2025-FOOD-B847F3",
67
"category": "organic-food",
78
"quantity": {
89
"value": 500,
910
"unit": "kg"
1011
},
12+
"origin_city": "Munich",
13+
"current_city": "Munich",
1114
"location": {
1215
"lat": 48.1372,
1316
"lon": 11.5755,

examples/06-offer.json

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{
2+
"@context": "https://loop-protocol.org/v0.1.1",
3+
"@type": "Offer",
4+
"schema_version": "0.1.1",
5+
"id": "OFR-2F7A6B9C",
6+
"material_id": "DE-MUC-2025-PLASTIC-B847F3",
7+
"from_city": "Munich",
8+
"to_city": "Berlin",
9+
"quantity": {
10+
"value": 800,
11+
"unit": "kg"
12+
},
13+
"status": "open",
14+
"available_until": "2025-06-05T10:00:00Z",
15+
"terms": "Ready for pickup within 48 hours"
16+
}

examples/07-match.json

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"@context": "https://loop-protocol.org/v0.1.1",
3+
"@type": "Match",
4+
"schema_version": "0.1.1",
5+
"id": "MCH-9B3C8A12",
6+
"material_id": "DE-MUC-2025-PLASTIC-B847F3",
7+
"offer_id": "OFR-2F7A6B9C",
8+
"from_city": "Munich",
9+
"to_city": "Berlin",
10+
"status": "accepted",
11+
"matched_at": "2025-06-01T12:15:00Z"
12+
}

examples/08-transfer.json

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{
2+
"@context": "https://loop-protocol.org/v0.1.1",
3+
"@type": "Transfer",
4+
"schema_version": "0.1.1",
5+
"id": "TRF-5D8A23F1",
6+
"material_id": "DE-MUC-2025-PLASTIC-B847F3",
7+
"match_id": "MCH-9B3C8A12",
8+
"status": "completed",
9+
"handoff_at": "2025-06-02T09:00:00Z",
10+
"received_at": "2025-06-02T18:00:00Z",
11+
"route": {
12+
"from_city": "Munich",
13+
"to_city": "Berlin",
14+
"mode": "road"
15+
}
16+
}

examples/README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ This directory contains JSON examples that validate against the schemas in `sche
88
- `03-signal-voting.json`: LoopVote record.
99
- `04-cross-city-trade.json`: MaterialTransaction example.
1010
- `05-complete-flow.json`: Array of objects representing a full flow.
11+
- `06-offer.json`: Minimal interop offer payload (v0.1.1).
12+
- `07-match.json`: Minimal interop match payload (v0.1.1).
13+
- `08-transfer.json`: Minimal interop transfer payload (v0.1.1).
1114

1215
## Validation
1316
Run `npm test` from the repository root to validate all examples.

0 commit comments

Comments
 (0)