Skip to content
Open
Show file tree
Hide file tree
Changes from 45 commits
Commits
Show all changes
65 commits
Select commit Hold shift + click to select a range
00541a6
Update the LICENSE copyright holder to Markus Paulsen
Aug 7, 2026
74145fa
Add the project governance and editor configuration files
Aug 7, 2026
f5b616b
Scaffold the Docusaurus documentation site
Aug 7, 2026
e446ac9
Move the existing manuals into the Docusaurus documentation tree
Aug 7, 2026
99c50a2
Adapt the migrated manuals to Docusaurus
Aug 7, 2026
67025bd
Convert README.adoc into the user guide and shorten the README
Aug 7, 2026
cded0cf
Build and publish the documentation site from CI
Aug 7, 2026
d673240
Repoint the remaining references at the new documentation layout
Aug 7, 2026
7e666a3
Harden the PlantUML render check against silent failures
Aug 7, 2026
63b5a11
Compare PlantUML renders independently of line endings
Aug 7, 2026
f3a78ed
Restructure the documentation into Instructor and Maintainer guides
Aug 7, 2026
c1fe1b2
Activate pnpm through Corepack instead of a third-party action
Aug 7, 2026
2ec3280
Credit Ares 1 in the LICENCE and add a NOTICE
Aug 7, 2026
444b3aa
Rename the Maintainer guide to Contributor
Aug 7, 2026
0278dc2
Document every policy domain from its implementation
Aug 7, 2026
a4f4d96
Write the technology pages, with every citation verified
Aug 7, 2026
c6d50fa
Add ESLint, docs integration tests, ncu and two more structure tests
Aug 7, 2026
c5971ac
Apply every shared documentation rule to every page
Aug 7, 2026
782a565
Keep @{argLine} in the Maven Surefire snippet
Aug 7, 2026
f8ca352
Pin the documentation inventory by name instead of by count
Aug 8, 2026
2d628b6
Add the three missing contributor sections
Aug 8, 2026
7ddd406
Add the Policy Cookbook, Policy Reference and Troubleshooting sections
Aug 8, 2026
6b77bfe
Split protect-a-java-project by mode and build tool
Aug 8, 2026
08076be
Split the Ares 1 migration guide by mode and build tool
Aug 8, 2026
31ac9ba
Split the policy documentation by audience
Aug 8, 2026
0ff3843
Merge pull request #183 from ls1intum/docs/ia-scaffold-and-tests
MarkusPaulsen Aug 9, 2026
bf429a5
Merge pull request #184 from ls1intum/docs/protect-a-java-project-res…
MarkusPaulsen Aug 9, 2026
dfeff2d
Merge pull request #185 from ls1intum/docs/ares-1-migration-restructure
MarkusPaulsen Aug 9, 2026
3e376ec
Merge pull request #186 from ls1intum/docs/policy-audience-split
MarkusPaulsen Aug 9, 2026
8fd79c4
Make the documentation assertions check what they claim to check
Aug 9, 2026
47139f0
Require the ELI5 box to be closed, not only opened
Aug 9, 2026
e91cdad
Fix three ways the documentation tests could report a wrong verdict
Aug 9, 2026
5eabb91
Merge branch 'main' into docs/docusaurus-migration-and-repo-hygiene
Aug 11, 2026
25d573b
Make the documented policies ones Ares actually accepts
Aug 12, 2026
12b9a1c
Stop the reference promising a scan the policy path never does
Aug 12, 2026
4f5d77c
Point the documentation at the release that is out
Aug 12, 2026
9fe05b0
Run the documentation tests, and notice next time when a suite does not
Aug 12, 2026
bfdac57
Teach the guard the selections it was rejecting
Aug 12, 2026
21416b6
Make the paths into the documentation arrive again
Aug 12, 2026
949175d
Stop the overview tying Postcompile to one interception mechanism
Aug 13, 2026
3d02455
Anchor the reference scan, and repair a sentence that lost its verb
Aug 13, 2026
c6d2103
Say what actually puts a test under supervision
Aug 13, 2026
65083ff
Name the annotation that actually switches Ares on
Aug 14, 2026
150e027
Merge remote-tracking branch 'origin/main' into docs/docusaurus-migra…
Aug 14, 2026
745b48b
Read a path segment, and stop losing what the walk could not read
Aug 14, 2026
5ce3cee
Document the generator that exists, and let the comparison find its rows
Aug 14, 2026
47b6e95
Let a URL hide only itself, and settle what the negative control does
Aug 14, 2026
7911ae7
Read the writing rules off the Markdown tree, not off the lines
Aug 21, 2026
8b199b8
Write down the language rules and the decisions behind them
Aug 21, 2026
e8f15c1
Bring the documentation up to the rules a check can decide
Aug 21, 2026
feb47d6
Merge pull request #207 from ls1intum/docs/prose-writing-rules
MarkusPaulsen Aug 21, 2026
366f195
Rename ELI5 to Simple Story, and give all 96 boxes one story to tell
Aug 18, 2026
040101b
Say on the landing page what Ares 2 is for, and add the legal pages
Aug 18, 2026
f9f457e
Say which categories an instructor can open, and which are shut for good
Aug 19, 2026
89dffeb
Spell every abbreviation out, and empty the accepted list
Aug 21, 2026
ecd6811
Say what "also" was doing, or take it out
Aug 21, 2026
75a8612
Hold the whole standard, and let the count fall but not rise
Aug 21, 2026
ed1a444
Ask TypeScript what the source says, and let both ratchets bite
Aug 21, 2026
edde892
Read the strings a reader sees, and skip the ones a compiler sees
Aug 21, 2026
4c08f90
Spell it out where the reader first meets it
Aug 21, 2026
69bc705
Move every Ares coordinate to 2.1.3
Aug 21, 2026
40b5bd8
Merge origin/main into the documentation branch
Aug 21, 2026
b70d8ae
Put the words after the link, not inside it
Aug 22, 2026
ef676a2
Wrap the line Spotless wanted wrapped
Aug 22, 2026
6655da9
Merge origin/main into the documentation branch
Aug 22, 2026
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
4 changes: 2 additions & 2 deletions .coderabbit.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ reviews:
- ".whitesource"
- ".github/**"
- ".settings/**"
- "docs/**"
- "documentation/**"
- "src/**"
- "pom.xml"
- "README.md"
Expand Down Expand Up @@ -105,7 +105,7 @@ reviews:
Review GitHub Actions for least-privilege permissions, safe event choice,
pinned third-party actions, safe pull_request_target usage, no secret exposure
to untrusted code, and branch-protection compatibility.
- path: docs/**/*.md
- path: documentation/docs/**/*.md
instructions: >-
Use current British English. Check that security guarantees, known limitations,
and required external fixtures are explicit and do not overstate enforcement.
Expand Down
79 changes: 79 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
# EditorConfig helps developers define and maintain consistent
# coding styles between different editors and IDEs
# editorconfig.org
#
# The `end_of_line` values below deliberately mirror .gitattributes. Git normalises every
# text file to LF in the object database but checks most of them out as CRLF
# (`* text=auto eol=crlf`), with LF reserved for the files that break otherwise: shell
# scripts, YAML and pom.xml. An editor configured to write LF everywhere would fight that
# checkout policy and produce a renormalisation diff on every save, so keep the two files in
# step whenever either changes.

