210 Commits

Author SHA1 Message Date
9cb8992486 Add capability registry scaffold (REUSE-WP-0014-T08 B06) 2026-06-16 02:02:54 +02:00
5ae4aba4a8 Lock issue-core from Gitea registry 2026-06-05 20:42:33 +02:00
00469c4cc0 Adopt whynot-design tokens (WP-0017 Phase 1)
Replace vergabe's blue brand-* palette with whynot's near-black/paper/yellow
visual language. Tokens vendored at static/src/vendor/whynot-design/ (synced
from commit 9419f16 via scripts/sync-whynot-design.sh / make sync-whynot-design).

main.css imports the vendored CSS first, exposes ink/paper/hi as Tailwind
@theme tokens (bg-paper, text-ink, border-line, etc.), and re-tones every
component class (.btn-*, .card, .field-row, .phase-*, .form-input, .table-*,
.sidebar-*). Border radii drop to whynot's 0-4px; .card loses its shadow.

Legacy text-brand-* / bg-brand-* / border-brand-* template references are
kept working via @theme aliases that map the old blue scale onto the whynot
ink ramp — Phase 1 is tokens-only, no template churn.

btn-danger keeps an off-spec red (#B22222) as a local --danger var until
upstream defines a canonical destructive color.

base.html body class swapped: bg-slate-50 → bg-paper-2 text-ink.

Phase 2 (component adoption) deferred until whynot-design ships Lit web
components + missing atoms (Card, Modal, Input, Table, Toast). See
wiki/DesignSystem.md and history/2026-05-23-whynot-design-cross-framework-analysis.md.

Verified: 8/8 e2e tests pass; dev server boots; static/dist/main.css contains
no #3b5bdb references. Visual pixel-level verification still pending Bernd's
browser walk.
2026-05-23 21:52:59 +02:00
fbb8def9ce Plan WP-0017: whynot-design adoption (tokens + CSS only)
Add cross-framework analysis to history/ and WP-0017 workplan for the
tokens+CSS phase of adopting ~/whynot-design. Component port deferred until
upstream ships Lit web components and missing atoms (Card, Modal, Input,
Table, Toast).

Decisions captured: vendor (not npm), big-bang swap (not pilot), keep
off-spec red for btn-danger until upstream defines one.
2026-05-23 19:09:18 +02:00
739ffafedd fixes 2026-05-23 06:42:44 +02:00
f95de1482d Fix CSRF 403 on all POSTs behind traefik
prod.py never read the CSRF_TRUSTED_ORIGINS env var the deployment already
injects, so Django's setting stayed empty. Behind traefik's TLS termination
Django saw requests as HTTP and rejected the browser's https:// Origin on
every POST with a CSRF failure (403) — forms could not be saved and the DB
stayed empty.

- Read CSRF_TRUSTED_ORIGINS from env (filtering empties).
- Set SECURE_PROXY_SSL_HEADER so Django recognizes HTTPS via X-Forwarded-Proto.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-22 02:02:42 +02:00
e28739f8f1 Fix Tailwind asset build dropping all utility classes in Docker
The Dockerfile asset stage copied only static/src + vite.config.js, never
the HTML templates. Tailwind v4 generates CSS by scanning source files for
class usage, so with no templates present it emitted a stripped CSS with
zero utility classes — breaking layout and ballooning SVG icons (w-5/h-5
no longer applied) on deployed builds.

- main.css: add explicit @source directive for the templates dir so content
  detection no longer depends on the build CWD.
- Dockerfile: copy vergabe_teilnahme/templates into the assets stage so the
  @source path resolves at build time.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-21 00:37:07 +02:00
483a4dfd3b Add multi-stage Dockerfile for container deployment
Three-stage build:
- assets: Node 22 + Vite + Tailwind CSS 4 → static/dist/main.css
- python-deps: uv sync --frozen --no-dev against pyproject + uv.lock,
  with the issue-core path dependency satisfied via a BuildKit
  named context (--build-context issue-core=...)
- runtime: python:3.12-slim-bookworm + libpq5 + curl, non-root 'app'
  user, collectstatic at build time, gunicorn on :8000,
  /health/ HEALTHCHECK every 30s

Adds gunicorn>=22 to project dependencies (was missing).

Build:
  docker build --build-context issue-core=/home/worsch/issue-core \
    -t gitea.coulomb.social/coulomb/vergabe-teilnahme:<tag> .

Smoke-verified: container reports (healthy) and /health/ returns
{"status": "ok"} without a database connection.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 23:32:51 +02:00
17f511fbcd Rewire issue tracker integration from issue-facade to issue-core
issue-facade was renamed to issue-core. Update the dependency
declaration and the three Python imports it touched. Model field
names (issue_facade_backend, issue_facade_id) and the Django setting
ISSUE_FACADE_LOCAL_DB stay as-is — they are persisted/semantic
identifiers, not part of the package wiring.

All 20 aufgaben tests pass after the rewire.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 22:33:28 +02:00
341c718511 Refresh agent instruction files 2026-05-18 16:55:54 +02:00
a32ebb9e12 chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-05-16:
  - update .custodian-brief.md for vergabe-teilnahme
2026-05-16 06:10:43 +02:00
746b035feb chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-05-16:
  - update .custodian-brief.md for vergabe_teilnahme
2026-05-16 05:53:23 +02:00
eaddaa1b2f chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-05-16:
  - update .custodian-brief.md for vergabe-teilnahme
2026-05-16 05:36:09 +02:00
c7c2e8472b chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-05-16:
  - update .custodian-brief.md for vergabe_teilnahme
2026-05-16 05:18:53 +02:00
6436fc5faf chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-05-16:
  - update .custodian-brief.md for vergabe-teilnahme
2026-05-16 05:01:42 +02:00
1ad7674532 chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-05-16:
  - update .custodian-brief.md for vergabe_teilnahme
2026-05-16 04:44:52 +02:00
3285026c0a chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-05-16:
  - update .custodian-brief.md for vergabe-teilnahme
2026-05-16 03:53:08 +02:00
bb70f36068 chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-05-16:
  - update .custodian-brief.md for vergabe_teilnahme
2026-05-16 03:53:02 +02:00
99b0974732 chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-05-16:
  - update .custodian-brief.md for vergabe-teilnahme
2026-05-16 03:36:06 +02:00
00e6a9ae6f chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-05-16:
  - update .custodian-brief.md for vergabe_teilnahme
2026-05-16 03:36:01 +02:00
1f39d6ad85 chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-05-16:
  - update .custodian-brief.md for vergabe-teilnahme
2026-05-16 03:18:52 +02:00
c9cf3bab87 chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-05-16:
  - update .custodian-brief.md for vergabe_teilnahme
2026-05-16 03:18:48 +02:00
07a831632b chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-05-16:
  - update .custodian-brief.md for vergabe-teilnahme
2026-05-16 02:26:59 +02:00
963997f410 chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-05-15:
  - update .custodian-brief.md for vergabe_teilnahme
2026-05-15 22:16:32 +02:00
19118dc534 chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-05-15:
  - update .custodian-brief.md for vergabe-teilnahme
2026-05-15 20:08:27 +02:00
0a7f1de5e4 chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-05-15:
  - update .custodian-brief.md for vergabe_teilnahme
2026-05-15 19:51:54 +02:00
91ab70710e chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-05-15:
  - update .custodian-brief.md for vergabe-teilnahme
2026-05-15 19:51:49 +02:00
33b6f2ecaf chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-05-15:
  - update .custodian-brief.md for vergabe_teilnahme
2026-05-15 19:35:42 +02:00
656276dda1 chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-05-15:
  - update .custodian-brief.md for vergabe-teilnahme
2026-05-15 19:35:36 +02:00
9677cb50fb chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-05-15:
  - update .custodian-brief.md for vergabe_teilnahme
2026-05-15 19:19:47 +02:00
67693d9f61 chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-05-15:
  - update .custodian-brief.md for vergabe-teilnahme
2026-05-15 19:19:42 +02:00
e55a619bce chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-05-15:
  - update .custodian-brief.md for vergabe_teilnahme
2026-05-15 19:03:35 +02:00
5d0d63fd89 chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-05-15:
  - update .custodian-brief.md for vergabe-teilnahme
2026-05-15 19:03:29 +02:00
ff79a4bd57 chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-05-15:
  - update .custodian-brief.md for vergabe_teilnahme
2026-05-15 17:58:48 +02:00
ec8aca19c1 chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-05-15:
  - update .custodian-brief.md for vergabe-teilnahme
2026-05-15 17:41:55 +02:00
07f8a2659d chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-05-15:
  - update .custodian-brief.md for vergabe_teilnahme
2026-05-15 17:41:51 +02:00
a9299e37b6 chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-05-15:
  - update .custodian-brief.md for vergabe-teilnahme
2026-05-15 16:53:20 +02:00
649f524979 chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-05-15:
  - update .custodian-brief.md for vergabe_teilnahme
2026-05-15 14:25:18 +02:00
c103c0d057 chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-05-15:
  - update .custodian-brief.md for vergabe-teilnahme
2026-05-15 14:25:13 +02:00
69c7f3eee1 chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-05-15:
  - update .custodian-brief.md for vergabe_teilnahme
2026-05-15 14:09:07 +02:00
b5b5c6c29b chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-05-15:
  - update .custodian-brief.md for vergabe-teilnahme
2026-05-15 13:52:38 +02:00
0ae841b362 chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-05-15:
  - update .custodian-brief.md for vergabe_teilnahme
2026-05-15 13:18:56 +02:00
ae32ba4ba6 chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-05-15:
  - update .custodian-brief.md for vergabe-teilnahme
2026-05-15 13:02:19 +02:00
b4451ea161 chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-05-15:
  - update .custodian-brief.md for vergabe_teilnahme
2026-05-15 10:48:29 +02:00
87e0a557b0 chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-05-15:
  - update .custodian-brief.md for vergabe-teilnahme
2026-05-15 10:48:15 +02:00
78a27793c1 chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-05-15:
  - update .custodian-brief.md for vergabe_teilnahme
2026-05-15 10:31:25 +02:00
34cf25483d chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-05-15:
  - update .custodian-brief.md for vergabe-teilnahme
2026-05-15 10:31:13 +02:00
aa940fafe5 chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-05-15:
  - update .custodian-brief.md for vergabe_teilnahme
2026-05-15 10:14:37 +02:00
fdccb41fcd chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-05-15:
  - update .custodian-brief.md for vergabe-teilnahme
2026-05-15 09:59:01 +02:00
30c44edb18 chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-05-15:
  - update .custodian-brief.md for vergabe_teilnahme
2026-05-15 03:36:23 +02:00