Skip to content

Commit aa4c950

Browse files
committed
fix(psp-1): clarify CPL/0 naming, camelCase note, and operator ID handling
1 parent e59e6cf commit aa4c950

File tree

1 file changed

+25
-18
lines changed

1 file changed

+25
-18
lines changed

docs/reference/specifications/psp-1.mdx

Lines changed: 25 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,11 @@ and only when, they appear in all capitals, as shown here.
7575
- **CPL**: Capability Programming Language.
7676
- **Program (CPL/0):** A monotone policy evaluated by CEPs, composed of Checks
7777
(OR of Queries), Queries (AND of Literals), and Literals that are pure,
78-
bounded Builtins over ground Terms (Str/Int/Bytes/Bool). CPL/0 has no
79-
user-defined atoms, symbols, or variables.
78+
bounded Builtins over ground Terms (`Str`/`Int`/`Bytes`/`Bool`). CPL/0 has no
79+
user-defined atoms, symbols, or variables. The "/0" suffix denotes that this
80+
is the first, deterministic core of the Capability Programming Language
81+
family; later editions (e.g., CPL/1) may extend the language while preserving
82+
existing semantics.
8083
- **Declarations:** Finite sets/relations used by programs: PairSet of (action,
8184
resource), ActionSet, and ResourceSet.
8285
- **Program Canonical Form (PCF):** The normalized, deterministically encoded
@@ -213,7 +216,9 @@ Deterministic Evaluation and PSP-4).
213216
- A Check succeeds if and only if at least one of its Queries succeeds.
214217
- A Query succeeds if and only if all of its Literals succeed.
215218
- Literals and Terms
216-
- Uses builtin literals only: Builtin(op_id, [arg...]).
219+
- Uses builtin literals only: Builtin(`op`, [args…]). Here `op` is the textual
220+
identifier of the builtin operation (see Appendix B for the registry of
221+
builtins).
217222
- Terms are ground: Str | Int | Bool | Bytes. No variables. No user-defined
218223
atoms.
219224
- Int is arbitrary-precision integer. Floats are not permitted.
@@ -225,13 +230,13 @@ Deterministic Evaluation and PSP-4).
225230

226231
#### Builtins and registries
227232

228-
- Each builtin op_id, its type signature, and its tightening rule are defined in
229-
the Builtins registry (PSP-4). The exact set in use is pinned by `builtinsId`
230-
in the Grant.
231-
- Channel comparisons (e.g., `channel_geq`) consult the pinned
232-
`channelLatticeId`, which defines the set of recognized channel profile
233-
identifiers and their partial order. Unknown profiles or an unknown lattice
234-
MUST cause deny.
233+
- Each builtin operation is identified by a string `op`. Its semantics, type
234+
signature, and tightening rule are defined in the Builtins registry (PSP‑4).
235+
The exact set in use is pinned by `builtinsId` in the Grant.
236+
- Channel comparisons (e.g., `channel_geq`) consult the pinned
237+
`channelLatticeId`, which defines the set of recognized channel profile
238+
identifiers and their partial order. Unknown profiles or an unknown lattice
239+
MUST cause deny.
235240
- Resource subset checks in declaration-aware builtins (e.g., in_pairset)
236241
consult the scheme comparator selected by the resource's scheme name.
237242
- If a builtin, lattice, or comparator required by the Program is unknown or
@@ -274,9 +279,9 @@ Deterministic Evaluation and PSP-4).
274279
considered. Any presence of rules, variables, non-ground terms, or
275280
unsupported predicates MUST cause conversion to fail (out of scope for
276281
CPL/0 interop).
277-
2. All predicate identifiers MUST be recognized builtin op_ids in the pinned
278-
`builtinsId`; argument arity/types MUST match; strings are NFC; Bytes are
279-
exact octets.
282+
2. All predicate identifiers MUST correspond to recognized builtin operations
283+
(`op` strings) in the pinned `builtinsId`; argument arity and types MUST
284+
match; strings are NFC; Bytes are exact octets.
280285
3. The resulting CPL/0 Program is constructed as `all(check_i)`; each Biscuit
281286
check yields one CPL/0 Check; each Biscuit query yields one CPL/0 Query;
282287
each recognized predicate yields one CPL/0 Literal.
@@ -849,7 +854,10 @@ verification.
849854

850855
The following illustrates only the Grant payload structure relevant to PSP-1.
851856
Envelope fields, signatures, canonical claim bytes, and multihash details are
852-
defined in PSP-3.
857+
defined in PSP-3. Field names in the JSON projection use camelCase for
858+
readability. These labels are illustrative only; the normative field names and
859+
encodings are defined in PSP-3. Implementers MUST NOT rely on these example
860+
names.
853861

854862
```json
855863
{
@@ -1922,7 +1930,7 @@ Query = {
19221930
literals: [1* Literal]
19231931
}
19241932
1925-
; Literal = Builtin(op_id, args...)
1933+
; Literal = Builtin(op, args...)
19261934
Literal = {
19271935
op: tstr, ; operator id (e.g., "within_time", "in_pairset")
19281936
args: [* Term]
@@ -2041,9 +2049,8 @@ definitions.
20412049

20422050
General rules:
20432051

2044-
-- Unknown builtin op_id referenced by a Program under the pinned `builtinsId`
2045-
MUST cause deny.
2046-
2052+
- Unknown builtin operation (`op`) referenced by a Program under the pinned
2053+
`builtinsId` MUST cause deny.
20472054
- Types are enforced at evaluation; ill-typed invocations MUST cause deny.
20482055
- Equality of strings uses NFC; comparator logic never performs network I/O.
20492056

0 commit comments

Comments
 (0)