Skip to content

Commit 3fd41a6

Browse files
Release v1.3
# Added - **SpecEngine dependency content fingerprint** (`docs/specs/SpecEngine/c5fingerprint.py`): new SpecEngine module that computes per-file SHA-256 hashes over the contents of every file listed in a Doorstop item's `references:` field and stores a `references_content_fingerprint` block (combined hash + per-file breakdown) in each item's YAML frontmatter, enabling dependency-aware impact analysis across all Doorstop documents (MRS, SRS, ARC, SWD, TCS, TRP); items whose referenced files have changed since the last run are flagged as `[STALE]` and have their stored fingerprint updated in-place; supports `--dry-run` (compute only, no writes), `--check` (exit code 1 on stale, for use as a CI gate), and `--verbose` (per-file hash detail) flags; automatically registers the `references_content_fingerprint: {}` attribute default in the `.doorstop.yml` of every document that contains references-bearing items; integrated into `publish.sh` as the final step (after all undo/restore steps) - **DocEngine standalone mode** (`c5dec docengine <type> -n <name> --standalone`): `create_docengine_template()` accepts a new `standalone` boolean argument; when set, the command additionally copies the `.devcontainer` folder, `docEngine.Dockerfile`, `poetry.lock`, and `pyproject.toml` from the repository root into the generated template destination, enabling users to open and use DocEngine directly in VS Code without the rest of the C5-DEC environment; `--standalone` flag added to the `docengine` CLI argument parser - **End-user DocEngine manual package** (`docs/manual/docengine-manual/`): added a user-oriented manual authored as a DocEngine report template, including chapters, figures, Quarto configuration, and helper scripts, together with a compiled PDF output artifact for immediate consumption by end users ## Modified - Migrated the DocEngine user manual from the SSDLC page to a dedicated and more detailed `docengine.md` page under `docs/manual` - Updated manual entry README and other relevant docs to reflect the DocEngine documentation update ## Fixed - Bug preventing the Ubuntu font from being used by DocEngine
1 parent 40cc05c commit 3fd41a6

File tree

184 files changed

+5189
-182
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

184 files changed

+5189
-182
lines changed

CHANGELOG.md

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,28 @@
1+
# 1.3 (2026-03-23)
2+
3+
## Added
4+
5+
- **SpecEngine dependency content fingerprint** (`docs/specs/SpecEngine/c5fingerprint.py`): new SpecEngine module that computes per-file SHA-256 hashes over the contents of every file listed in a Doorstop item's `references:` field and stores a `references_content_fingerprint` block (combined hash + per-file breakdown) in each item's YAML frontmatter, enabling dependency-aware impact analysis across all Doorstop documents (MRS, SRS, ARC, SWD, TCS, TRP); items whose referenced files have changed since the last run are flagged as `[STALE]` and have their stored fingerprint updated in-place; supports `--dry-run` (compute only, no writes), `--check` (exit code 1 on stale, for use as a CI gate), and `--verbose` (per-file hash detail) flags; automatically registers the `references_content_fingerprint: {}` attribute default in the `.doorstop.yml` of every document that contains references-bearing items; integrated into `publish.sh` as the final step (after all undo/restore steps)
6+
7+
- **DocEngine standalone mode** (`c5dec docengine <type> -n <name> --standalone`): `create_docengine_template()` accepts a new `standalone` boolean argument; when set, the command additionally copies the `.devcontainer` folder, `docEngine.Dockerfile`, `poetry.lock`, and `pyproject.toml` from the repository root into the generated template destination, enabling users to open and use DocEngine directly in VS Code without the rest of the C5-DEC environment; `--standalone` flag added to the `docengine` CLI argument parser
8+
9+
- **End-user DocEngine manual package** (`docs/manual/docengine-manual/`): added a user-oriented manual authored as a DocEngine report template, including chapters, figures, Quarto configuration, and helper scripts, together with a compiled PDF output artifact for immediate consumption by end users
10+
11+
## Modified
12+
13+
- Migrated the DocEngine user manual from the SSDLC page to a dedicated and more detailed `docengine.md` page under `docs/manual`
14+
- Updated manual entry README and other relevant docs to reflect the DocEngine documentation update
15+
16+
## Fixed
17+
18+
- Bug preventing the Ubuntu font from being used by DocEngine
19+
20+
# 1.2.4 (2026-03-11)
21+
22+
## Fixed
23+
24+
- Image path bug in product webpage
25+
126
# 1.2.3 (2026-03-11)
227

