Commit Graph
39 Commits
Author SHA1 Message Date
beug.k@beugsiud.deandClaude Opus 5.5 b94b6c8dae test(api): reset preview before decoding the second response
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 14:24:08 +02:00
beug.k@beugsiud.deandClaude Opus 5.5 0a74d4b3ba feat: generator settings and configuration preview (API and UI)
ci / Go (lint, test, vuln) (push) Failing after 3m31s
ci / Protobuf (push) Successful in 6s
ci / Web (lint, test, audit, build) (push) Successful in 57s
ci / Shell and licence headers (push) Successful in 6s
ci / Release build (dry run) (push) Successful in 1m59s
ci / Integration (real BIND and Kea) (push) Failing after 43s
ci / Development environment (compose) (push) Successful in 13s
- stable Kea subnet IDs per network (migration 00002)
- generator settings (SOA, name servers, TTLs, recursion, DHCP defaults)
- GET /config/preview renders the configuration for the current data
- UI: configuration preview page and DNS/DHCP settings page

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 14:19:26 +02:00
beug.k@beugsiud.deandClaude Opus 5.5 3564686db0 feat(configgen): BIND and Kea configuration generator with integration tests
- configgen: input model shared by derivation and renderers
- derive: forward zones per domain, reverse zones (IPv4 octet, IPv6 nibble
  boundaries), A/AAAA/PTR from static and manual_dhcp entries, Kea subnets
  with effective pools and reservations; pure and deterministic
- bindgen: zone-statement include, options include, zone files with strict
  validation, canonical ordering and RFC 1035 TXT escaping
- keagen: typed Kea DHCPv4 JSON with strict validation
- golden-file, validation, determinism and fuzz tests
- integration tests check generated files with real named-checkconf,
  named-checkzone (BIND 9.18, 9.20) and kea-dhcp4 -t (Kea 2.6, 3.2);
  new CI job

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 14:19:25 +02:00
beug.k@beugsiud.deandClaude Opus 5.5 e91d1d63c0 docs: add project log (handover notes) and CLAUDE.md pointer
ci / Go (lint, test, vuln) (push) Successful in 3m27s
ci / Protobuf (push) Successful in 6s
ci / Web (lint, test, audit, build) (push) Successful in 53s
ci / Shell and licence headers (push) Successful in 6s
ci / Release build (dry run) (push) Successful in 1m53s
ci / Development environment (compose) (push) Successful in 15s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 21:56:38 +02:00
beug.k@beugsiud.deandClaude Opus 5.5 a670256be6 docs: mark milestone M1 as complete
ci / Protobuf (push) Canceled after 0s
ci / Web (lint, test, audit, build) (push) Canceled after 0s
ci / Shell and licence headers (push) Canceled after 0s
ci / Release build (dry run) (push) Canceled after 0s
ci / Development environment (compose) (push) Canceled after 0s
ci / Go (lint, test, vuln) (push) Canceled after 2m22s
release / release (push) Successful in 1m51s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
v0.2.0
2026-10-12 21:54:20 +02:00
beug.k@beugsiud.deandClaude Opus 5.5 c88321f297 ci: smoke-test the released server binary with the embedded UI
ci / Protobuf (push) Successful in 6s
ci / Development environment (compose) (push) Successful in 14s
ci / Go (lint, test, vuln) (push) Successful in 3m26s
ci / Web (lint, test, audit, build) (push) Successful in 55s
ci / Shell and licence headers (push) Successful in 6s
ci / Release build (dry run) (push) Successful in 1m58s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 21:41:49 +02:00
beug.k@beugsiud.deandClaude Opus 5.5 4717ae5cb1 docs: API overview, architecture and README updated for M1
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 21:41:12 +02:00
beug.k@beugsiud.deandClaude Opus 5.5 79c1b0bba8 test(api): OIDC login flow against a fake identity provider; dev run targets
ci / Go (lint, test, vuln) (push) Successful in 3m30s
ci / Protobuf (push) Successful in 6s
ci / Web (lint, test, audit, build) (push) Successful in 54s
ci / Shell and licence headers (push) Successful in 6s
ci / Release build (dry run) (push) Successful in 1m48s
ci / Development environment (compose) (push) Successful in 15s
- end-to-end OIDC test: discovery, PKCE (S256) verified by the IdP, nonce,
  state cookie, ID token signature, user creation, role sync, refused
  login without role, forged state
