@wowok/skills 1.1.10 → 1.1.11

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.
@@ -0,0 +1,585 @@
1
+ ---
2
+ name: wowok-scenario
3
+ description: |
4
+ WoWok Industry Driving Modes — opinionated bundles of Permission, Machine,
5
+ Guard, and Allocator defaults per industry. Each mode is a "scene preset"
6
+ (like SUV driving modes: sand / road / water) that pre-fills best-practice
7
+ configuration so a new merchant can publish a working Service in 10 rounds.
8
+
9
+ Use when: user describes an industry ("I do freelance design", "I rent
10
+ cameras", "I run a course"), when wowok-onboard needs default parameters
11
+ for R3-R8, or when a merchant wants to switch from general configuration
12
+ to an industry-tuned preset.
13
+
14
+ Phase 1 covers freelance and rental modes in full detail. Education,
15
+ travel, and subscription modes are outlined for Phase 2/3.
16
+ when_to_use:
17
+ - User mentions an industry (freelance, rental, education, travel, subscription)
18
+ - wowok-onboard R2 needs to load mode defaults
19
+ - User asks "what configuration works for my business"
20
+ - User wants to switch from general mode to an industry preset
21
+ - User wants to compose two modes (e.g., freelance + subscription)
22
+ ---
23
+
24
+ # WoWok Industry Driving Modes
25
+
26
+ > **Related Skills**: [wowok-onboard](../wowok-onboard/SKILL.md) (uses mode defaults in R3-R8), [wowok-machine](../wowok-machine/SKILL.md) (Machine design authority), [wowok-guard](../wowok-guard/SKILL.md) (Guard design authority), [wowok-provider](../wowok-provider/SKILL.md) (Allocator operation), [wowok-safety](../wowok-safety/SKILL.md) (immutability rules)
27
+
28
+ ---
29
+
30
+ ## Overview
31
+
32
+ A **driving mode** is a curated bundle of: industry traits, default Permission indexes, default Machine node graph, default Guard templates, default Allocator strategy, a 10-round build script, an audit checklist, and a failure playbook. Modes are **presets, not constraints** — every underlying MCP operation remains available. Users can override any default or switch to `general` (free) mode at any time.
33
+
34
+ ### What Driving Modes Solve
35
+
36
+ The "object_type wall" — new users do not know which Machine topology, which Guards, which Allocator strategy fits their industry. Modes pre-answer these questions using best practices distilled from real usage (and refined by Loop Engineering over time).
37
+
38
+ ### Mode Catalog
39
+
40
+ | Mode | Phase | Industry | Trust Pattern |
41
+ |------|-------|----------|---------------|
42
+ | `freelance` | 1 | Design / dev / consulting / writing | Milestone allocation, acceptance gate |
43
+ | `rental` | 1 | Equipment / vehicle / property rental | Deposit escrow, return inspection |
44
+ | `education` | 2 | Courses / training / tutoring | Periodic release per session, attendance Guard |
45
+ | `travel` | 2 | Custom tours / multi-segment trips | Multi-tier allocation per segment |
46
+ | `subscription` | 3 | SaaS / content membership / periodic service | Periodic charge, cancel Guard |
47
+ | `general` | always | Anything not covered / hybrid | User-defined from scratch |
48
+
49
+ ---
50
+
51
+ ## Mode Selection Logic
52
+
53
+ The selection algorithm maps the user's business description to industry traits, then to a mode.
54
+
55
+ ### Trait Extraction
56
+
57
+ ```typescript
58
+ type IndustryTraits = {
59
+ has_logistics: boolean; // physical goods to ship?
60
+ communication_heavy: boolean; // lots of back-and-forth before delivery?
61
+ pure_digital: boolean; // deliverable is a file / digital artifact?
62
+ long_cycle: boolean; // multi-week or multi-month engagement?
63
+ deposit_required: boolean; // collect refundable deposit?
64
+ multi_tier_allocation: boolean; // pay multiple parties per segment?
65
+ };
66
+ ```
67
+
68
+ ### Selection Matrix
69
+
70
+ | Trait Signature | Mode |
71
+ |-----------------|------|
72
+ | `pure_digital + communication_heavy + !deposit_required` | freelance |
73
+ | `deposit_required + has_logistics + returnable` | rental |
74
+ | `long_cycle + attendance + periodic_release` | education |
75
+ | `multi_tier_allocation + segment_based + long_cycle` | travel |
76
+ | `periodic_charge + cancel_anytime + pure_digital` | subscription |
77
+ | none of the above / multiple conflicts | general |
78
+
79
+ ### Composition (Mode Stacking)
80
+
81
+ Two modes can combine. Conflicts surface for user decision:
82
+
83
+ | Combination | Use Case | Conflict Resolution |
84
+ |-------------|----------|---------------------|
85
+ | freelance + subscription | Retainer consulting (monthly + milestone) | Allocator: split into retainer (subscription) + milestone (freelance) |
86
+ | rental + education | Equipment training rental | Machine: extend rental nodes with attendance gates |
87
+ | travel + rental | Tour with equipment | Allocator: segment allocation + deposit escrow side-by-side |
88
+
89
+ When two modes specify different Permission indexes for the same role, user decides which set to use.
90
+
91
+ ---
92
+
93
+ ## Freelance Mode (Phase 1 Priority)
94
+
95
+ ### Industry Traits
96
+
97
+ ```typescript
98
+ const freelanceTraits: IndustryTraits = {
99
+ has_logistics: false,
100
+ communication_heavy: true,
101
+ pure_digital: true,
102
+ long_cycle: false,
103
+ deposit_required: false,
104
+ multi_tier_allocation: false,
105
+ };
106
+ ```
107
+
108
+ ### Applicable Scenarios
109
+
110
+ - Designer taking logo / UI / poster commissions
111
+ - Developer taking outsourced projects
112
+ - Consultant charging by hour or milestone
113
+ - Writer / translator / voice-over artist
114
+
115
+ ### Default Permission Indexes
116
+
117
+ | Role | permissionIndex | Scope |
118
+ |------|-----------------|-------|
119
+ | Service Provider | 1000 | Create / advance / allocate / arbitration (user-defined, ≥1000) |
120
+ | Arbiter | 1500 | Arbitration operations only (user-defined, ≥1000) |
121
+ | Customer | n/a | Operates via `namedOperator: ""` on Forwards (order owner/agents) — no permissionIndex needed |
122
+
123
+ > **Note**: Indexes < 1000 are reserved for `BuiltinPermissionIndex` (e.g., 100 = `REPOSITORY_NEW`, 500 = unassigned). Customer actions use `namedOperator: ""` per wowok-machine §Forward Permission Model, not a permissionIndex.
124
+
125
+ ### Default Machine Template
126
+
127
+ ```
128
+ ordered → in_progress → delivered → accepted → completed
129
+
130
+ └→ disputed → refunded (terminal)
131
+ ```
132
+
133
+ | Node | prev_node | threshold | Forwards |
134
+ |------|-----------|-----------|----------|
135
+ | `ordered` | `""` (entry) | 1 | `place_order` (weight 1, namedOperator: `""`, customer) |
136
+ | `in_progress` | `ordered` | 1 | `accept_order` (weight 1, permissionIndex 1000, provider) |
137
+ | `delivered` | `in_progress` | 1 | `submit_deliverable` (weight 1, permissionIndex 1000, provider, guard: `deliver_guard`) |
138
+ | `accepted` | `delivered` | 1 | `confirm_acceptance` (weight 1, namedOperator: `""`, customer, guard: `accept_guard`) |
139
+ | `completed` | `accepted` | 1 | `finalize` (weight 1, permissionIndex 1000, provider) |
140
+ | `disputed` | `delivered` | 1 | `open_dispute` (weight 1, namedOperator: `""`, customer) |
141
+ | `refunded` | `disputed` | 1 | `arbiter_rule_refund` (weight 1, permissionIndex 1500, arbiter) |
142
+
143
+ > `buy_guard` binds to `Service.buy_guard` (not a Machine Forward) — gates order placement at the Service level.
144
+
145
+ ### Default Guard Templates
146
+
147
+ | Guard Name | Host / Trigger | Validation Logic |
148
+ |-----------|----------------|-------------------|
149
+ | `buy_guard` | Service.buy_guard (order placement) | Verify customer KYC (Personal.mark present) + amount ≤ cap |
150
+ | `deliver_guard` | Machine Forward `submit_deliverable` | Verify WIP hash matches submitted deliverable |
151
+ | `accept_guard` | Machine Forward `confirm_acceptance` | Customer signature OR timeout auto-accept (forward with threshold met by timeout) |
152
+ | `withdraw_guard` | Allocator trigger (fires at `completed` terminal) | Progress.current = `completed` (verify acceptance path completed before releasing funds) |
153
+ | `refund_guard` | Allocator trigger (fires at `refunded` terminal) | Progress.current = `refunded` (verify arbiter ruling or provider default confirmed) |
154
+
155
+ ### Default Allocator Strategy
156
+
157
+ ```typescript
158
+ // Wrapped in AllocatorsSchema: { description, threshold, allocators: [...] }
159
+ const freelanceAllocators = [
160
+ {
161
+ guard: "withdraw_guard", // Allocator trigger guard (fires at completed terminal)
162
+ sharing: [
163
+ { who: { Entity: { name_or_address: "<service_name>" } }, sharing: 10000, mode: "Rate" }, // 100% to provider
164
+ ],
165
+ },
166
+ {
167
+ guard: "refund_guard", // Allocator trigger guard (fires at refunded terminal)
168
+ sharing: [
169
+ { who: { GuardIdentifier: 0 }, sharing: 10000, mode: "Rate" }, // 100% to Order (customer withdraws)
170
+ ],
171
+ },
172
+ // Platform: 0% in Phase 1 (zero take-rate to lower barrier)
173
+ ];
174
+ ```
175
+
176
+ ### 10-Round Build Script (Freelance)
177
+
178
+ | Round | Goal | MCP Operation | Mode Default Applied |
179
+ |-------|------|---------------|----------------------|
180
+ | R1 | Account setup | `account_operation.gen` + `faucet` | — |
181
+ | R2 | Industry confirm | (internal trait match) | freelance mode loaded |
182
+ | R3 | Service definition | `onchain_operations.service` CREATE | name="Freelance Service", type_parameter=`0x2::wow::WOW` |
183
+ | R4 | Permission | `onchain_operations.permission` CREATE or REUSE | indexes 1000/1500 (customer uses namedOperator: "") |
184
+ | R5 | Machine | `onchain_operations.machine` CREATE | 7-node template above, publish=false |
185
+ | R6 | Progress binding | `onchain_operations.progress` CREATE + `machine` MODIFY | mirror all nodes |
186
+ | R7 | Guards | `onchain_operations.guard` CREATE × 5 + `gen_passport` test | 5 Guard templates above |
187
+ | R8 | Allocation | `onchain_operations.allocation` CREATE × 2 + `service.order_allocators` MODIFY | 100% provider + 100% refund path |
188
+ | R9 | Test order | `order` CREATE + `progress` advance + `allocation.alloc_by_guard` | full flow dry run |
189
+ | R10 | Publish | `machine` publish + `service` publish | pre-publish audit must PASS |
190
+
191
+ ### Audit Checklist (Freelance-Specific)
192
+
193
+ | # | Check | Blocker? |
194
+ |---|-------|----------|
195
+ | 1 | `accept_guard` exists and tests PASS | YES (no acceptance = funds stuck) |
196
+ | 2 | `refund_guard` exists and `customer_refund` Allocator covers 100% | YES (no refund = dispute deadlock) |
197
+ | 3 | `deliver_guard` validates WIP hash | Warning (recommended) |
198
+ | 4 | Machine has terminal nodes for both `completed` and `refunded` paths | YES (dead-end = stuck funds) |
199
+ | 5 | All Forwards reference valid permissionIndex (≥1000) OR `namedOperator` in R4 Permission | YES |
200
+ | 6 | `withdraw_guard` only triggers when `Progress.current = completed` | YES (prevents premature payout) |
201
+ | 7 | Service `description` includes deliverable scope (for arbitration evidence) | Warning |
202
+
203
+ ### Failure Playbooks (Freelance-Specific)
204
+
205
+ **P1: Customer never accepts delivery**
206
+ - Mitigation: `accept_guard` includes timeout auto-accept forward (threshold met by `namedOperator: ""` after N days).
207
+ - Recovery: call `progress.hold: false` on the timeout forward to auto-advance.
208
+
209
+ **P2: Provider submits wrong deliverable hash**
210
+ - Mitigation: `deliver_guard` enforces WIP hash match.
211
+ - Recovery: provider re-generates WIP via `wip_file.generate`, re-submits via `progress.hold: false` with corrected hash.
212
+
213
+ **P3: Dispute opens but no arbiter assigned**
214
+ - Mitigation: R4 Permission must include `permissionIndex: 1500` for arbiter role; R8 must bind an existing Arbitration Service.
215
+ - Recovery: bind Arbitration via `service.arbitrations.list` MODIFY before publish.
216
+
217
+ ---
218
+
219
+ ## Rental Mode (Phase 1 Priority)
220
+
221
+ ### Industry Traits
222
+
223
+ ```typescript
224
+ const rentalTraits: IndustryTraits = {
225
+ has_logistics: true,
226
+ communication_heavy: false,
227
+ pure_digital: false,
228
+ long_cycle: false,
229
+ deposit_required: true,
230
+ multi_tier_allocation: false,
231
+ };
232
+ ```
233
+
234
+ ### Applicable Scenarios
235
+
236
+ - Photography equipment rental
237
+ - Vehicle rental
238
+ - Property short-let
239
+ - Power tools / luxury goods rental
240
+
241
+ ### Default Permission Indexes
242
+
243
+ | Role | permissionIndex | Scope |
244
+ |------|-----------------|-------|
245
+ | Owner | 1000 | Publish / inspect / deduct deposit / refund (user-defined, ≥1000) |
246
+ | Arbiter | 1500 | Damage dispute resolution (user-defined, ≥1000) |
247
+ | Renter | n/a | Operates via `namedOperator: ""` on Forwards (order owner/agents) — no permissionIndex needed |
248
+
249
+ > **Note**: Indexes < 1000 are reserved for `BuiltinPermissionIndex` (e.g., 100 = `REPOSITORY_NEW`, 500 = unassigned). Renter actions use `namedOperator: ""` per wowok-machine §Forward Permission Model.
250
+
251
+ ### Default Machine Template
252
+
253
+ ```
254
+ reserved → paid_deposit → in_use → returned → inspected → deposit_refunded → completed
255
+
256
+ ├→ damage_confirmed → deposit_deducted (terminal)
257
+ └→ arbiter_rule (terminal)
258
+ ```
259
+
260
+ | Node | prev_node | threshold | Forwards |
261
+ |------|-----------|-----------|----------|
262
+ | `reserved` | `""` | 1 | `place_reservation` (weight 1, namedOperator: `""`, renter) |
263
+ | `paid_deposit` | `reserved` | 1 | `pay_deposit_and_rent` (weight 1, namedOperator: `""`, renter) |
264
+ | `in_use` | `paid_deposit` | 1 | `pickup` (weight 1, permissionIndex 1000, owner) — gated by `deposit_guard` |
265
+ | `returned` | `in_use` | 1 | `trigger_return` (weight 1, namedOperator: `""`, renter, guard: `return_guard`) OR timeout auto-return |
266
+ | `inspected` | `returned` | 1 | `inspect_item` (weight 1, permissionIndex 1000, owner) — gated by `inspect_guard` |
267
+ | `deposit_refunded` | `inspected` | 1 | `approve_return` (weight 1, permissionIndex 1000, owner) — gated by `refund_guard` |
268
+ | `completed` | `deposit_refunded` | 1 | `finalize` (weight 1, permissionIndex 1000, owner) |
269
+ | `damage_confirmed` | `inspected` | 1 | `claim_damage` (weight 1, permissionIndex 1000, owner) — gated by `damage_guard` |
270
+ | `deposit_deducted` | `damage_confirmed` | 1 | `deduct_deposit` (weight 1, permissionIndex 1000, owner) |
271
+ | `arbiter_rule` | `inspected` | 1 | `escalate_arbiter` (weight 1, namedOperator: `""` AND permissionIndex 1000, either party) |
272
+
273
+ > The `arbiter_rule` terminal has no Service-level Allocator — disputes filed via this path are resolved by the bound Arbitration object's compensation fund mechanism (see Audit Checklist #5).
274
+
275
+ ### Default Guard Templates
276
+
277
+ | Guard Name | Host / Trigger | Validation Logic |
278
+ |-----------|----------------|-------------------|
279
+ | `deposit_guard` | Machine Forward `pickup` AND Allocator trigger (fires at `in_use`) | Order.balance ≥ deposit amount (deposit frozen in escrow) |
280
+ | `return_guard` | Machine Forward `trigger_return` | Renter signature OR rental period timeout |
281
+ | `inspect_guard` | Machine Forward `inspect_item` | Owner submission confirming item state (WIP hash of return condition) |
282
+ | `refund_guard` | Machine Forward `approve_return` AND Allocator trigger (fires at `deposit_refunded`) | Inspection passed (Progress history shows `inspect_item` accomplished) |
283
+ | `damage_guard` | Machine Forward `claim_damage` AND Allocator trigger (fires at `damage_confirmed`) | Owner submission + WIP hash diff (pre-rental vs post-rental) |
284
+
285
+ ### Default Allocator Strategy
286
+
287
+ ```typescript
288
+ // Wrapped in AllocatorsSchema: { description, threshold, allocators: [...] }
289
+ const rentalAllocators = [
290
+ {
291
+ guard: "deposit_guard", // Allocator trigger guard (fires at pickup)
292
+ sharing: [
293
+ { who: { Entity: { name_or_address: "<service_name>" } }, sharing: 10000, mode: "Rate" }, // 100% rent to owner immediately
294
+ ],
295
+ },
296
+ {
297
+ guard: "refund_guard", // Allocator trigger guard (fires on inspection pass)
298
+ sharing: [
299
+ { who: { GuardIdentifier: 0 }, sharing: 10000, mode: "Rate" }, // 100% deposit back to renter (Order)
300
+ ],
301
+ },
302
+ {
303
+ guard: "damage_guard", // Allocator trigger guard (fires on damage claim)
304
+ sharing: [
305
+ { who: { Entity: { name_or_address: "<service_name>" } }, sharing: 10000, mode: "Rate" }, // 100% deposit to owner as compensation
306
+ ],
307
+ },
308
+ ];
309
+ ```
310
+
311
+ ### 10-Round Build Script (Rental)
312
+
313
+ | Round | Goal | MCP Operation | Mode Default Applied |
314
+ |-------|------|---------------|----------------------|
315
+ | R1 | Account setup | `account_operation.gen` + `faucet` | — |
316
+ | R2 | Industry confirm | (internal trait match) | rental mode loaded |
317
+ | R3 | Service definition | `onchain_operations.service` CREATE | name includes item + deposit terms in description |
318
+ | R4 | Permission | `onchain_operations.permission` CREATE or REUSE | indexes 1000/1500 (renter uses namedOperator: "") |
319
+ | R5 | Machine | `onchain_operations.machine` CREATE | 10-node template above |
320
+ | R6 | Progress binding | `onchain_operations.progress` CREATE | mirror all nodes |
321
+ | R7 | Guards | `onchain_operations.guard` CREATE × 5 + `gen_passport` test | 5 Guard templates above |
322
+ | R8 | Allocation | `onchain_operations.allocation` CREATE × 3 + `service.order_allocators` MODIFY | rent + refund + deduct paths |
323
+ | R9 | Test order | `order` CREATE + `progress` advance × 10 + `allocation.alloc_by_guard` × 3 | full flow dry run including damage path |
324
+ | R10 | Publish | `machine` publish + `service` publish | pre-publish audit must PASS, deposit path verified |
325
+
326
+ ### Audit Checklist (Rental-Specific)
327
+
328
+ | # | Check | Blocker? |
329
+ |---|-------|----------|
330
+ | 1 | `deposit_guard` validates `Order.balance ≥ deposit_amount` | YES (no deposit = renter can run off with item) |
331
+ | 2 | `refund_guard` + `deposit_refund_to_renter` Allocator covers 100% refund | YES (no refund path = deposit theft) |
332
+ | 3 | `damage_guard` requires WIP hash diff (pre vs post rental) | YES (no evidence = arbitrary deduction) |
333
+ | 4 | Machine includes both `deposit_refunded` and `deposit_deducted` terminal paths | YES |
334
+ | 5 | Arbitration bound to Service via `arbitrations.list` | Warning (recommended for damage disputes) |
335
+ | 6 | Rental period timeout forward exists on `in_use` node | Warning (prevents items never returned) |
336
+ | 7 | Deposit amount recorded in Service `description` for evidence | Warning |
337
+ | 8 | Pre-rental WIP generated and hash stored for post-rental comparison | YES (without pre-hash, damage cannot be proven) |
338
+
339
+ ### Failure Playbooks (Rental-Specific)
340
+
341
+ **P1: Renter never returns item**
342
+ - Mitigation: `in_use` node has timeout forward to `returned` (auto-return) or directly to `damage_confirmed` (treat as non-return).
343
+ - Recovery: after timeout, owner calls `progress.hold: false` on the timeout forward; `damage_guard` validates non-return; `deposit_deduct_to_owner` Allocator fires.
344
+
345
+ **P2: Owner claims damage but no pre-rental WIP exists**
346
+ - Mitigation: R8 audit checklist #8 blocks publish without pre-rental WIP.
347
+ - Recovery: impossible post-publish — must create new Service with WIP. Surface this as a hard lesson; prevent with audit.
348
+
349
+ **P3: Deposit amount insufficient for damage**
350
+ - Mitigation: Service `description` records deposit amount; `deposit_guard` validates balance.
351
+ - Recovery: Arbitration can rule additional payment via `arbiter_rule` node, but only up to deposited amount. For excess, off-chain recovery.
352
+
353
+ **P4: Owner refuses to inspect (blocks refund)**
354
+ - Mitigation: `returned` node has timeout forward to `inspected` (auto-inspect pass) if owner doesn't act within N days.
355
+ - Recovery: renter calls timeout forward, `inspect_guard` auto-passes, `refund_guard` fires, deposit returns to renter.
356
+
357
+ **P5: Double-spend dispute (both parties claim deposit)**
358
+ - Mitigation: Machine topology ensures `inspected` has mutually exclusive forwards (`approve_return` vs `claim_damage`), first-Pair-wins rule.
359
+ - Recovery: if contested, `escalate_arbiter` forward routes to Arbitration.
360
+
361
+ ---
362
+
363
+ ## Education Mode (Phase 2 — Outline)
364
+
365
+ ### Industry Traits
366
+
367
+ ```typescript
368
+ const educationTraits: IndustryTraits = {
369
+ has_logistics: false,
370
+ communication_heavy: true,
371
+ pure_digital: false,
372
+ long_cycle: true,
373
+ deposit_required: true, // tuition pre-pay
374
+ multi_tier_allocation: false,
375
+ };
376
+ ```
377
+
378
+ ### Mode Outline
379
+
380
+ - **Default Machine**: enroll → pay_tuition → session_1 → session_2 → ... → session_N → completed / refunded
381
+ - **Default Guards**: `attendance_guard` (per session, student signs), `refund_guard` (institution approval OR arbiter)
382
+ - **Default Allocator**: 1/N of tuition released per session attendance; unearned portion refundable on `refund_guard`
383
+ - **Key trait**: `setting_locked_time` on Service prevents institution from changing rules mid-semester (regulatory compliance)
384
+ - **GTM angle**: targets "tutoring institutions run away with prepaid tuition" pain point; policy-driven adoption
385
+
386
+ ### Phase 2 Build Status
387
+
388
+ - Machine template: drafted, needs 1 pilot institution test
389
+ - Guards: `attendance_guard` needs WIP hash for session content commitment
390
+ - Allocator: per-session release needs threshold-based trigger
391
+ - Audit checklist: pending real-world pilot
392
+
393
+ ---
394
+
395
+ ## Travel Mode (Phase 2 — Outline)
396
+
397
+ ### Industry Traits
398
+
399
+ ```typescript
400
+ const travelTraits: IndustryTraits = {
401
+ has_logistics: false,
402
+ communication_heavy: true,
403
+ pure_digital: false,
404
+ long_cycle: true,
405
+ deposit_required: true, // deposit + final payment
406
+ multi_tier_allocation: true, // agency → hotel → guide → driver
407
+ };
408
+ ```
409
+
410
+ ### Mode Outline
411
+
412
+ - **Default Machine**: order → pay_deposit → pay_final → segment_D1 → segment_D2 → ... → return → completed / refunded
413
+ - **Default Guards**: `segment_guard` (per-segment arrival WIP, e.g., hotel check-in), `refund_guard` (agency approval OR arbiter for trip interruption)
414
+ - **Default Allocator**: multi-tier — deposit 20% to agency, final 80% to agency, then agency-side Allocation splits to hotel/guide/driver per segment
415
+ - **Key trait**: multi-tier Allocation is WoWok's unique advantage over traditional travel platforms
416
+ - **GTM angle**: targets "paid in full then service shrinks" pain point
417
+
418
+ ### Phase 2 Build Status
419
+
420
+ - Machine template: drafted, needs multi-tier Allocation pilot
421
+ - Guards: `segment_guard` needs standardized WIP templates per segment type (hotel, transport, activity)
422
+ - Allocator: multi-tier waterfall needs guard chaining validation
423
+ - Audit checklist: pending real-world pilot
424
+
425
+ ---
426
+
427
+ ## Subscription Mode (Phase 3 — Outline)
428
+
429
+ ### Industry Traits
430
+
431
+ ```typescript
432
+ const subscriptionTraits: IndustryTraits = {
433
+ has_logistics: false,
434
+ communication_heavy: false,
435
+ pure_digital: true,
436
+ long_cycle: true,
437
+ deposit_required: false,
438
+ multi_tier_allocation: false,
439
+ };
440
+ ```
441
+
442
+ ### Mode Outline
443
+
444
+ - **Default Machine**: subscribe → charge_period_1 → deliver_period_1 → charge_period_2 → ... → cancel / expire
445
+ - **Default Guards**: `charge_guard` (user confirms each charge — no auto-renew trap), `cancel_guard` (user cancels anytime, takes effect next period), `deliver_guard` (creator WIP hash per period — prevents content abandonment)
446
+ - **Default Allocator**: each charge → 100% to creator; unearned periods → refund to subscriber
447
+ - **Key trait**: pure digital, native WoWok soil; directly attacks "auto-renew trap" and "platform takes 30%" pain points
448
+ - **GTM angle**: independent creators (Indie Hackers, niche SaaS, paid newsletters)
449
+
450
+ ### Phase 3 Build Status
451
+
452
+ - Machine template: planned
453
+ - Guards: `charge_guard` needs periodic trigger mechanism (off-chain scheduler + on-chain Guard)
454
+ - Allocator: per-period release straightforward
455
+ - Audit checklist: pending design review
456
+
457
+ ---
458
+
459
+ ## Escape Hatch
460
+
461
+ Any user can switch from a driving mode to `general` (free) mode at any time. This ditches all defaults and exposes raw MCP operations.
462
+
463
+ ### When to Use the Escape Hatch
464
+
465
+ - User's business doesn't fit any Phase 1-3 mode
466
+ - User wants a hybrid not supported by Mode Composition
467
+ - Expert user wants full manual control
468
+ - Industry-specific edge case (e.g., freelance with deposit requirement that's not rental)
469
+
470
+ ### How to Switch
471
+
472
+ ```
473
+ User says: "switch to general mode" or "configure manually"
474
+ ├── Stop applying mode defaults to remaining rounds
475
+ ├── Surface the IndustryModeSchema shape as a blank template
476
+ ├── User provides: Permission indexes, Machine nodes, Guards, Allocators manually
477
+ ├── wowok-onboard R3-R8 still execute, but with empty defaults
478
+ └── wowok-machine / wowok-guard / wowok-provider become primary references
479
+ ```
480
+
481
+ ### Warning
482
+
483
+ Switching to general mode mid-onboarding does NOT discard already-created objects. The Service draft, Permission, and Machine created under a previous mode remain on-chain. The user can:
484
+ - Continue building on top of them (REUSE pattern)
485
+ - Abandon them and start fresh (CREATE new objects)
486
+
487
+ ### Recommitting to a Mode
488
+
489
+ User can switch back to a driving mode after using general mode:
490
+ - wowok-onboard re-loads mode defaults for any unconfigured rounds
491
+ - Already-configured objects are kept (REUSE); only missing pieces get mode defaults
492
+ - Checkpoint is updated with the new mode
493
+
494
+ ---
495
+
496
+ ## Tier Layering
497
+
498
+ ### Novice Tier — Full Driving Mode
499
+
500
+ - User selects an industry; mode defaults fill R3-R8 with no manual configuration
501
+ - 10-round build completes with user only confirming mode defaults
502
+ - Audit checklist enforces all blocker items
503
+ - Failure playbook provides step-by-step recovery
504
+
505
+ ### Advanced Tier — Customize Defaults
506
+
507
+ - User selects a mode but overrides specific fields (e.g., freelance Allocator changed from 100% provider to 80% provider + 20% platform)
508
+ - Mode template is the starting point, not the contract
509
+ - Audit checklist still runs; user can dismiss warnings with explicit confirmation
510
+ - Trigger: user says "I want to customize" or has done this before
511
+
512
+ ### Expert Tier — Free Mode
513
+
514
+ - User invokes `general` mode (escape hatch)
515
+ - No defaults applied; raw MCP operations exposed
516
+ - wowok-machine, wowok-guard, wowok-provider become the primary references
517
+ - Audit checklist is optional but recommended
518
+ - Trigger: user explicitly asks for "expert mode" or invokes MCP operations by name
519
+
520
+ ---
521
+
522
+ ## IndustryModeSchema (Reference)
523
+
524
+ ```typescript
525
+ type IndustryModeSchema = {
526
+ name: "freelance" | "rental" | "education" | "travel" | "subscription" | "general";
527
+ display_name: string;
528
+ traits: IndustryTraits;
529
+ defaults: {
530
+ permission_indexes: { role: string; index: number | null; scope: string }[]; // null = uses namedOperator: ""
531
+ machine_template: {
532
+ nodes: { name: string; prev_node: string; threshold: number }[];
533
+ forwards: {
534
+ name: string;
535
+ weight: number;
536
+ permissionIndex?: number; // user-defined ≥1000; absent if using namedOperator
537
+ namedOperator?: string; // "" = order owner/agents (customer/renter)
538
+ guard?: string; // Forward guard name (binds via Machine MODIFY)
539
+ }[];
540
+ };
541
+ guard_templates: {
542
+ name: string;
543
+ host: string; // Service.buy_guard | Machine Forward <name> | Allocator trigger
544
+ validation_logic: string;
545
+ table_entries: { identifier: number; b_submission: boolean; value_type: string; value?: string; name: string }[];
546
+ }[];
547
+ // Mirrors AllocatorSchema: each allocator has guard + sharing[] (each item has who + sharing + mode)
548
+ allocator_strategy: {
549
+ guard: string; // Allocator trigger guard name (NOT trigger_guard — matches AllocatorSchema)
550
+ sharing: { who: RecipientType; sharing: number; mode: "Amount" | "Rate" | "Surplus" }[];
551
+ fix?: number; // optional fixed amount
552
+ max?: number | null; // optional cap
553
+ }[];
554
+ arbitration_enabled: boolean;
555
+ };
556
+ dialogue_script: { round: string; goal: string; mcp_calls: string[] }[];
557
+ audit_checklist: { id: number; check: string; blocker: boolean }[];
558
+ failure_playbook: { scenario: string; mitigation: string; recovery: string }[];
559
+ escape_hatch: {
560
+ available: true;
561
+ warning: string;
562
+ };
563
+ };
564
+
565
+ type RecipientType =
566
+ | { Entity: { name_or_address: string } }
567
+ | { GuardIdentifier: number }
568
+ | { Signer: "signer" };
569
+ ```
570
+
571
+ Every mode definition in this Skill follows this schema. Phase 2/3 modes (education, travel, subscription) will fill in the same schema when promoted to Phase 1 detail level.
572
+
573
+ ---
574
+
575
+ ## Quick Reference
576
+
577
+ | Want to... | Use this |
578
+ |------------|----------|
579
+ | Pick a mode for a new user | §Mode Selection Logic |
580
+ | Get freelance defaults | §Freelance Mode |
581
+ | Get rental defaults | §Rental Mode |
582
+ | Combine two modes | §Mode Composition |
583
+ | Switch to manual config | §Escape Hatch |
584
+ | Validate before publish | Mode-specific §Audit Checklist |
585
+ | Recover from a stuck flow | Mode-specific §Failure Playbooks |