1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
// Copyright (c) 2026 2youg1 and the sprawling contributors
//! The doors. This module is the library-wide sole producer of gate
//! refusal codes: every Deny goes through `AxError::refusal` with the
//! three mandatory parts. Boundary feedback beats opening sermons — the
//! refusal is the teaching.
//! The part `crates/kernel/spec/Gate.lean` specifies this module.
//!
//! **A door answers Allow or Deny, and never asks a person** — with one
//! named exception. An action a person would have to approve is either
//! one the rules already allow or one they already refuse, and both
//! answers are written down where a person can change them: `CONFIG.toml`
//! for budgets and trusted connectors, the building's `RULES.toml` for
//! write domains and egress. A door that escalated would be a door whose
//! default answer gets clicked through, which is the same as no door.
//!
//! [`attach`] is the exception, and it is the only one: what it would
//! grant is the reading right over every login a person's own browser
//! holds, so no rule of the city's can answer it. The person's action is
//! the answer, and the recovery sentence is the question. Whether a door
//! asks is a property of the door rather than a switch: the roster test
//! asserts that exactly one door returns [`GateOutcome::Ask`].
//!
//! Separate functions, not one fat envelope: each door reads its own
//! inputs, the effect layer routes by the `Effect` field (5.2), and
//! kani can walk each door's space without multiplying the others'.
use crateAxError;
pub use attach;
pub use command;
pub use discard;
pub use ;
pub use ;
pub use spawn;
pub use ;
/// Deliberately exhaustive, and the third arm is deliberately rare.
///
/// Every caller decides all three ways, so a door that starts asking a
/// person is a compile error at every caller rather than a behaviour
/// that changes underneath them. Exactly one door answers `Ask`
/// ([`attach`]); the refusal matrix asserts that count.
/// The roster of doors, as data.
///
/// The refusal conformance matrix walks [`DOORS`] rather than naming
/// doors one by one, so a door added to this enum is a door the matrix
/// judges: [`conformance::sample`] matches exhaustively, and a new
/// arm without a sample does not compile.
/// Every door, in the order this module declares them.
pub const DOORS: = ;