- make run-server / dev-admin with deploy/config/server.dev.yaml

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 21:39:30 +02:00
beug.k@beugsiud.deandClaude Opus 5.5 42aee163f3 feat(tools): keygen-setup script and licensing guide
Creates the product and the standard policy in Keygen (one server per
license, license-key activation, daily heartbeat), issues licenses with
limits in metadata and writes offline license files. The admin token is
only read from the environment.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 21:36:16 +02:00
beug.k@beugsiud.deandClaude Opus 5.5 63d6dac0f5 feat(web): management UI for M1
ci / Go (lint, test, vuln) (push) Successful in 3m27s
ci / Protobuf (push) Successful in 6s
ci / Web (lint, test, audit, build) (push) Successful in 54s
ci / Shell and licence headers (push) Successful in 6s
ci / Development environment (compose) (push) Canceled after 0s
ci / Release build (dry run) (push) Canceled after 33s
- login with TOTP step and SSO button, forced password change, account
  page with password change and TOTP setup (QR code)
- layout with permission-based navigation, license banner, theme/language
- networks: list with utilization, create/edit with pool editor, detail
  page with address map
- addresses: server-side filtered/sorted, virtualized table, inline type
  switch with DNS/DHCP preview, bulk actions, saved filters, CSV import
  (dry run first) and export
- license, users, audit log and OIDC settings pages
- typed API client from the OpenAPI spec; errors translated by code
- German default, English second language

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 21:34:45 +02:00
beug.k@beugsiud.deandClaude Opus 5.5 eb511e0a85 fix(server): issues found by the API contract tests
ci / Shell and licence headers (push) Successful in 6s
ci / Release build (dry run) (push) Successful in 1m43s
ci / Go (lint, test, vuln) (push) Successful in 3m25s
ci / Protobuf (push) Successful in 6s
ci / Web (lint, test, audit, build) (push) Successful in 32s
ci / Development environment (compose) (push) Successful in 14s
- route the UI as "/" (GET/HEAD only) to avoid a ServeMux conflict with /api/
- constraint violations carry their specific top-level code
- MAC search accepts '-' and '.' separators
- CSV import reports syntax and validation problems in one pass
- license write lock is evaluated against the clock on every request
- enabling TOTP keeps the consumed time step (no replay of the setup code)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 21:14:39 +02:00
beug.k@beugsiud.deandClaude Opus 5.5 1aefed471c feat(server): wire database, licensing, API and metrics into ddi-server
ci / Web (lint, test, audit, build) (push) Successful in 32s
ci / Shell and licence headers (push) Successful in 5s
ci / Release build (dry run) (push) Successful in 1m43s
ci / Development environment (compose) (push) Canceled after 5s
ci / Go (lint, test, vuln) (push) Failing after 3m7s
ci / Protobuf (push) Successful in 6s
- commands: serve, migrate, bootstrap-admin, gen-master-key
- /metrics with route-pattern labels and license gauge, /readyz checks DB
- fix OpenAPI flow mappings with commas; generate TypeScript API types
  (openapi-typescript) and check them in CI

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 21:08:59 +02:00
beug.k@beugsiud.deandClaude Opus 5.5 1417e8f578 feat(api): add REST API with OpenAPI spec and contract tests
ci / Go (lint, test, vuln) (push) Failing after 2m34s
ci / Protobuf (push) Successful in 6s
ci / Web (lint, test, audit, build) (push) Successful in 32s
ci / Shell and licence headers (push) Successful in 5s
ci / Release build (dry run) (push) Successful in 1m15s
ci / Development environment (compose) (push) Successful in 14s
- one route table with access level, permission and write flag
- session cookie auth, MFA and forced password change gates, CSRF token
  plus Origin/Sec-Fetch-Site checks, license read-only lock