root = true

[*]
end_of_line = crlf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
indent_style = tab
indent_size = 4

# Markdown treats two trailing spaces as a hard line break, so they must survive.
[*.md]
trim_trailing_whitespace = false
indent_style = space
indent_size = 2

[*.mdx]
trim_trailing_whitespace = false
indent_style = space
indent_size = 2

# Ares formats Java with tabs; see the Spotless configuration in pom.xml.
[*.java]
indent_style = tab

[*.xml]
indent_style = tab

# .gitattributes pins pom.xml to LF.
[pom.xml]
end_of_line = lf
indent_style = tab

# .gitattributes pins YAML to LF.
[{*.yml,*.yaml}]
end_of_line = lf
indent_style = space
indent_size = 2

# .gitattributes pins shell scripts to LF; CRLF makes them fail with "bad interpreter".
[{*.sh,*.bash,*.fish,gradlew}]
end_of_line = lf
indent_style = space
indent_size = 2

# .gitattributes pins these to CRLF explicitly; they are Windows scripts.
[{*.bat,*.cmd,*.ps1}]
end_of_line = crlf

[{*.ats,*.cts,*.mts,*.ts,*.tsx}]
indent_style = space
indent_size = 4
ij_typescript_use_double_quotes = false
ij_typescript_spaces_within_imports = true

[{*.cjs,*.mjs,*.js,*.jsx}]
indent_style = space
indent_size = 4
ij_javascript_use_double_quotes = false
ij_javascript_spaces_within_imports = true

[*.json]
indent_style = space
indent_size = 2

