@mamund/grail 0.0.0-stage → 0.1.0

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.
Files changed (39) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +328 -2
  3. package/affordanceModel.js +23 -0
  4. package/affordanceRegistry.js +14 -0
  5. package/bindings/binding.js +229 -0
  6. package/bindings/httpBinding.js +173 -0
  7. package/bindings/nodeBinding.js +25 -0
  8. package/bindings/stdioBinding.js +58 -0
  9. package/cli/grail-cli.js +565 -0
  10. package/client.js +77 -0
  11. package/config-loader/loadEnvironment.js +71 -0
  12. package/docs/ENVIRONMENT.md +381 -0
  13. package/docs/grail-trust-model.md +665 -0
  14. package/examples/cli-tour/README.md +346 -0
  15. package/examples/cli-tour/capabilities/farewell.js +3 -0
  16. package/examples/cli-tour/capabilities/hello.js +3 -0
  17. package/examples/cli-tour/config/goal.json +3 -0
  18. package/examples/cli-tour/config/inputs.json +3 -0
  19. package/examples/cli-tour/config/observations.json +23 -0
  20. package/examples/cli-tour/config/registry.json +48 -0
  21. package/examples/cli-tour/config/worldstate.json +4 -0
  22. package/examples/cli-tour/g-loop.sh +7 -0
  23. package/examples/cli-tour/inputs/jane.json +3 -0
  24. package/examples/cli-tour/inputs/mike.json +3 -0
  25. package/examples/cli-tour/inputs/ruth.json +3 -0
  26. package/grail.js +59 -0
  27. package/images/grail-release-banner.png +0 -0
  28. package/index.js +2 -0
  29. package/observationStore.js +110 -0
  30. package/package.json +57 -4
  31. package/schemas/goal.schema.json +14 -0
  32. package/schemas/inputs.schema.json +6 -0
  33. package/schemas/observations.schema.json +75 -0
  34. package/schemas/registry.schema.json +285 -0
  35. package/schemas/worldstate.schema.json +7 -0
  36. package/server.js +201 -0
  37. package/utils/loadJSON.js +33 -0
  38. package/utils/validateWithSchema.js +42 -0
  39. package/worldState.js +36 -0