- RFC 9457 problem responses with stable codes and field problems
- OIDC authorization code flow with PKCE, state cookie and nonce
- contract tests: spec valid, routes == spec, every request/response in
  the API tests validated against the spec

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 20:58:08 +02:00
beug.k@beugsiud.deandClaude Opus 5.5 f619881dc5 feat(service): add use cases for auth, users, IPAM, license, audit, CSV and OIDC
ci / Go (lint, test, vuln) (push) Successful in 2m40s
ci / Protobuf (push) Successful in 5s
ci / Release build (dry run) (push) Successful in 1m15s
ci / Development environment (compose) (push) Successful in 14s
ci / Web (lint, test, audit, build) (push) Successful in 33s
ci / Shell and licence headers (push) Successful in 6s
- every mutation writes its audit entry in the same transaction
- stable error codes; constraint violations mapped to field problems
- bulk changes and CSV import are all-or-nothing, using savepoints so that
  all problems are reported at once
- CSV export neutralizes spreadsheet formulas
- OIDC settings with encrypted client secret, role mapping from claims

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 20:47:47 +02:00
beug.k@beugsiud.deandClaude Opus 5.5 b071d5fa1f fix(license): keep query string out of the request path
ci / Go (lint, test, vuln) (push) Failing after 2m20s
ci / Protobuf (push) Successful in 6s
ci / Web (lint, test, audit, build) (push) Successful in 32s
ci / Shell and licence headers (push) Successful in 6s
ci / Release build (dry run) (push) Successful in 1m14s
ci / Development environment (compose) (push) Successful in 14s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 20:42:12 +02:00
beug.k@beugsiud.deandClaude Opus 5.5 3fee3fca70 feat(license): add Keygen provider, license files and license manager
ci / Go (lint, test, vuln) (push) Failing after 2m23s
ci / Protobuf (push) Successful in 5s
ci / Development environment (compose) (push) Canceled after 0s
ci / Release build (dry run) (push) Canceled after 1m6s
ci / Web (lint, test, audit, build) (push) Successful in 32s
ci / Shell and licence headers (push) Successful in 6s
- every Keygen response is verified: Ed25519 signature over request target,
  host, date and digest; body digest; date freshness; validation nonce
- machine activation by HMAC-based fingerprint, entitlements, heartbeats
- offline license files (base64+ed25519, aes-256-gcm+ed25519)
- pure state evaluation trial -> valid <-> grace -> read_only with one grace
  period for unreachable, suspended and expired licenses
- encrypted cache, periodic revalidation; account ID and public key are
  embedded at build time

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 20:37:54 +02:00
beug.k@beugsiud.deandClaude Opus 5.5 56962a69f5 feat(store): add network, address, saved filter and license state repositories
ci / Go (lint, test, vuln) (push) Successful in 2m41s
ci / Protobuf (push) Successful in 7s
ci / Web (lint, test, audit, build) (push) Successful in 34s
ci / Shell and licence headers (push) Successful in 6s
ci / Release build (dry run) (push) Successful in 1m16s
ci / Development environment (compose) (push) Successful in 14s
Server-side filtering/sorting/pagination with whitelisted sort keys, usage
aggregation in SQL, optimistic locking, FQDN maintenance on domain change.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 20:29:20 +02:00
beug.k@beugsiud.deandClaude Opus 5.5 975401ee69 feat(server): add auth primitives, user/session/audit repositories and IPAM domain
ci / Go (lint, test, vuln) (push) Successful in 2m40s
ci / Protobuf (push) Successful in 5s
ci / Web (lint, test, audit, build) (push) Successful in 34s
ci / Shell and licence headers (push) Successful in 6s
ci / Development environment (compose) (push) Canceled after 0s
ci / Release build (dry run) (push) Canceled after 35s
- auth: Argon2id (PHC, rehash detection), TOTP (RFC 6238 vectors, replay
  protection), session tokens, keyed rate limiter, role permissions
