diff --git a/Codex-Project-Index.md b/Codex-Project-Index.md index 1aded4f..e476394 100644 --- a/Codex-Project-Index.md +++ b/Codex-Project-Index.md @@ -10,6 +10,7 @@ This page is generated from repository and product-directory project files. - [Repo-docs-DATASOURCE-AND-DEFINITION-GRAPH-ARCHITECTURE](Repo-docs-DATASOURCE-AND-DEFINITION-GRAPH-ARCHITECTURE) - `/mnt/DATA/git/govoplan/docs/DATASOURCE_AND_DEFINITION_GRAPH_ARCHITECTURE.md` - [Repo-docs-FRONTEND-LAYOUT-PRINCIPLES](Repo-docs-FRONTEND-LAYOUT-PRINCIPLES) - `/mnt/DATA/git/govoplan/docs/FRONTEND_LAYOUT_PRINCIPLES.md` - [Repo-docs-GITEA-ISSUES](Repo-docs-GITEA-ISSUES) - `/mnt/DATA/git/govoplan/docs/GITEA_ISSUES.md` +- [Repo-docs-INSTALLATION-AND-DEPLOYMENT-ARCHITECTURE](Repo-docs-INSTALLATION-AND-DEPLOYMENT-ARCHITECTURE) - `/mnt/DATA/git/govoplan/docs/INSTALLATION_AND_DEPLOYMENT_ARCHITECTURE.md` - [Repo-docs-INTERFACE-PATTERN-LANGUAGE](Repo-docs-INTERFACE-PATTERN-LANGUAGE) - `/mnt/DATA/git/govoplan/docs/INTERFACE_PATTERN_LANGUAGE.md` - [Repo-docs-INTERFACE-SURFACE-INVENTORY](Repo-docs-INTERFACE-SURFACE-INVENTORY) - `/mnt/DATA/git/govoplan/docs/INTERFACE_SURFACE_INVENTORY.md` - [Repo-docs-META-REPO-SCAN](Repo-docs-META-REPO-SCAN) - `/mnt/DATA/git/govoplan/docs/META_REPO_SCAN.md` diff --git a/Repo-README.md b/Repo-README.md index 0e6510a..5196c7b 100644 --- a/Repo-README.md +++ b/Repo-README.md @@ -1,4 +1,4 @@ - + > Mirrored from `/mnt/DATA/git/govoplan/README.md`. > Origin: `repository`. @@ -13,6 +13,7 @@ [![Module Matrix](https://git.add-ideas.de/GovOPlaN/govoplan/actions/workflows/module-matrix.yml/badge.svg?branch=main)](https://git.add-ideas.de/GovOPlaN/govoplan/actions?workflow=module-matrix.yml&actor=0&status=0) [![Release Integration](https://git.add-ideas.de/GovOPlaN/govoplan/actions/workflows/release-integration.yml/badge.svg?branch=main)](https://git.add-ideas.de/GovOPlaN/govoplan/actions?workflow=release-integration.yml&actor=0&status=0) +[![Deployment Installer](https://git.add-ideas.de/GovOPlaN/govoplan/actions/workflows/deployment-installer.yml/badge.svg?branch=main)](https://git.add-ideas.de/GovOPlaN/govoplan/actions?workflow=deployment-installer.yml&actor=0&status=0) [![Dependency Audit](https://git.add-ideas.de/GovOPlaN/govoplan/actions/workflows/dependency-audit.yml/badge.svg?branch=main)](https://git.add-ideas.de/GovOPlaN/govoplan/actions?workflow=dependency-audit.yml&actor=0&status=0) [![Security Audit](https://git.add-ideas.de/GovOPlaN/govoplan/actions/workflows/security-audit.yml/badge.svg?branch=main)](https://git.add-ideas.de/GovOPlaN/govoplan/actions?workflow=security-audit.yml&actor=0&status=0) @@ -48,6 +49,16 @@ Open the WebUI in a browser after launch only when explicitly requested: GOVOPLAN_OPEN_BROWSER=1 ./tools/launch/launch-dev.sh ``` +Limit backend reload triggers during focused module work without changing the +enabled module graph: + +```sh +GOVOPLAN_BACKEND_RELOAD_MODULES=calendar,campaign ./tools/launch/launch-dev.sh +``` + +Set `GOVOPLAN_BACKEND_RELOAD_MODULES=none` to watch only core/config sources. +Leaving it unset keeps the broad default and watches all enabled modules. + Start the shared development PostgreSQL service: ```sh @@ -138,6 +149,18 @@ Start the local release console: ./.venv/bin/python tools/release/release-console.py ``` +Create and validate a private, declarative installation bundle: + +```sh +./.venv/bin/python tools/deployment/govoplan-deploy.py init \ + --directory ~/.local/share/govoplan/installations/default +./.venv/bin/python tools/deployment/govoplan-deploy.py doctor \ + --directory ~/.local/share/govoplan/installations/default +``` + +The current executable slice and remaining production gates are documented in +[Installation and Deployment Architecture](docs/INSTALLATION_AND_DEPLOYMENT_ARCHITECTURE.md). + ## Configuration The repository root `.env.example` is the self-hosted operator template for a @@ -170,6 +193,9 @@ including stage gates and shared documentation expectations, is in the The administrator journey from Core-only bootstrap through online module installation, scale-out, and reversible environment promotion is defined in [System Administrator Lifecycle User Story](docs/SYSTEM_ADMINISTRATOR_LIFECYCLE_USER_STORY.md). +The corresponding host deployment compiler, managed/external component choices, +reconfiguration semantics, and safe Web update boundary are defined in +[Installation and Deployment Architecture](docs/INSTALLATION_AND_DEPLOYMENT_ARCHITECTURE.md). The first Campaign-centric capability and infrastructure fit assessment is in `docs/CAPABILITY_AND_INFRASTRUCTURE_FIT.md`. Its rerun tooling can collect and verify a bounded installed composition; target, provider and production claims diff --git a/Repo-docs-SECURITY-AUDIT.md b/Repo-docs-SECURITY-AUDIT.md index c174b88..308a859 100644 --- a/Repo-docs-SECURITY-AUDIT.md +++ b/Repo-docs-SECURITY-AUDIT.md @@ -1,4 +1,4 @@ - + > Mirrored from `/mnt/DATA/git/govoplan/docs/SECURITY_AUDIT.md`. > Origin: `repository`. @@ -57,6 +57,10 @@ accept findings, but scanner execution errors and malformed JSON/SARIF reports always fail the run. The manifest lists the expected, present, and missing reports for that invocation. Validation and checksums use that explicit set, so reusing a report directory cannot make stale output look like part of a new run. +It also contains `coverage_status` and structured `scanner_coverage` entries. +Every required scanner is recorded as `no-findings`, `findings`, +`scanner-failure`, or `skipped`; this makes an incomplete local run visible +without treating it as a clean audit. The wrapper tags the toolbox image by a fingerprint of the Dockerfile, `requirements-audit.txt`, and the Semgrep smoke-test inputs. If those inputs have @@ -97,6 +101,12 @@ tools/checks/security-audit/run.sh --mode quick --scope current --update --build - `ci`: quick plus Semgrep public registry rulesets, Trivy, pip-audit, npm audit. - `full`: ci plus OSV-Scanner, jscpd, Radon, and Xenon. +The Gitea workflow uses `full` mode so its coverage contract includes every +scanner above. Missing scanners fail strict runs and all Actions runs, even +while actual findings remain report-only. Local report-only runs may finish +with missing tools for diagnostics, but their manifest is marked +`coverage_status: incomplete`. + Semgrep and Trivy are invoked with finding-sensitive exit codes. Their exit 1 is therefore a finding under the wrapper contract; higher exit codes, missing output, invalid JSON/SARIF, and scanner error payloads are execution failures. @@ -110,7 +120,7 @@ baseline. ## Gating -The initial Gitea workflow runs in report-only mode: +The Gitea workflow currently runs findings in report-only mode: ```bash SECURITY_AUDIT_FAIL_ON_FINDINGS=0 @@ -126,7 +136,7 @@ SECURITY_AUDIT_FAIL_ON_FINDINGS=1 or run locally with: ```bash -tools/checks/security-audit/run.sh --mode ci --scope current --strict +tools/checks/security-audit/run.sh --mode full --scope govoplan --strict ``` ## Audit Burndown Workflow