Assistant: codex Assistant-Model: gpt-6-astra Assistant-Session: 01a07ff8-19d0-7820-b4d0-1353833cb7fc
97 lines
5.1 KiB
Markdown
97 lines
5.1 KiB
Markdown
# 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 Dockerfile’s
|
||
existing secret mounts. Temporary tool and registry-login state is cleaned at exit.
|
||
See [Docker’s 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.
|