- store: users, sessions (hashed tokens), audit log with keyset pagination
- ipam: network/pool/address validation, effective pools split around
  static/reserved/manual_dhcp, utilization, address map, change preview

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 20:25:20 +02:00
beug.k@beugsiud.deandClaude Opus 5.5 14bd32dc5d feat(server): add config file support, secret encryption and database layer
ci / Go (lint, test, vuln) (push) Successful in 2m34s
ci / Protobuf (push) Successful in 5s
ci / Web (lint, test, audit, build) (push) Successful in 32s
ci / Shell and licence headers (push) Successful in 5s
ci / Release build (dry run) (push) Successful in 1m14s
ci / Development environment (compose) (push) Successful in 14s
- config: YAML file plus environment overrides, day durations, validation
- secrets: AES-256-GCM keyring with key IDs, AAD binding and rotation
- store: pgx pool, embedded goose migrations with downgrade protection,
  initial schema with overlap/containment/uniqueness constraints
- storetest: per-test schemas; CI runs them against a PostgreSQL service

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 20:17:05 +02:00
beug.k@beugsiud.deandClaude Opus 5.5 eb1fa0b2e4 docs(adr): record verified Keygen CE facts, contract tests and auth design
- 0016: verified edition, signature scheme and feature set; build-time
  account/public key, nonce, fingerprint, grace semantics, license files