[*.css]
indent_style = space
indent_size = 4
2 changes: 1 addition & 1 deletion .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
Expand Up @@ -307,7 +307,7 @@ No breaking changes or migration.
- [ ] I followed the [guidelines for inclusive, diversity-sensitive and appreciative language](https://docs.artemis.tum.de/developer/guidelines/language).
- [ ] I have self-reviewed the diff of this pull request.
- [ ] Tests were added or updated for the behaviour changed here.
- [ ] Documentation (`docs/`, `README.adoc`, Javadoc) was updated where the change is user-facing.
- [ ] Documentation (`documentation/`, `README.md`, Javadoc) was updated where the change is user-facing.
- [ ] CI is green, or every remaining failure is explained above.
- [ ] No secrets, tokens or absolute local paths are contained in the diff.

Expand Down
14 changes: 14 additions & 0 deletions .github/actionlint.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# Configuration for actionlint, run by .github/workflows/actionlint.yml.
# Reference: https://github.com/rhysd/actionlint/blob/main/docs/config.md
#
# Ares 2 runs entirely on GitHub-hosted runners, so no self-hosted labels are declared.
# Add a label here if a job ever moves to a self-hosted runner, otherwise actionlint will
# reject the unknown `runs-on` value.
self-hosted-runner:
labels: []

# Ares 2 uses no repository or organisation configuration variables in workflows yet.
# Declaring the list empty is what makes `actionlint` reject every `vars.` expression it finds.
# Omitting the key entirely would allow all of them, so the empty list is the strict setting and
# the one we want. Add the name here when a configuration variable is genuinely introduced.
config-variables: []
14 changes: 8 additions & 6 deletions .github/labeler.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,17 @@ aop:
- src/main/java/de/tum/cit/ase/ares/api/aop/**/*
- src/test/java/de/tum/cit/ase/ares/api/aop/**/*
- src/test/java/de/tum/cit/ase/ares/integration/aop/**/*
- docs/aop/**/*
- documentation/docs/contributor/subsystems/aop/**/*
- documentation/docs/contributor/technologies/aop-tests/**/*

architecture:
- changed-files:
- any-glob-to-any-file:
- src/main/java/de/tum/cit/ase/ares/api/architecture/**/*
- src/test/java/de/tum/cit/ase/ares/api/architecture/**/*
- src/test/java/de/tum/cit/ase/ares/integration/architecture/**/*
- docs/architecture/**/*
- documentation/docs/contributor/subsystems/architecture/**/*
- documentation/docs/contributor/technologies/architecture-tests/**/*

ast:
- changed-files:
Expand All @@ -27,14 +29,14 @@ policy:
- src/main/java/de/tum/cit/ase/ares/api/policy/**/*
- src/test/java/de/tum/cit/ase/ares/api/policy/**/*
- src/test/resources/de/tum/cit/ase/ares/integration/testuser/securitypolicies/**/*
- docs/policy/**/*
- documentation/docs/contributor/subsystems/policy/**/*
- documentation/docs/contributor/policy/**/*

docs:
- changed-files:
- any-glob-to-any-file:
- docs/**/*
- documentation/**/*
- "*.md"
- "*.adoc"
- SECURITY.md

tests:
Expand All @@ -47,7 +49,7 @@ securitytest:
- any-glob-to-any-file:
- src/main/java/de/tum/cit/ase/ares/api/securitytest/**/*
- src/test/java/de/tum/cit/ase/ares/api/securitytest/**/*
- docs/securitytest/**/*
- documentation/docs/contributor/subsystems/securitytest/**/*

other:
- changed-files:
Expand Down
50 changes: 50 additions & 0 deletions .github/workflows/deploy-documentation.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
# Publishes documentation/ to GitHub Pages at https://ls1intum.github.io/Ares2/.
#
# One-time repository setup, which a workflow cannot do for you:
# Settings -> Pages -> Build and deployment -> Source = "GitHub Actions"
# Without it the deploy job fails with a "Pages is not enabled" error.
#
# workflow_dispatch is kept so the site can be republished without a documentation change,
# for example after a failed deploy or a change to the Pages settings.
name: Deploy Documentation to GitHub Pages

on:
push:
branches: [ "main" ]
paths:
- 'documentation/**'
- '.github/workflows/documentation.yml'
- '.github/workflows/deploy-documentation.yml'
workflow_dispatch:

permissions: {}

# Serialised against every other Pages deploy. cancel-in-progress stays false so an in-flight
# deploy is allowed to finish rather than leaving the site half-published.
concurrency:
group: pages
cancel-in-progress: false

jobs:
documentation:
uses: ./.github/workflows/documentation.yml
permissions:
contents: read
with:
upload_pages_artifact: true

deploy:
name: Deploy to GitHub Pages
needs: documentation
runs-on: ubuntu-24.04
timeout-minutes: 10
permissions:
pages: write
id-token: write
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@cd2ce8fcbc39b97be8ca5fce6e763baed58fa128 # v5.0.0
34 changes: 34 additions & 0 deletions .github/workflows/documentation-ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
# Pull request validation for the documentation site.
#
# Builds documentation/ without publishing anything, so a broken link, a stale PlantUML render
# or a type error is caught on the pull request rather than on the deploy.
name: Documentation CI

on:
pull_request:
branches: [ "main" ]
paths:
- 'documentation/**'
- '.github/workflows/documentation.yml'
- '.github/workflows/documentation-ci.yml'
push:
branches: [ "main" ]
paths:
- 'documentation/**'
- '.github/workflows/documentation.yml'
- '.github/workflows/documentation-ci.yml'
workflow_dispatch:

permissions: {}

concurrency:
group: documentation-ci-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}