328
## Added

README.md

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ C5-DEC, short for "Common Criteria for Cybersecurity, Cryptography, Clouds – D
44

55
<img src="./docs/manual/_figures/CyFORT-C5CEC-logo.png" alt="cyfort_logo" width="500"/>
66

7-
[![Version](https://img.shields.io/badge/version-1.2-blue)](CHANGELOG.md) [![License: AGPL v3](https://img.shields.io/badge/license-AGPL--v3-brightgreen)](LICENSE) [![Python](https://img.shields.io/badge/python-3.8--3.11-blue)](pyproject.toml)
7+
[![Version](https://img.shields.io/badge/version-1.3-blue)](CHANGELOG.md) [![License: AGPL v3](https://img.shields.io/badge/license-AGPL--v3-brightgreen)](LICENSE) [![Python](https://img.shields.io/badge/python-3.8--3.11-blue)](pyproject.toml)
88

9-
C5-DEC CAD is the software component of C5-DEC: an [AI-enabled](./docs/manual/ssdlc.md#ai-enabled-design-specification-development-and-testing) toolkit for secure system design, development, and evaluation across [CLI/TUI/GUI and VS Code](#usage). It combines [CCT](./docs/manual/cct.md), [SSDLC](./docs/manual/ssdlc.md) with [SpecEngine](./docs/specs/SpecEngine/README.md) and [DocEngine](./docs/manual/ssdlc.md#c5-dec-docengine-for-report-generation), [CRA](./docs/manual/cra.md), [SBOM](./docs/manual/sbom.md), [CPSSA](./docs/manual/cpssa.md), [cryptography](./docs/manual/cryptography.md), and [project management](./docs/manual/pm.md) in one traceable, open-format (Markdown/YAML) workflow.
9+
C5-DEC CAD is the software component of C5-DEC: an [AI-enabled](./docs/manual/ssdlc.md#ai-enabled-design-specification-development-and-testing) toolkit for secure system design, development, and evaluation across [CLI/TUI/GUI and VS Code](#usage). It combines [CCT](./docs/manual/cct.md), [SSDLC](./docs/manual/ssdlc.md) with [SpecEngine](./docs/specs/SpecEngine/README.md), [DocEngine](./docs/manual/docengine.md), [CRA](./docs/manual/cra.md), [SBOM](./docs/manual/sbom.md), [CPSSA](./docs/manual/cpssa.md), [cryptography](./docs/manual/cryptography.md), and [project management](./docs/manual/pm.md) in one traceable, open-format (Markdown/YAML) workflow.
1010

1111
This repository contains the C5-DEC CAD source code plus full documentation, including requirements, design artifacts, the [user manual](./docs/manual/README.md), and test specifications/reports; live traceability is published on the [technical specification web site](https://abstractionslab.github.io/c5dec/traceability/index.html).
1212

@@ -30,7 +30,7 @@ For a visual stakeholder-oriented tour of C5-DEC CAD, visit the **[product prese
3030

3131
## Overview
3232

33-
C5-DEC CAD assists system/software designers, developers, testers and security analysts with building and evaluating secure software systems. It integrates SSDLC, SVV, and CPSSA within the Common Criteria framework, providing full artifact traceability across the entire development life cycle, along with cryptographic checks, threat modelling, quantitative risk analysis, Cyber Resilience Act (CRA) compliance support, and SBOM lifecycle management. Its DocEngine, built on Quarto with custom LaTeX enhancements and pre/post-render scripting, enables smart document authoring, scientific and technical publishing across report, presentation, and CRA technical documentation templates.
33+
C5-DEC CAD assists system/software designers, developers, testers and security analysts with building and evaluating secure software systems. It integrates SSDLC, SVV, and CPSSA within the Common Criteria framework, providing full artifact traceability across the entire development life cycle, along with cryptographic checks, threat modelling, quantitative risk analysis, Cyber Resilience Act (CRA) compliance support, and SBOM lifecycle management. Its [DocEngine](./docs/manual/docengine.md), built on Quarto with custom LaTeX enhancements and pre/post-render scripting, enables smart document authoring and scientific and technical publishing across report, presentation, and CRA technical documentation templates.
3434

3535
### Knowledge base
3636

@@ -53,9 +53,8 @@ C5-DEC ships two complementary knowledge bases:
5353
### Secure software development life cycle (SSDLC)
5454

5555
- [New C5-DEC project scaffolding](./docs/manual/ssdlc.md#c5-dec-project-creation) (`c5dec new`): containerized repository with dependencies, templates, DocEngine, SpecEngine, and Doorstop-based traceability, with an [AI-enabled](./docs/manual/ssdlc.md#ai-enabled-design-and-specification) approach for generating requirements, test cases, and technical reports;
56-
- [DocEngine](./docs/manual/ssdlc.md#c5-dec-docengine-for-report-generation) (`c5dec docengine`): Quarto-based publishing pipeline with LaTeX customizations and pre/post-render scripts; scaffolds three template types — `report`, `presentation` (Reveal.js and PowerPoint with ALab branding), and `cra-tech-doc` (CRA Annex VII technical documentation);
56+
- [SpecEngine](./docs/specs/SpecEngine/) toolkit for specification management following the [C5-DEC method](./docs/specs/README.md): `c5graph.py` (interactive Cytoscape.js traceability graph with dagre layout, expand/collapse, color-coded coverage), `c5mermaid.py` (Mermaid-to-SVG/PNG pre-processor with undo and dry-run, integrated into `publish.sh`), `c5browser.py` (standalone Bootstrap + DataTables HTML browser for Doorstop items with sortable/filterable per-document-type tables), `c5traceability.py` (configurable traceability matrix statistics with console and HTML report output, auto-discovery of document trees from `.doorstop.yml` files), `c5fingerprint.py` (dependency content fingerprinting — computes per-file SHA-256 hashes for files referenced in item `references:` lists and stores a combined digest in each item's YAML frontmatter; flags stale items when source files change, enabling dependency-aware impact analysis across the full specification tree; supports `--dry-run`, `--check` CI gate, and `--verbose` modes), `prune_bad_links.py` (Doorstop link pruning), and `doorstop_yml_to_md.py` (YAML-to-Markdown item migration);
5757
- [Transformer](./docs/manual/ssdlc.md#transformer): document transformation and format conversion using [Doorstop](https://github.com/doorstop-dev/doorstop), [Quarto](https://github.com/quarto-dev/quarto), [pandoc](https://pandoc.org/), and [organize](https://github.com/tfeldmann/organize);
58-
- [SpecEngine](./docs/specs/SpecEngine/) toolkit for specification management following the [C5-DEC method](./docs/specs/README.md): `c5graph.py` (interactive Cytoscape.js traceability graph with dagre layout, expand/collapse, color-coded coverage), `c5mermaid.py` (Mermaid-to-SVG/PNG pre-processor with undo and dry-run, integrated into `publish.sh`), `c5browser.py` (standalone Bootstrap + DataTables HTML browser for Doorstop items with sortable/filterable per-document-type tables), `c5traceability.py` (configurable traceability matrix statistics with console and HTML report output, auto-discovery of document trees from `.doorstop.yml` files), `prune_bad_links.py` (Doorstop link pruning), and `doorstop_yml_to_md.py` (YAML-to-Markdown item migration);
5958
- A [KB element](#knowledge-base) dedicated to software verification and validation (SVV).
6059

6160
A view of the C5-DEC CAD specification browser:
@@ -70,6 +69,24 @@ A view of the C5-DEC CAD traceability statistics:
7069

7170
![C5-DEC CAD - traceability statistics](./docs/manual/_figures/c5dec-cad-traceability-stats.png)
7271

72+
### DocEngine
73+
74+
A Quarto-based document publishing engine ([full reference](./docs/manual/docengine.md)) for generating professional technical documents from Markdown source files:
75+
76+
- Three ready-to-use template types scaffolded by `c5dec docengine <type> -n <name>`:
77+
- `report` — full technical report with LaTeX cover page, chapter structure, custom headers/footers, bibliography, and DOCX reference template;
78+
- `presentation` — Reveal.js (HTML) and PowerPoint slide deck with ALab branding;
79+
- `cra-tech-doc` — CRA Annex VII seven-chapter compliance technical documentation, also available via `c5dec cra tech-doc`;
80+
- Supports PDF, HTML, and DOCX outputs from the same Markdown source;
81+
- Two configuration formats: `c5dec_config.yml` (v1, plain strings) and `c5dec_config_v2.yml` (v2, structured changelog entries, automatic LaTeX escaping);
82+
- Python pre/post-render scripts for cover page metadata injection, Doorstop-based table generation, and LaTeX file lifecycle management;
83+
- `--standalone` flag produces a self-contained template with its own devcontainer, enabling DocEngine use outside the main C5-DEC repository;
84+
- Integrated with the [CCT ETR generation pipeline](./docs/manual/cct.md#c5-dec-docengine-for-etr-generation) and the [CRA technical documentation workflow](./docs/manual/cra.md#2-cra-technical-documentation-generator).
85+
86+
A view of a compiled DocEngine report:
87+
88+
![C5-DEC CAD - DocEngine compiled report](./docs/manual/_figures/c5dec-cad-DocEngine-compiled-report.png)
89+
7390
### Common Criteria
7491

7592
A comprehensive [Common Criteria Toolbox (CCT)](./docs/manual/cct.md) covering:

c5dec/assets/report/_quarto.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ format:
4949
fig-pos: 'H'
5050
# geometry: "left=2.54cm,right=2.54cm,top=2.54cm,bottom=2.54cm"
5151
geometry: "left=2cm,right=2cm,top=2cm,bottom=2cm"
52-
# mainfont: "Ubuntu"
52+
mainfont: "Ubuntu"
5353
# mainfont: "Gill Sans"
5454
# sansfont: "Futura"
5555
# monofont: "Courier New"

c5dec/assets/report/tex/before-body-source.tex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@
7777
\vspace{1ex}
7878

7979
\rowcolors{1}{white}{white} % override global table customization specified in tables.tex
80-
\begin{tabular}{ | p{0.08\textwidth}| p{0.12\textwidth}| p{0.2\textwidth}| p{0.48\textwidth}| } % Table start
80+
\begin{tabular}{ | p{0.12\textwidth}| p{0.12\textwidth}| p{0.2\textwidth}| p{0.44\textwidth}| } % Table start
8181
\hline
8282
\rowcolor{AlabTableColLightBlue}
8383
\textbf{Version} & \textbf{Date} & \textbf{Author} & \textbf{Modifications} \\

c5dec/assets/report/tex/before-body.tex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@
7777
\vspace{1ex}
7878

7979
\rowcolors{1}{white}{white} % override global table customization specified in tables.tex
80-
\begin{tabular}{ | p{0.08\textwidth}| p{0.12\textwidth}| p{0.2\textwidth}| p{0.48\textwidth}| } % Table start
80+
\begin{tabular}{ | p{0.12\textwidth}| p{0.12\textwidth}| p{0.2\textwidth}| p{0.44\textwidth}| } % Table start
8181
\hline
8282
\rowcolor{AlabTableColLightBlue}
8383
\textbf{Version} & \textbf{Date} & \textbf{Author} & \textbf{Modifications} \\

c5dec/assets/templates/project/docEngine.Dockerfile

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,12 +118,16 @@ RUN ARCH=$(dpkg --print-architecture) && \
118118
ENV PATH="/usr/local/texlive/active-bin:$PATH"
119119

120120
# Install the required fonts for Quarto and TeX Live
121+
# fc-cache updates the system font cache; luaotfload-tool rebuilds LuaTeX's own
122+
# font DB so that fontspec/luaotfload can resolve "Ubuntu" at render time.
121123
RUN cd /tmp && \
122124
wget https://assets.ubuntu.com/v1/0cef8205-ubuntu-font-family-0.83.zip && \
123125
unzip 0cef8205-ubuntu-font-family-0.83.zip -d ubuntu-fonts && \
124126
mkdir -p /usr/local/share/fonts/ubuntu && \
125127
cp ./ubuntu-fonts/ubuntu-font-family-0.83/*.ttf /usr/local/share/fonts/ubuntu/ && \
128+
chmod 644 /usr/local/share/fonts/ubuntu/*.ttf && \
126129
fc-cache -fv && \
130+
luaotfload-tool --update --force && \
127131
rm -rf /tmp/ubuntu-fonts /tmp/0cef8205-ubuntu-font-family-0.83.zip
128132

129133
# Install Doorstop

c5dec/core/ssdlc.py

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ def create_new_c5dec_project(project="myproject", user="user"):
147147
zip_path = os.path.abspath(os.path.join(os.getcwd(), '..', f'{project}.zip'))
148148
log.info(f"Created ZIP archive at {zip_path}")
149149

150-
def create_docengine_template(template_type, name, destination=None):
150+
def create_docengine_template(template_type, name, destination=None, standalone=False):
151151
"""
152152
Create a new DocEngine report or presentation from templates.
153153
@@ -157,11 +157,15 @@ def create_docengine_template(template_type, name, destination=None):
157157
3. Updates configuration files with the specified project name and current date.
158158
4. Generates a ZIP archive of the created template.
159159
5. Keeps both the working folder and ZIP archive.
160+
6. If standalone=True, also copies the .devcontainer folder, docEngine.Dockerfile,
161+
poetry.lock, and pyproject.toml so the template can be used independently in VS Code.
160162
161163
Args:
162164
template_type (str): Type of template to create ("report" or "presentation").
163165
name (str): The name of the new template instance.
164166
destination (str, optional): Override default destination path. Defaults to ./docengine/{name}/.
167+
standalone (bool): If True, copies DevContainer, Dockerfile, and Poetry artifacts
168+
to the destination so DocEngine can be used without the full C5-DEC environment.
165169
166170
Returns:
167171
None: The function logs the progress and creates both folder and ZIP archive.
@@ -253,6 +257,28 @@ def create_docengine_template(template_type, name, destination=None):
253257
else:
254258
log.warning(f"{filename} not found in {destination_path}")
255259

260+
# Copy standalone artifacts if requested
261+
if standalone:
262+
root_path = str(c5settings.PROJECT_ROOT_PATH)
263+
standalone_items = [
264+
(os.path.join(root_path, '.devcontainer'), os.path.join(destination_path, '.devcontainer')),
265+
(os.path.join(root_path, 'docEngine.Dockerfile'), os.path.join(destination_path, 'docEngine.Dockerfile')),
266+
(os.path.join(root_path, 'poetry.lock'), os.path.join(destination_path, 'poetry.lock')),
267+
(os.path.join(root_path, 'pyproject.toml'), os.path.join(destination_path, 'pyproject.toml')),
268+
]
269+
for src, dst in standalone_items:
270+
if os.path.exists(src):
271+
try:
272+
if os.path.isdir(src):
273+
shutil.copytree(src, dst)
274+
else:
275+
shutil.copy2(src, dst)
276+
log.info(f"Copied standalone artifact: {src} -> {dst}")
277+
except Exception as e:
278+
log.warning(f"Could not copy standalone artifact {src}: {e}")
279+
else:
280+
log.warning(f"Standalone artifact not found: {src}")
281+
256282
# Create ZIP archive (keep both folder and archive)
257283
zip_base_path = os.path.join(os.path.dirname(destination_path), name)
258284
try:

c5dec/frontend/cli/commands.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,8 @@ def run_docengine(args, cwd, _, catch=True):
9090
success = ssdlc.create_docengine_template(
9191
template_type=args.template_type,
9292
name=args.name,
93-
destination=args.destination
93+
destination=args.destination,
94+
standalone=getattr(args, 'standalone', False)
9495
)
9596
return success if success is not None else True
9697
except Exception as e:

c5dec/frontend/cli/main.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,8 @@ def _docengine(subs):
126126
help="Name of the template instance")
127127
sub.add_argument("-d", "--destination",
128128
help="Override default destination path (default: ./docengine/<name>/)")
129+
sub.add_argument("--standalone", action="store_true", default=False,
130+
help="Also copy .devcontainer, docEngine.Dockerfile, and Poetry artifacts (poetry.lock, pyproject.toml) for standalone VS Code usage")
129131

130132
@common.feature_flag("ON")
131133
def _timerep(subs):

docEngine.Dockerfile

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,12 +118,16 @@ RUN ARCH=$(dpkg --print-architecture) && \
118118
ENV PATH="/usr/local/texlive/active-bin:$PATH"
119119

120120
# Install the required fonts for Quarto and TeX Live
121+
# fc-cache updates the system font cache; luaotfload-tool rebuilds LuaTeX's own
122+
# font DB so that fontspec/luaotfload can resolve "Ubuntu" at render time.
121123
RUN cd /tmp && \
122124
wget https://assets.ubuntu.com/v1/0cef8205-ubuntu-font-family-0.83.zip && \
123125
unzip 0cef8205-ubuntu-font-family-0.83.zip -d ubuntu-fonts && \
124126
mkdir -p /usr/local/share/fonts/ubuntu && \
125127
cp ./ubuntu-fonts/ubuntu-font-family-0.83/*.ttf /usr/local/share/fonts/ubuntu/ && \
128+
chmod 644 /usr/local/share/fonts/ubuntu/*.ttf && \
126129
fc-cache -fv && \
130+
luaotfload-tool --update --force && \
127131
rm -rf /tmp/ubuntu-fonts /tmp/0cef8205-ubuntu-font-family-0.83.zip
128132

129133
# Install Doorstop

0 commit comments

Comments
 (0)