- 0019: OpenAPI contract tests instead of generated server stubs
- 0020: Argon2id, TOTP, OIDC with PKCE, sessions, CSRF, rate limits, RBAC

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 20:10:06 +02:00
beug.k@beugsiud.deandClaude Opus 5.5 a8e432e635 docs(adr): record verified release download path in ADR 0003
ci / Go (lint, test, vuln) (push) Successful in 2m5s
ci / Protobuf (push) Successful in 6s
ci / Web (lint, test, audit, build) (push) Successful in 32s
ci / Shell and licence headers (push) Successful in 6s
ci / Release build (dry run) (push) Successful in 1m13s
ci / Development environment (compose) (push) Successful in 14s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 19:59:52 +02:00
beug.k@beugsiud.deandClaude Opus 5.5 eecd314d11 docs: mark milestone M0 as complete
ci / Web (lint, test, audit, build) (push) Successful in 31s
ci / Go (lint, test, vuln) (push) Successful in 1m57s
ci / Protobuf (push) Successful in 5s
ci / Shell and licence headers (push) Successful in 6s
ci / Release build (dry run) (push) Successful in 1m12s
ci / Development environment (compose) (push) Successful in 14s
release / release (push) Successful in 1m14s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
v0.1.0
2026-10-12 19:53:21 +02:00
beug.k@beugsiud.deandClaude Opus 5.5 d763df7f24 fix(dev): commit dev.test zone file hidden by a *.test ignore rule
ci / Go (lint, test, vuln) (push) Successful in 1m59s
ci / Protobuf (push) Successful in 6s
ci / Web (lint, test, audit, build) (push) Successful in 32s
ci / Shell and licence headers (push) Successful in 6s
ci / Release build (dry run) (push) Successful in 1m12s
ci / Development environment (compose) (push) Successful in 13s
The pattern meant for Go test binaries also matched db.dev.test, so BIND in
CI started without the forward zone.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 19:48:34 +02:00
beug.k@beugsiud.deandClaude Opus 5.5 acd3d23f82 fix(dev): drop fixed compose subnet and host port assumptions
ci / Go (lint, test, vuln) (push) Successful in 2m0s
ci / Protobuf (push) Successful in 5s
ci / Web (lint, test, audit, build) (push) Successful in 32s
ci / Shell and licence headers (push) Successful in 6s
ci / Release build (dry run) (push) Successful in 1m12s
ci / Development environment (compose) (push) Failing after 1m48s
The fixed 172.30.53.0/24 subnet collided with an existing network on the
CI runner's Docker host. Seed data now uses 192.0.2.0/24 (RFC 5737), served
by Kea via relay; host ports are configurable and random in CI, and each
CI run uses its own compose project.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 19:41:56 +02:00
beug.k@beugsiud.deandClaude Opus 5.5 7819158009 fix(web): show build notice instead of 404 when index.html is missing
ci / Go (lint, test, vuln) (push) Successful in 1m58s
ci / Development environment (compose) (push) Failing after 14s
ci / Protobuf (push) Successful in 6s
ci / Web (lint, test, audit, build) (push) Successful in 32s
ci / Shell and licence headers (push) Successful in 6s
ci / Release build (dry run) (push) Successful in 1m12s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 19:35:37 +02:00
beug.k@beugsiud.deandClaude Opus 5.5 7b54a360ee docs: add README with development workflow and CI runner notes
ci / Go (lint, test, vuln) (push) Failing after 1m45s
ci / Protobuf (push) Successful in 6s
ci / Web (lint, test, audit, build) (push) Successful in 33s
ci / Shell and licence headers (push) Successful in 5s
ci / Development environment (compose) (push) Canceled after 0s
ci / Release build (dry run) (push) Canceled after 9s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 19:22:41 +02:00
beug.k@beugsiud.deandClaude Opus 5.5 2923ced7e9 build: exclude web/node_modules from Go package patterns
An npm dependency ships Go sources, which ./... picked up.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 19:22:41 +02:00
beug.k@beugsiud.deandClaude Opus 5.5 5603fb72ec ci: add Gitea Actions workflows for checks and tagged releases
Pinned actions by commit SHA, checksum-verified tool installation,
release upload via the Gitea API (idempotent, dry-run capable).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 19:18:51 +02:00
beug.k@beugsiud.deandClaude Opus 5.5 b2b9d56f19 build(dev): bake seed configs into images instead of bind mounts
Bind mounts break when the Docker daemon does not share the job's
filesystem, as with containerised CI runners.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 19:18:36 +02:00
beug.k@beugsiud.deandClaude Opus 5.5 a163b1a503 build(dev): add compose environment with PostgreSQL, BIND 9.20 and Kea 3.2
BIND uses the production layout (single include under ddi-suite/).
Smoke test checks queries, zone validity, refused recursion and Kea config.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 19:15:39 +02:00
beug.k@beugsiud.deandClaude Opus 5.5 cefeac41f8 build: add Makefile and reproducible release build script
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 19:13:17 +02:00
beug.k@beugsiud.deandClaude Opus 5.5 14f26a7b30 feat(web): scaffold React/TypeScript/Vite frontend
German default with English as second language (i18next), light/dark/system
theme, server health indicator. ESLint (strict type-checked), Prettier,
Vitest. Product name injected at build time.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 19:09:29 +02:00
beug.k@beugsiud.deandClaude Opus 5.5 137ebfc8d4 build: add golangci-lint config with licence boundary and SPDX header check
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 19:09:28 +02:00
beug.k@beugsiud.deandClaude Opus 5.5 850858642b feat(proto): define agent service v1 and generate Go code with buf
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 18:59:12 +02:00
beug.k@beugsiud.deandClaude Opus 5.5 14dde4bfe4 feat: add server, agent and shared code foundation
- internal/brand: central product, binary and path names (ldflags-overridable)
- internal/buildinfo, internal/logging (slog, secret redaction)
- server: env config, HTTP server with /healthz, /readyz, request IDs,
  access log, panic recovery, security headers, graceful shutdown
- web: embedded SPA handler with fallback page when UI is not built
- agent: ddi-agent-dns and ddi-agent-dhcp binaries on a shared core CLI

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 18:59:11 +02:00
beug.k@beugsiud.deandClaude Opus 5.5 45b087e30c chore(license): add license overview, Apache-2.0 and proprietary placeholder
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 18:48:24 +02:00
beug.k@beugsiud.deandClaude Opus 5.5 1d01eba65d docs: add project brief, architecture overview and ADRs 0001-0018
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 18:48:06 +02:00
beug.k@beugsiud.deandClaude Opus 5.5 1c6f73709e chore: add gitignore, gitattributes and editorconfig
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 18:48:00 +02:00
beug.k 013b0f257f README.md hinzugefügt 2026-10-12 16:24:54 +00:00