Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions 1-formats/deed/mappings/state-v1-decision.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,11 @@ re-appearing.
`(status … :maturity production)` — symbol, closed set as the comment
taxon says. This is the single v1-vocabulary extension this family asks
for, deliberately minimal and ruled-on-visible.
**Ruled 2026-10-02 (owner):** not the status field. Maturity is a clause
of its own, `(maturity :level … :since …)`, declared in
link:../vocabulary/maturity.adoc[vocabulary/maturity.adoc]. Option B's
translation therefore writes maturity there. Only this row is ruled; the
choice between A, B and C stays open.

== 4. What is executable NOW without a ruling

Expand Down
11 changes: 11 additions & 0 deletions 1-formats/deed/tools/fixtures/valid/maturity-clause_chora.deed
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
;; SPDX-License-Identifier: CC-BY-SA-4.0
; Exercises every term of the (maturity ...) vocabulary:
; 1-formats/deed/vocabulary/maturity.adoc
(repo-deed
:schema-version "1.0.0"
:canonical-name "maturity-clause"
(status
:phase incubating)
(maturity
:level experimental
:since "2026-10-02"))
66 changes: 66 additions & 0 deletions 1-formats/deed/vocabulary/maturity.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
// SPDX-License-Identifier: CC-BY-SA-4.0
// SPDX-FileCopyrightText: 2026 Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
= `(maturity …)` — repo-deed vocabulary for maturity
:toc:

Status:: vocabulary, v1 (2026-10-02). Grammar unchanged: this is a `clause`
under the normative link:../spec/abnf/deed.abnf[deed.abnf] v1.0.0.
Ruling:: owner decision 2026-10-02: maturity is a clause of its own, not a
`:maturity` field on the `status` clause. This settles the `maturity` row of
link:../mappings/state-v1-decision.adoc[state-v1-decision] §3; the rest of
that decision is still open.
Fixture:: link:../tools/fixtures/valid/maturity-clause_chora.deed[maturity-clause_chora.deed].

As with link:updates.adoc[`(updates …)`], no production `estate_chora.deed`
exists yet, so this page is the declaration. The terms below move into that
file's `(vocabulary …)` clause verbatim when it lands.

== Why a clause of its own

Phase and maturity answer different questions. Phase (the `status` clause's
`:phase`) says where a repo is in its lifecycle: incubating, active,
archived. Maturity says how far a consumer can rely on what it ships. A repo
can be active and experimental, or archived and production. Keeping them in
separate clauses means neither is read as a qualifier of the other.

== Where it appears

Only in a `repo-deed` (`<repo>_chora.deed`), at most once, as a direct child
of the form. **No clause means the maturity is unstated**, not
`experimental`: a reader must not invent a default.

== Terms

[cols="2,3,2,5",options="header"]
|===
| Term | Value | Required | Meaning

| `:level` | SYMBOL, one of `experimental` `alpha` `beta` `production` `lts` | yes | How far a consumer can rely on the repo's output. The set is the one the v1 `[position] maturity` comment already named.
| `:since` | STRING, `YYYY-MM-DD` | no | The date the repo reached this level.
|===

`experimental`:: Shape and behaviour may change without notice. Do not
depend on it.
`alpha`:: Usable for trials. Breaking changes are expected.
`beta`:: Feature-complete for its stated scope. Breaking changes are
announced.
`production`:: Relied on by consumers. Breaking changes follow the repo's
versioning policy.
`lts`:: Production, with a stated support window.

== Reader obligations

* An unknown field inside `(maturity …)` is an error.
* A `:level` outside the closed set is an error, never mapped to a nearby
value.
* A string `:level` (`"beta"`) is an error: the value is a symbol.
* A deed with two `(maturity …)` clauses is an error.

== Example

[source,lisp]
----
(maturity
:level experimental
:since "2026-10-02")
----
Loading