` with the level below (e.g. `graduated` / `Graduated`).
- [](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity#graduated))
+## Graduated
- > \[!IMPORTANT\]
- > This software is **Graduated** and subject to ECMWF's guidelines on [Software Maturity](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity).
+[](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity#graduated)
+Graduated projects are ready for operations, and typically used by ECMWF and/or its Member and Co-operating States in operations. This does not mean ECMWF gives operational support to the software itself.
-# Incubating
+## Incubating
[](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity#incubating)
-Incubating projects are mostly feature-complete and the interface is mostly stable. If this software is to be used in operational systems you are **strongly advised to use a released tag in your system configuration**, and you should be willing to accept incoming changes and bug fixes that require adaptations on your part. ECMWF **may be using** this software in operations and abides by the same caveats.
-
- [](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity#incubating)
+Incubating projects are mostly feature-complete and the interface is mostly stable. If this software is to be used in operational systems you are **strongly advised to use a released tag in your system configuration**, and you should be willing to accept incoming changes and bug fixes that require adaptations on your part. ECMWF **may be using** this software in operations and abides by the same caveats.
-
- > \[!IMPORTANT\]
- > This software is **Incubating** and subject to ECMWF's guidelines on [Software Maturity](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity).
-
-# Emerging
+## Emerging
[](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity#emerging)
Emerging projects are in the early stages of development. There is a clear project goal, but they are not yet feature-complete and not stable.
- [](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity#emerging)
-
- > \[!IMPORTANT\]
- > This software is **Emerging** and subject to ECMWF's guidelines on [Software Maturity](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity).
-
-
-# Sandbox
+## Sandbox
[](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity#sandbox)
Sandbox projects are experimental, proof-of-concept. Expect frequent changes, incomplete features and instability.
- [](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity#sandbox)
-
- > \[!IMPORTANT\]
- > This software is **Sandbox** and subject to ECMWF's guidelines on [Software Maturity](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity).
-
-
-# Archived
+## Archived
[](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity#archived)
-Projects that have reached the end of their lifecycle.
-They are no longer actively maintained or developed.
-These projects may still be available for reference or historical purposes, but they should not be used for any active development or operational purposes.
-
- [](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity#archived)
-
- > \[!IMPORTANT\]
- > This software is **Archived** and subject to ECMWF's guidelines on [Software Maturity](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity).
-
+Projects that have reached the end of their lifecycle. They are no longer actively maintained or developed. These projects may still be available for reference or historical purposes, but they should not be used for any active development or operational purposes.
diff --git a/README.md b/README.md
index 3113246..3ade839 100644
--- a/README.md
+++ b/README.md
@@ -10,21 +10,16 @@ The Codex is a set of principles and guidelines for development of software and
# Contents
-- [Code of Conduct](./Principles/Code-Of-Conduct.md)
-- [Principles](./Principles)
-- [Architectural Decision Records](./ADR)
+- [Principles](./Principles) — including the [Code of Conduct](./Principles/Code-Of-Conduct.md) and the [Open Source Principles](./Principles/Open-Source-Principles.md)
+- [Architectural Decision Records (ADR)](./ADR)
+- [MARS Language Decision Records](./MARS%20language)
- [Repository Structure](./Repository%20Structure)
- [Project Maturity](./Project%20Maturity)
-- [Testing](./Guidelines/Testing.md)
-- [Containerisation](./Guidelines/Containerisation.md)
-- [Observability](./Guidelines/Observability.md)
- [ECMWF Software EnginE (ESEE)](./ESEE)
-- [External Contributions](./Guidelines/External-Contributions.md)
-- [Security Vulnerability Disclosure](./Guidelines/Security-Vulnerability-Disclosure.md)
-- [Documentation and Training](./Documentation%20and%20Training/)
-- [Contributing to External Projects](./Contributing%20Upstream/)
-- [Guidelines](./Guidelines/)
-- [Languages](./Languages/)
-- [Legal](./Legal/)
-- [Software Management Plan](./Software%20Management%20Plan/)
-- [Agent Skills](./Agent%20Skills/)
+- [Guidelines](./Guidelines) — branching, pull requests, testing, containerisation, observability, external contributions, AI contributions, and security vulnerability disclosure
+- [Languages](./Languages)
+- [Legal](./Legal)
+- [Documentation and Training](./Documentation%20and%20Training)
+- [Contributing to External Projects](./Contributing%20Upstream)
+- [Software Management Plan](./Software%20Management%20Plan)
+- [Agent Skills](./Agent%20Skills)
diff --git a/Repository Structure/Example.md b/Repository Structure/Example.md
index 16b06d0..d27a27d 100644
--- a/Repository Structure/Example.md
+++ b/Repository Structure/Example.md
@@ -3,7 +3,7 @@
-
+
@@ -36,6 +36,9 @@
# foo
+> [!IMPORTANT]
+> This software is **Sandbox** and subject to ECMWF's guidelines on [Software Maturity](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity).
+
> [!TIP]
> Write here the "mission statement" of the project.
> It should be a short paragraph that describes the purpose of the project (why have we built this?) and what it does. It should be written in a way that is easy to understand for someone who is not familiar with the project.
@@ -69,4 +72,4 @@ python -m pip install foo
## License
-© 2025 ECMWF. All rights reserved.
\ No newline at end of file
+[Apache License 2.0](LICENSE) In applying this licence, ECMWF does not waive the privileges and immunities granted to it by virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
\ No newline at end of file
diff --git a/Repository Structure/README.md b/Repository Structure/README.md
index 9b7af89..24b13d0 100644
--- a/Repository Structure/README.md
+++ b/Repository Structure/README.md
@@ -34,7 +34,13 @@ my-repo/
├── bin/
├── docs/
├── examples/ # optional
-├── LICENSE
+├── LICENSE # Apache 2.0 + ECMWF intergovernmental notice
+├── LICENSES/ # REUSE: unmodified licence texts (Apache-2.0.txt)
+├── NOTICE # ECMWF copyright + intergovernmental notice
+├── REUSE.toml # REUSE annotations for non-commentable files
+├── SECURITY.md # recommended: vulnerability-disclosure policy
+├── CITATION.cff # recommended: citation metadata
+├── CONTRIBUTORS # list of contributors
├── pyproject.toml
├── README.md # deviation from the guide
├── setup.py # VERY shallow, just calls setup() or something
@@ -47,14 +53,25 @@ my-repo/
└── tox.ini
```
-Note the extra src directory. This prevents setuptool's find_package from adding unwanted code to the installation, without having to add exceptions for tests, examples, etc. It also forces the package to be pip install'ed before running the tests, which helps checking that the package will work as intended once installed. Simple use case: it won't import the local package if you run pytest in the folder.
+The licensing artefacts (`LICENSE`, `LICENSES/`, `NOTICE`, `REUSE.toml`, per-file
+SPDX headers) follow [Copyright and Licensing](../Legal/Copyright-And-Licensing.md)
+and [SPDX and REUSE](../Legal/SPDX-and-REUSE.md); `SECURITY.md` and `CITATION.cff`
+are described below.
+
+Note the extra src directory. This prevents setuptools' find_packages from adding unwanted code to the installation, without having to add exceptions for tests, examples, etc. It also forces the package to be installed with `pip` before running the tests, which helps check that the package will work as intended once installed. Simple use case: it won't import the local package if you run pytest in the folder.
### C/C++
```
├── CMakeLists.txt
-├── LICENSE
+├── LICENSE # Apache 2.0 + ECMWF intergovernmental notice
+├── LICENSES/ # REUSE: unmodified licence texts
+├── NOTICE # ECMWF copyright + intergovernmental notice
+├── REUSE.toml # REUSE annotations for non-commentable files
+├── SECURITY.md # recommended
+├── CITATION.cff # recommended
+├── CONTRIBUTORS
├── README.md
├── VERSION
├── cmake
diff --git a/Software Management Plan/README.md b/Software Management Plan/README.md
index b865e95..13845d3 100644
--- a/Software Management Plan/README.md
+++ b/Software Management Plan/README.md
@@ -4,13 +4,13 @@ A software management plan (SMP) should be provided for all projects which contr
This is to ensure that contributions are appropriate, visible, follow guidelines and there is a clear roadmap
for development and ownership.
-A SMP is required for all projects where the lead developers are external contributors
+An SMP is required for all projects where the lead developers are external contributors
and should be provided in the planning stages of the project.
-For internal contributors, a SMP is required to progress a project from the *Sandbox*
+For internal contributors, an SMP is required to progress a project from the *Sandbox*
to the *Emerging* [Project Maturity](../Project%20Maturity/) level.
-Please use the [template SMP](./SMP-template.docx) to create your SMP, it contains much of the description
-provide below.
+Please use the [template SMP](./SMP-template.docx) to create your SMP; it contains much of the description
+provided below.
## 1. Project Overview
@@ -26,7 +26,7 @@ Provide a concise overview to allow others to understand the project and its pur
## 2. Alignment With ECMWF Strategy and Architecture
-How do the proposed software developments fit into ECMWF’s broader organizational goals?
+How do the proposed software developments fit into ECMWF’s broader organisational goals?
- **Alignment with the ECMWF software stack**
- New components
@@ -140,7 +140,7 @@ Include:
- **Developer documentation**
- What will it cover, e.g. API, architecture, contribution guidelines.
- **Documentation location**
- - read-the-docs/github-pages/confluence?
+ - Read the Docs, GitHub Pages, or `sites.ecmwf.int` (see [Documentation and Training](../Documentation%20and%20Training/README.md))
- **Support model**
- Who is the point of contact for support
- Where and how is support provided, e.g. github issues and/or jira tickets.
diff --git a/TODO.md b/TODO.md
index f67351f..898856f 100644
--- a/TODO.md
+++ b/TODO.md
@@ -3,26 +3,36 @@
This document captures known gaps, incomplete sections, and issues identified across the Codex repository.
Contributions addressing any of these items are welcome via pull request.
+A consistency pass has fixed the cross-document inconsistencies, broken links,
+licensing contradictions, ADR status/formatting drift, and spelling/house-style
+issues. The items below are the remaining **content gaps** — sections that are
+advertised but not yet written. Their index entries now flag them as
+work-in-progress.
+
---
## High Priority
-- [ ] **Guidelines/Testing.md** — File opens with an explicit `TODO`. No actual testing guidelines exist beyond test data hosting via `sites.ecmwf.int`. Needs unit, integration, and regression testing standards.
-- [ ] **Languages/Versioning.md** — Entire file is a single-line placeholder: *"How do we manage multi-language repositories with a single version number?"*. Needs a versioning policy.
-- [ ] **LICENSE** (root) — File is empty. The licence text exists in `Legal/Apache-Licence` but the root `LICENSE` file that GitHub uses for badge detection and display contains no content.
+- [ ] **Guidelines/Testing.md** — Still only covers test-data hosting. Needs unit, integration, and regression testing standards (the README now marks it as draft; other docs' "tests are mandatory" wording depends on this being written).
+- [ ] **Languages/Versioning.md** — Still a single-line placeholder. Needs a versioning policy for multi-language repositories.
## Medium Priority
-- [ ] **Languages/C++/** — Only covers `.git-blame-ignore-revs` configuration. The Languages README promises coding standards, clang-format, and clang-tidy configuration, but none of these are present.
-- [ ] **Documentation and Training/README.md** — Skeletal (16 lines). No documentation standards, templates, API documentation requirements, or style guides. The Software Management Plan section contains more documentation guidance than this dedicated section.
-- [ ] **ESEE/README.md** — Conceptual category descriptions only. Missing component listings, architecture details, and diagrams showing which software packages belong to which ESEE category.
-- [ ] **Guidelines/Observability.md** — Explicitly defers several areas to future revisions: full tracing specification, environment-specific collection pipelines, and an alerting section (referenced but not included).
+- [ ] **Languages/C++/** — Only the `.git-blame-ignore-revs` convention exists. Needs the promised C++ coding standards and clang-format / clang-tidy configuration.
+- [ ] **Documentation and Training/README.md** — Skeletal. Needs documentation standards, templates, API-documentation requirements, and style guides (the SMP §7 documentation guidance should eventually be consolidated here).
+- [ ] **ESEE/README.md** — Conceptual category descriptions only. Missing component listings, architecture details, and diagrams showing which packages belong to which ESEE category.
+- [ ] **Guidelines/Observability.md** — Defers the full tracing specification, environment-specific collection pipelines, and a dedicated alerting specification to future revisions.
## Low Priority
-- [ ] **ADR/ADR-005-Storing-Of-ICON-Grid-Files.md** — Title inside the document reads "ADR 004" but the filename is `ADR-005`. Numbering mismatch needs correcting.
-- [ ] **MARS language/MARS-Template.md** — Typo in title: "Languge" should be "Language".
-- [ ] **MARS language/MARS-007-Timespan-Absence.md** — Same "Languge" typo in title. Also contains an empty bullet point (`* `) around line 200.
-- [ ] **Contributing Upstream/README.md** — Single-line index file. Could benefit from a brief introductory paragraph explaining the purpose of the section.
-- [ ] **Repository Structure/Example.md** — Only provides a Python project README template. No equivalent example for a C++ project.
-- [ ] **Languages/Python-Wheels.md** — Notes that automated release triggering is pending and pin derivation for Python interface wheels has a known deficiency.
+- [ ] **Repository Structure/Example.md** — Provides a Python project README template only. No equivalent example for a C++ project.
+- [ ] **Languages/Python-Wheels.md** — Automated release triggering is pending, and pin derivation for Python interface wheels has a known deficiency.
+
+## Resolved by the consistency pass
+
+- Root `LICENSE` populated (Apache 2.0 + ECMWF intergovernmental notice).
+- Broken links fixed (Principles → External Contributions; ADR-Guidelines → ADR index; Example.md maturity badge).
+- Licensing contradictions reconciled (NOTICE "never empty", canonical LICENSE composition, EU/partner copyright holder, "line 178" removed, `Example.md` "All rights reserved" replaced).
+- ADR statuses/formatting normalised (ADR-005 title number, ADR-007 status, ADR-002/006 headings, template brackets); ADR-006 reduced to a stub linking MARS-001.
+- MARS typos ("Languge"), empty bullet, strikethrough/date-format drift fixed.
+- British house style applied (Containerisation, Observability, SMP, ADR-004, ESEE); "Co-operating States" standardised.