@@ -0,0 +1,665 @@
1
+ # GRAIL Trust Model
2
+
3
+ ## Introduction
4
+
5
+ GRAIL is a runtime for autonomously pursuing a declared goal within a deliberately constructed world.
6
+
7
+ A GRAIL world defines the conditions that matter, the affordances available to change those conditions, the relationships among those affordances, and the bindings used to invoke executable capabilities.
8
+
9
+ This architecture depends on explicit trust relationships.
10
+
11
+ GRAIL does not attempt to understand the application domain or independently determine whether a business operation is safe, appropriate, or authorized. Those responsibilities remain with the capabilities that perform the work.
12
+
13
+ Instead, GRAIL operates within a world that has already been composed and accepted for execution.
14
+
15
+ The central principle of the GRAIL trust model is:
16
+
17
+ > **Autonomy operates inside a trusted world.**
18
+
19
+ This document identifies what GRAIL trusts, where those trust relationships end, and which security responsibilities belong to the runtime, the world definition, and individual capabilities.
20
+
21
+ ---
22
+
23
+ ## 1. Scope
24
+
25
+ This document describes the architectural trust assumptions of GRAIL.
26
+
27
+ It is not a complete security architecture or formal threat model. It does not prescribe particular authentication systems, authorization models, credential stores, network controls, or deployment environments.
28
+
29
+ Its purpose is to establish the boundaries within which those mechanisms operate.
30
+
31
+ The trust model covers:
32
+
33
+ - GRAIL world definitions
34
+ - the GRAIL runtime
35
+ - affordances and their declared effects
36
+ - executable capabilities
37
+ - bindings
38
+ - inputs and outputs
39
+ - worldstate
40
+ - observations
41
+ - design-time tools
42
+ - external systems
43
+
44
+ These relationships provide the foundation for later security controls and threat analysis.
45
+
46
+ ---
47
+
48
+ ## 2. The trusted world
49
+
50
+ A GRAIL world defines the possibilities available to the runtime.
51
+
52
+ The world describes:
53
+
54
+ - the goal to be achieved
55
+ - the conditions relevant to that goal
56
+ - the affordances available to establish those conditions
57
+ - the preconditions governing when affordances are available
58
+ - the effects produced by successful affordances
59
+ - the inputs required by affordances
60
+ - the bindings connecting affordances to executable capabilities
61
+
62
+ The runtime treats this description as authoritative.
63
+
64
+ For example, if an affordance declares:
65
+
66
+ ```json
67
+ {
68
+ "action": "verifyCustomer",
69
+ "preconditions": [
70
+ "customerLoaded"
71
+ ],
72
+ "effects": [
73
+ "customerVerified"
74
+ ]
75
+ }
76
+ ```
77
+
78
+ GRAIL assumes that successful execution of the bound capability establishes `customerVerified`.
79
+
80
+ The runtime does not independently understand what customer verification means.
81
+
82
+ This produces the first major trust assumption:
83
+
84
+ > **GRAIL trusts the world definition to accurately describe the relationships between conditions, affordances, capabilities, and effects.**
85
+
86
+ Errors in the world definition can therefore produce incorrect runtime behavior even when the runtime itself is functioning correctly.
87
+
88
+ ---
89
+
90
+ ## 3. The composer
91
+
92
+ The person or process composing a GRAIL world occupies an important position in the trust model.
93
+
94
+ The composer determines which possibilities exist within the world.
95
+
96
+ The composer may:
97
+
98
+ - define conditions
99
+ - define affordances
100
+ - declare preconditions
101
+ - declare effects
102
+ - connect inputs and outputs
103
+ - select executable bindings
104
+ - add or remove capabilities
105
+ - determine the goal
106
+
107
+ The composer therefore has considerable authority over runtime behavior.
108
+
109
+ A world should be considered trusted only when its definition has been accepted for execution by the organization or environment in which GRAIL is operating.
110
+
111
+ The method by which that trust is established may vary. It could include human review, automated validation, testing, source control, deployment controls, artifact signing, or other mechanisms.
112
+
113
+ GRAIL does not currently prescribe a particular mechanism.
114
+
115
+ ---
116
+
117
+ ## 4. The GRAIL runtime
118
+
119
+ The runtime is responsible for the mechanics of goal pursuit.
120
+
121
+ Its responsibilities include:
122
+
123
+ - loading and validating the world definition
124
+ - evaluating worldstate
125
+ - identifying unresolved conditions
126
+ - selecting among declared possibilities
127
+ - resolving inputs
128
+ - invoking bindings
129
+ - interpreting execution status
130
+ - capturing declared outputs
131
+ - applying declared effects
132
+ - maintaining observations
133
+ - detecting when available capabilities cannot resolve the current state
134
+
135
+ The runtime is trusted to perform these mechanics according to the GRAIL execution model.
136
+
137
+ The runtime is not responsible for understanding the business meaning of the operations it invokes.
138
+
139
+ For example, the runtime may know that:
140
+
141
+ ```text
142
+ approveInvoice
143
+ → invoiceApproved
144
+ ```
145
+
146
+ It does not need to understand accounting policy, approval authority, vendor relationships, or financial controls.
147
+
148
+ This separation allows the application domain to remain opaque to the GRAIL runtime.
149
+
150
+ ---
151
+
152
+ ## 5. Capabilities
153
+
154
+ Capabilities perform domain work.
155
+
156
+ A capability may:
157
+
158
+ - call an API
159
+ - query a database
160
+ - modify a record
161
+ - execute a transaction
162
+ - send a message
163
+ - invoke another service
164
+ - perform a calculation
165
+ - interact with an external system
166
+
167
+ Capabilities are trusted to perform the operations represented by their affordances.
168
+
169
+ Most importantly:
170
+
171
+ > **Capabilities are responsible for enforcing the security policies governing the actions they perform.**
172
+
173
+ These policies may include:
174
+
175
+ - authentication
176
+ - authorization
177
+ - access control
178
+ - business rules
179
+ - transaction limits
180
+ - data validation
181
+ - resource ownership
182
+ - regulatory requirements
183
+
184
+ The fact that GRAIL invokes a capability does not constitute authorization to perform the operation.
185
+
186
+ A capability must not assume that an invocation is authorized simply because it originated from the GRAIL runtime.
187
+
188
+ ---
189
+
190
+ ## 6. Preconditions are not authorization
191
+
192
+ GRAIL preconditions determine whether an affordance is currently available within the modeled world.
193
+
194
+ They are orchestration constraints.
195
+
196
+ They are not security controls.
197
+
198
+ For example:
199
+
200
+ ```json
201
+ {
202
+ "action": "refundOrder",
203
+ "preconditions": [
204
+ "orderLoaded",
205
+ "refundRequested"
206
+ ]
207
+ }
208
+ ```
209
+
210
+ may tell GRAIL that `refundOrder` is an available action.
211
+
212
+ The bound capability must still determine whether the requested refund is authorized.
213
+
214
+ A world might also contain a condition such as:
215
+
216
+ ```text
217
+ refundApproved
218
+ ```
219
+
220
+ That condition may legitimately participate in orchestration. It should not replace authorization checks performed at the capability boundary.
221
+
222
+ Worldstate can be incorrect because of configuration errors, bugs, stale information, incorrect effects, or malicious modification.
223
+
224
+ Therefore:
225
+
226
+ > **GRAIL preconditions describe when an action is possible within the modeled world. Capabilities determine whether the requested action is permitted.**
227
+
228
+ ---
229
+
230
+ ## 7. Effects and SUCCESS
231
+
232
+ Effects are one of the most important trust relationships in GRAIL.
233
+
234
+ Consider:
235
+
236
+ ```text
237
+ verifyCustomer
238
+ SUCCESS
239
+ ↓
240
+ customerVerified = true
241
+ ```
242
+
243
+ When an affordance returns SUCCESS, GRAIL applies its declared effects.
244
+
245
+ The runtime generally cannot independently determine whether the domain meaning represented by those effects has actually been established.
246
+
247
+ GRAIL therefore assumes:
248
+
249
+ > **A successful capability invocation has established the effects declared for its affordance.**
250
+
251
+ This makes the relationship between capability behavior and declared effects part of the trusted world.
252
+
253
+ Incorrect effects can corrupt the runtime's understanding of the world.
254
+
255
+ Capability testing should therefore verify both operational behavior and the accuracy of the effects associated with successful execution.
256
+
257
+ ---
258
+
259
+ ## 8. Bindings
260
+
261
+ Bindings connect affordances to executable implementations.
262
+
263
+ Examples include:
264
+
265
+ ```text
266
+ affordance
267
+ │
268
+ ├── Node module
269
+ ├── HTTP endpoint
270
+ ├── stdio process
271
+ ├── CLI command
272
+ └── other binding mechanisms
273
+ ```
274
+
275
+ Bindings cross an important trust boundary.
276
+
277
+ A binding may cause the runtime to:
278
+
279
+ - load executable code
280
+ - start a process
281
+ - transmit data
282
+ - access the network
283
+ - communicate with external systems
284
+ - expose credentials
285
+ - receive untrusted data
286
+
287
+ A GRAIL world containing executable bindings should therefore be treated as executable configuration.
288
+
289
+ The runtime trusts the world definition to identify approved bindings.
290
+
291
+ Deployments may impose additional restrictions on which binding types, modules, executables, hosts, or services are permitted.
292
+
293
+ Future GRAIL implementations may support mechanisms such as binding allowlists, sandboxing, execution policies, or signed world definitions.
294
+
295
+ ---
296
+
297
+ ## 9. Inputs
298
+
299
+ Inputs provide data required by capabilities.
300
+
301
+ Inputs may originate from:
302
+
303
+ - scenario configuration
304
+ - previous capability outputs
305
+ - environment configuration
306
+ - users
307
+ - external systems
308
+ - other runtime sources
309
+
310
+ Inputs do not establish authorization.
311
+
312
+ The runtime may validate structural properties of inputs, such as presence, type, or resolvability. Domain validation remains the responsibility of the capability receiving the input.
313
+
314
+ A capability should treat externally derived input according to the security requirements of its domain.
315
+
316
+ ---
317
+
318
+ ## 10. Outputs
319
+
320
+ Capabilities may return outputs that become available to subsequent affordances.
321
+
322
+ For example:
323
+
324
+ ```text
325
+ createCustomer
326
+ │
327
+ ▼
328
+ customerId
329
+ │
330
+ ▼
331
+ lookupAccount
332
+ ```
333
+
334
+ GRAIL may validate mechanical properties of these outputs.
335
+
336
+ The runtime can determine whether:
337
+
338
+ - an expected output exists
339
+ - a value can be extracted
340
+ - a resolver succeeds
341
+ - a response is structurally valid
342
+
343
+ The runtime generally cannot determine whether the value is semantically valid for the application domain.
344
+
345
+ That responsibility remains with the capability or external system that consumes the value.
346
+
347
+ Outputs also do not directly modify worldstate. Worldstate changes occur through the declared effects of successful affordances.
348
+
349
+ This separation helps preserve the distinction between data and conditions.
350
+
351
+ ---
352
+
353
+ ## 11. Worldstate
354
+
355
+ Worldstate represents the conditions currently believed to hold within the GRAIL world.
356
+
357
+ The runtime uses worldstate to determine which affordances are available and which conditions still need to be established.
358
+
359
+ Worldstate is therefore operationally significant.
360
+
361
+ Unauthorized or incorrect modification of worldstate could change the runtime's decisions.
362
+
363
+ Worldstate should be modified through the mechanisms defined by the GRAIL execution model rather than arbitrary capability behavior.
364
+
365
+ A capability reports execution results. The runtime applies the corresponding declared effects.
366
+
367
+ This preserves the runtime as the authority over its own model of the world.
368
+
369
+ ---
370
+
371
+ ## 12. Observations
372
+
373
+ GRAIL observations provide a record of execution.
374
+
375
+ Depending on the binding and configuration, observations may contain:
376
+
377
+ - affordance identifiers
378
+ - invocation metadata
379
+ - input values
380
+ - HTTP requests
381
+ - HTTP responses
382
+ - headers
383
+ - process results
384
+ - capability outputs
385
+ - errors
386
+ - timestamps
387
+
388
+ Observations can therefore contain sensitive information.
389
+
390
+ A production GRAIL deployment should consider:
391
+
392
+ - credential redaction
393
+ - sensitive-data filtering
394
+ - access control
395
+ - retention
396
+ - storage protection
397
+ - audit requirements
398
+
399
+ Observations should be treated as operational records rather than an automatically safe debugging artifact.
400
+
401
+ The observation store records what GRAIL observed. It does not independently establish domain truth.
402
+
403
+ ---
404
+
405
+ ## Beta execution guidance
406
+
407
+ The current beta runtime assumes that the GRAIL world and the environment executing it are trusted. **A registry with bindings is executable configuration**, not passive data. Only run worlds whose registry, capability implementations, dependencies, and binding destinations have been reviewed and approved for the host environment. Structural configuration validation does not establish that a world or its capabilities are safe.
408
+
409
+ **Binding execution boundaries:**
410
+
411
+ - **Node:** a configured module executes inside the GRAIL process and inherits its privileges. The runtime does not sandbox the module or confine module paths to the world directory.
412
+ - **Stdio:** a configured executable runs as a child process with the host user's privileges. Do not treat process launch as a sandbox or assume child processes are confined to the scenario directory.
413
+ - **HTTP:** a configured endpoint receives the data sent by the binding. Restrict destinations and credentials according to deployment policy; the runtime does not establish the trustworthiness of a destination.
414
+
415
+ **Credentials and observations:** Inputs, resolved binding arguments, HTTP headers, responses, stdout/stderr, and extracted outputs may be recorded in observations. Do not put secrets directly into scenario inputs or captured outputs unless their exposure and retention are acceptable. Prefer credentials managed by capabilities or their execution environment. Protect any `observations.json` file and any application-retained result objects as potentially sensitive operational data. The beta runtime does not automatically redact sensitive values.
416
+
417
+ **Long-running operations and uncertain outcomes:** The beta runtime does not enforce application-level execution timeouts for Node, HTTP, or stdio bindings. A capability may hang or run indefinitely. Callers and capability authors should apply their own operational limits where appropriate. A caller stopping its wait, aborting an HTTP request, or terminating a process does **not** prove that an external operation had no effect. In particular, do not automatically retry non-idempotent operations when the outcome is uncertain. The current `SUCCESS`/`BLOCKED`/`FAIL` model does not provide a separate `UNKNOWN` status.
418
+
419
+ **Responsibility boundary:** GRAIL evaluates conditions and invokes configured capabilities; capabilities enforce authentication, authorization, input validation, and domain-specific safety. Preconditions are not authorization checks. These beta limitations are explicit trust assumptions, not security guarantees.
420
+
421
+ ---
422
+
423
+ ## 13. External systems
424
+
425
+ Capabilities frequently interact with systems outside the GRAIL trust boundary.
426
+
427
+ These may include:
428
+
429
+ - APIs
430
+ - SaaS platforms
431
+ - databases
432
+ - command-line tools
433
+ - local processes
434
+ - remote services
435
+ - other autonomous systems
436
+
437
+ External systems may fail, return unexpected information, reject requests, or behave maliciously.
438
+
439
+ Bindings and capabilities should therefore treat external interactions as trust-boundary crossings.
440
+
441
+ GRAIL can handle mechanical failures such as unavailable bindings, malformed results, or execution failures.
442
+
443
+ The interpretation of domain-specific responses remains the responsibility of the capability.
444
+
445
+ ---
446
+
447
+ ## 14. Design-time AI
448
+
449
+ Large language models and other AI systems can assist in composing GRAIL worlds.
450
+
451
+ They may help:
452
+
453
+ - identify conditions
454
+ - propose affordances
455
+ - identify existing capabilities
456
+ - generate capability implementations
457
+ - create bindings
458
+ - define preconditions and effects
459
+ - generate schemas and configuration
460
+ - construct tests
461
+ - inspect worlds for inconsistencies
462
+
463
+ AI-generated artifacts should not automatically become trusted runtime artifacts.
464
+
465
+ They should pass through the same validation and acceptance process as artifacts created by humans.
466
+
467
+ A useful distinction is:
468
+
469
+ ```text
470
+ AI-generated world
471
+ │
472
+ ▼
473
+ review / validation / testing
474
+ │
475
+ ▼
476
+ trusted GRAIL world
477
+ │
478
+ ▼
479
+ runtime autonomy
480
+ ```
481
+
482
+ The use of AI at design time does not change the runtime trust model.
483
+
484
+ ---
485
+
486
+ ## 15. Runtime AI
487
+
488
+ GRAIL does not require an LLM to autonomously pursue a goal.
489
+
490
+ Future implementations may use LLMs or other decision mechanisms at runtime for tasks such as selecting among multiple conditions or multiple affordances capable of producing the same effect.
491
+
492
+ Such components should operate within the possibilities declared by the GRAIL world.
493
+
494
+ Introducing an LLM as a selection mechanism does not grant that model additional authority over capabilities, bindings, effects, or worldstate.
495
+
496
+ The trusted world remains the boundary within which runtime decisions occur.
497
+
498
+ ---
499
+
500
+ ## 16. Responsibility summary
501
+
502
+ | Component | Trusted responsibility |
503
+ |---|---|
504
+ | Composer | Accurately model the intended world |
505
+ | World definition | Describe approved possibilities |
506
+ | Registry | Declare affordances, relationships, effects, and bindings |
507
+ | Runtime | Correctly enforce GRAIL execution mechanics |
508
+ | Capability | Correctly perform its domain operation |
509
+ | Capability | Enforce domain security and authorization |
510
+ | Binding | Invoke the intended implementation |
511
+ | Inputs | Supply data, subject to validation |
512
+ | Outputs | Supply declared data values |
513
+ | Worldstate | Represent conditions currently believed to hold |
514
+ | Observations | Record execution evidence |
515
+ | External systems | Provide services according to their own contracts |
516
+
517
+ No single component establishes the security of the entire system.
518
+
519
+ Security emerges from the correct enforcement of responsibilities at each trust boundary.
520
+
521
+ ---
522
+
523
+ ## 17. Primary trust boundaries
524
+
525
+ The major GRAIL trust boundaries can be summarized as:
526
+
527
+ ```text
528
+ COMPOSITION
529
+ │
530
+ ▼
531
+ ┌─────────────────────────┐
532
+ │ Trusted GRAIL World │
533
+ │ │
534
+ │ goal │
535
+ │ worldstate │
536
+ │ registry │
537
+ │ bindings │
538
+ └────────────┬────────────┘
539
+ │
540
+ ▼
541
+ ┌─────────────┐
542
+ │ GRAIL │
543
+ │ Runtime │
544
+ └──────┬──────┘
545
+ │
546
+ binding boundary
547
+ │
548
+ ┌───────┼────────┐
549
+ ▼ ▼ ▼
550
+ Node HTTP stdio
551
+ │ │ │
552
+ ▼ ▼ ▼
553
+ CAPABILITIES
554
+ │
555
+ │ domain/security boundary
556
+ ▼
557
+ EXTERNAL SYSTEMS
558
+ ```
559
+
560
+ The world defines what GRAIL may attempt.
561
+
562
+ The runtime determines what currently needs to happen.
563
+
564
+ Bindings connect declared possibilities to executable implementations.
565
+
566
+ Capabilities determine whether requested domain actions are valid and authorized.
567
+
568
+ ---
569
+
570
+ ## 18. Threats outside the current model
571
+
572
+ The initial GRAIL trust model assumes a trusted execution environment.
573
+
574
+ A more complete security architecture may eventually address threats including:
575
+
576
+ - malicious or modified registries
577
+ - unauthorized worldstate modification
578
+ - malicious capability implementations
579
+ - compromised external services
580
+ - unsafe executable bindings
581
+ - credential leakage
582
+ - sensitive observation data
583
+ - dependency or supply-chain attacks
584
+ - denial of service
585
+ - capability impersonation
586
+ - tampering with capability results
587
+ - untrusted scenario packages
588
+ - compromised design-time generation tools
589
+
590
+ These concerns should inform future security work without requiring the runtime to understand application-domain policy.
591
+
592
+ ---
593
+
594
+ ## 19. Future controls
595
+
596
+ Possible future controls include:
597
+
598
+ - registry and scenario signing
599
+ - trusted scenario packages
600
+ - binding allowlists
601
+ - executable/module restrictions
602
+ - network destination restrictions
603
+ - capability identity
604
+ - capability integrity verification
605
+ - credential isolation
606
+ - process sandboxing
607
+ - execution quotas and timeouts
608
+ - observation redaction
609
+ - observation retention policies
610
+ - provenance metadata
611
+ - policy-controlled runtime environments
612
+
613
+ These mechanisms can strengthen the trusted-world boundary while preserving domain opacity in the GRAIL runtime.
614
+
615
+ They should be introduced in response to concrete deployment requirements rather than embedded prematurely into the core execution model.
616
+
617
+ ---
618
+
619
+ ## 20. Core principles
620
+
621
+ The GRAIL trust model can be summarized by several principles.
622
+
623
+ **Autonomy operates inside a trusted world.**
624
+
625
+ The runtime assumes that the world definition accurately describes the possibilities available to it.
626
+
627
+ **The application domain remains opaque to GRAIL.**
628
+
629
+ Domain policy and domain security belong with the capabilities that understand them.
630
+
631
+ **Preconditions are orchestration constraints, not authorization controls.**
632
+
633
+ A capability must enforce the security requirements governing the operation it performs.
634
+
635
+ **SUCCESS is a contract.**
636
+
637
+ When a capability reports success, GRAIL trusts that the effects declared for its affordance have been established.
638
+
639
+ **Bindings are execution boundaries.**
640
+
641
+ A registry containing bindings should be treated as executable configuration.
642
+
643
+ **World integrity matters.**
644
+
645
+ Changes to affordances, effects, bindings, or worldstate can change the behavior of the autonomous system.
646
+
647
+ **Design-time generation does not imply runtime trust.**
648
+
649
+ Human- or AI-generated worlds become trusted through validation, testing, review, and deployment controls appropriate to the environment.
650
+
651
+ ---
652
+
653
+ ## Conclusion
654
+
655
+ GRAIL deliberately places substantial knowledge in the environment rather than in the autonomous runtime.
656
+
657
+ That design makes the world definition a significant source of authority.
658
+
659
+ The runtime trusts the world to describe valid possibilities. It trusts capabilities to perform their declared operations and to enforce domain security. It trusts successful execution to establish declared effects. It protects the mechanics through which those declarations become runtime behavior.
660
+
661
+ These boundaries allow GRAIL to remain small and domain-independent while supporting autonomous execution across many application domains.
662
+
663
+ The resulting security model follows directly from the architecture:
664
+
665
+ > **Define a trusted world, constrain autonomy to that world, and require each capability to protect the actions it performs.**