vergabe-teilnahme/docs/delivery.md
tegwick f7a388681c
All checks were successful
Application acceptance / application-tests (push) Successful in 10s
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 1s
Record published invited-pilot release and verified runtime
Assistant: codex
Assistant-Model: gpt-6-astra
Assistant-Session: 01a07ff8-19d0-7820-b4d0-1353833cb7fc
2026-09-11 16:40:48 +02:00

97 lines
5.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Delivery checks
Before implementing a workplan, use the hosted reuse registry:
```sh
make plan-check WORKPLAN=workplans/VERGABE-WP-0018-customer-factory-delivery.md
```
Install a reuse-surface revision containing REUSE-WP-0022. The initially tested
provider revision is recorded in
[evidence/2026-09-08-hosted-plan-check.json](evidence/2026-09-08-hosted-plan-check.json).
`REUSE_SURFACE_BIN` can select an explicit installed executable;
`REUSE_SURFACE_URL` defaults to `https://reuse.coulomb.social`.
This reads current hosted capabilities with `--no-llm`. It sends no tender intent
or mutation token to the registry. A failed/stale/partial source exits nonzero
without a recommendation. Preserve JSON output with the source revision in the
workplan evidence; a lexical `new` result still requires review of existing
capability owners. For this delivery we reuse reuse-surface, Railiance CI tooling
and the existing Railiance Apps deployment rather than establish new equivalents.
## Application and release gate
```sh
make test-image
```
The `application-tests` Docker target installs the locked Python dependencies,
builds Vite/Tailwind assets, collects static files, runs the complete Django
application suite against disposable SQLite data, and checks migration drift.
It includes the existing tender → lot → approval and submission workflow tests.
The target carries no production database connection or release credential.
SQLite proves this application acceptance suite; target PostgreSQL and live
storage/recovery behavior remain release admission checks.
The Forgejo application workflow checks proposed changes. The shared
`scripts/ci-docker.sh` installs Docker 27.3.1 and a checksum-pinned Buildx 0.19.3
plugin into temporary per-job state and enables BuildKit. The Railiance runner
otherwise falls back to the legacy builder, which rejects this Dockerfiles
existing secret mounts. Temporary tool and registry-login state is cleaned at exit.
See [Dockers BuildKit documentation](https://docs.docker.com/build/buildkit/).
The workflow runs once per PR update; it does not duplicate that run on the
feature-branch push. The image workflow
runs the same target on the same archive revision **before** registry login and
publication. Test dependencies and test settings are isolated from the runtime
image. The existing optional BuildKit package secrets remain supported, but the
current issue-core package is anonymously readable; no new secret is required.
The corrected Dockerfile consumes application templates under
`vergabe_teilnahme/templates/`. A fresh archive does not contain a root
`templates/` directory; attempting to copy it previously broke clean builds.
## Customer release acceptance
VERGABE-WP-0018-T03 owns the first admitted Railiance customer pilot: exact image
digest and chart revision, tenant/host and login binding, database and media
ownership, backup/restore and rollback, UI smoke and named operating owner.
Existing production tender data is never disposable test data. A passing source
build does not establish customer availability or the governed factory worker.
## Invited pilot — 2026-09-11
[VERGABE-WP-0019](../workplans/VERGABE-WP-0019-invited-company-pilot.md)
advances one manually onboarded company alongside factory admission. Billing
and a shared tenancy implementation are not pilot gates. All application routes
and media downloads require an active Django account; health and login remain
public. Members can change passwords; administrators create/reset/deactivate
accounts using the existing Django administration through the admitted operator
path. There is no public sign-up or email invitation delivery in this milestone.
Use the Railiance Apps pilot contract in `docs/vergabe-teilnahme-pilot.md` and
RAPPS-WP-0014. Record the newly tested image digest; the older published image
has no global access gate. Persist PostgreSQL, uploads and issue-facade SQLite
separately, and prove coherent restore before admitting customer data. Serve
`/media/` through Django, never directly through an unauthenticated ingress or
static file server. The image's `/app/.issue-facade` directory is operational
state and must never be placed below MEDIA_ROOT.
Application tests use the standard anonymous `client` for access tests and the
explicit `admitted_client` fixture for company workflows. Existing end-to-end
tests retain their explicit login. Container acceptance remains the release
gate; native two-user workflow, restored data, support and rollout evidence
remain open until performed on the admitted deployment.
## Published invited-pilot candidate — 2026-09-11
Source `ccb6d1f8c7abd50f2ef654491bb1aa5861e795cb` (implementation `b7d7828`)
passed live application CI 29 and image publication 31. The registry resolves
`main-ccb6d1f` to
`sha256:963240ef4180a01e5b8af7fbeb88be27e56203a45da8ecd633326b4c6d262005`.
The published image contains the invited login/private-download gate. Exact
company/host/data binding, native deployment, coherent restore and two-user
acceptance remain open. See `docs/evidence/2026-09-11-invited-pilot-release.json`
for source, CI and artifact receipts; this candidate has not been deployed.