jobs:
documentation:
uses: ./.github/workflows/documentation.yml
permissions:
contents: read
with:
upload_pages_artifact: false
112 changes: 112 additions & 0 deletions .github/workflows/documentation.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
# Reusable build of the Docusaurus site in documentation/.
#
# This workflow has no triggers of its own. Two callers use it:
# - documentation-ci.yml validates every pull request that touches the docs.
# - deploy-documentation.yml builds and then publishes to GitHub Pages.
#
# Keeping the build in one place means the artefact that gets deployed is produced by exactly
# the same steps that validated it on the pull request.
name: Build Documentation

on:
workflow_call:
inputs:
upload_pages_artifact:
description: >-
Also upload the built site as a GitHub Pages artefact. Set true by the deploy path;
pull request validation leaves it false so no artefact is produced.
required: false
default: false
type: boolean

permissions: {}

jobs:
build:
name: Build Docusaurus site
runs-on: ubuntu-24.04
timeout-minutes: 15
permissions:
contents: read
steps:
- name: Checkout Repository
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false

- name: Set up Node.js
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
node-version: '24'

# pnpm is activated through Corepack rather than pnpm/action-setup. This repository
# restricts Actions to GitHub-owned ones (plus one explicit pattern), so a third-party
# action makes the workflow fail to start at all. Corepack ships with Node and reads the
# exact version from the packageManager field in documentation/package.json, so CI and a
# local `corepack enable` resolve to the same pnpm, with one less supply-chain dependency.
- name: Set up pnpm through Corepack
working-directory: documentation
run: |
corepack enable
corepack install
pnpm --version

# Cached by hand because actions/setup-node's built-in pnpm cache resolves the store path
# before Corepack has run. actions/cache is GitHub-owned and therefore permitted.
- name: Resolve the pnpm store path
id: pnpm-store
working-directory: documentation
run: echo "path=$(pnpm store path --silent)" >> "$GITHUB_OUTPUT"

- name: Restore the pnpm store
uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
with:
path: ${{ steps.pnpm-store.outputs.path }}
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('documentation/pnpm-lock.yaml') }}
restore-keys: ${{ runner.os }}-pnpm-store-

- name: Install dependencies
working-directory: documentation
run: pnpm install --frozen-lockfile

- name: Code style
working-directory: documentation
run: pnpm run lint

- name: Type check
working-directory: documentation
run: pnpm run typecheck

# PlantUML sources are rendered to SVG and the SVGs are committed, the same way the
# .drawio sources sit next to committed .drawio.png renders. This fails the build when a
# .puml was edited without regenerating its diagram, so the site can never show a
# diagram that disagrees with its source.
- name: Verify committed PlantUML renders
working-directory: documentation
run: pnpm run diagrams:check

# onBrokenLinks and onBrokenAnchors are set to 'throw', so a dangling cross-reference
# fails here rather than shipping to the published site.
- name: Build Docusaurus site
working-directory: documentation
run: pnpm run build

# Drives the built site in a real browser. This is the only check that sees what a
# reader actually gets: the build verifies that every link resolves, but not that a page
# renders. It is what caught 53 admonitions that were silently rendering as plain text
# because they used the Docusaurus 2 title syntax.
- name: Install the test browser
working-directory: documentation
run: pnpm exec playwright install --with-deps --only-shell chromium

- name: Documentation integration tests
working-directory: documentation
run: pnpm run test

# Only on the deploy path; the deploy job consumes this. Uploading needs no extra
# permissions of its own, `pages: write` lives on the deploy job.
- name: Upload Pages artefact
if: ${{ inputs.upload_pages_artifact }}
uses: actions/upload-pages-artifact@fc324d3547104276b827a68afc52ff2a11cc49c9 # v5.0.0
with:
path: documentation/build
2 changes: 1 addition & 1 deletion .github/workflows/examples.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ on:
- 'examples/**'
- 'src/main/**'
- 'pom.xml'
- 'docs/HowToMakeAProjectAnAresProject.md'
- 'documentation/docs/instructor/protect-a-java-project/**'
- '.github/workflows/examples.yml'
push:
branches: [ "main" ]
Expand Down
5 changes: 4 additions & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
# AGENTS.md

Repository conventions for automated agents and contributors working on Ares.
Repository conventions for automated agents and contributors working on Ares 2. Every
convention lives here, stated once. [CLAUDE.md](./CLAUDE.md) imports this file and adds the
orientation an agent needs beside it: what the project is, how it is built, and where its
parts live.

## Testing network access (incoming and outgoing)

Expand Down
Loading
Loading