admin
8e0e2220c6
fix(capture): a11y evidence via ariaSnapshot (page.accessibility removed in playwright >=1.5x)
CI (SIAX Cloud) / security (push) Successful in 15s
CI (SIAX Cloud) / contracts (pull_request) Successful in 15s
CI (SIAX Cloud) / security (pull_request) Successful in 46s
CI (SIAX Cloud) / contracts (push) Successful in 48s
CI (SIAX Cloud) / quality (push) Successful in 49s
CI (SIAX Cloud) / quality (pull_request) Successful in 1m5s
2026-09-16 23:34:21 +02:00
admin
f6ff1396d8
feat(api): CL0UD capability probe + a11y/HAR evidence + worker scale toggle
...
CI (SIAX Cloud) / contracts (pull_request) Successful in 17s
CI (SIAX Cloud) / contracts (push) Successful in 17s
CI (SIAX Cloud) / quality (pull_request) Successful in 54s
CI (SIAX Cloud) / quality (push) Successful in 56s
CI (SIAX Cloud) / security (pull_request) Successful in 1m7s
CI (SIAX Cloud) / security (push) Successful in 1m5s
- cl0ud client: contract-first probe of documented GET /capabilities/:id,
status connected/denied/unavailable/disabled surfaced in /health;
CL0UD_REQUIRED=true = fail-closed 503; full policy-decisions gated on
CL0UD B-4/ADR-0031 (deliberately not simulated)
- capture depth: accessibility tree + condensed HAR as evidence kinds
(null = explicit evidence gap)
- CAPTURE_WORKER=on/off for separate-scale deployments
- 34/34 tests
2026-09-16 23:21:54 +02:00
admin
1e74c69228
fix(capture): run page.evaluate as plain string (tsx/esbuild __name helpers break in browser context)
CI (SIAX Cloud) / contracts (pull_request) Successful in 17s
CI (SIAX Cloud) / security (pull_request) Successful in 25s
CI (SIAX Cloud) / contracts (push) Successful in 16s
CI (SIAX Cloud) / security (push) Successful in 18s
CI (SIAX Cloud) / quality (pull_request) Successful in 50s
CI (SIAX Cloud) / quality (push) Successful in 53s
2026-09-16 23:01:26 +02:00
admin
12f6a65b80
feat(api): deterministic scan worker + AUD0 wire + tenant binding
...
CI (SIAX Cloud) / security (pull_request) Successful in 14s
CI (SIAX Cloud) / security (push) Successful in 14s
CI (SIAX Cloud) / contracts (pull_request) Successful in 15s
CI (SIAX Cloud) / contracts (push) Successful in 17s
CI (SIAX Cloud) / quality (push) Successful in 1m9s
CI (SIAX Cloud) / quality (pull_request) Successful in 1m10s
- scan worker: atomic claim (FOR UPDATE SKIP LOCKED), Playwright-core + system
chromium capture → typed EvidenceRecords (runtime-html/dom/computed-style/
stylesheet/asset/network-request/screenshot), confidence=measured
- AUD0 emitter (fire-and-forget, advisory): c0py.registry_created/.scan_created/
.scan_completed/.scan_failed, tenant_id = Zitadel resourceowner (org)
- tenant binding: resourceowner claim from introspection (deny-by-default 403),
migration 002 tenant_id on registries+scans, all queries tenant+owner scoped
- evidence gaps stay explicit (screenshot miss → no screenshot record)
- 30/30 tests, canonical validator OK
2026-09-16 22:53:55 +02:00
admin
9482a97795
feat(api): Postgres persistence for registries + scans (owner-scoped, fail-closed)
...
CI (SIAX Cloud) / security (push) Successful in 13s
CI (SIAX Cloud) / contracts (pull_request) Successful in 17s
CI (SIAX Cloud) / security (pull_request) Successful in 13s
CI (SIAX Cloud) / contracts (push) Successful in 16s
CI (SIAX Cloud) / quality (push) Successful in 52s
CI (SIAX Cloud) / quality (pull_request) Successful in 1m13s
- schema migration 001 (registries, scans; owner_sub = introspected subject)
- pg pool + services; scan ownership enforced in SQL (INSERT ... SELECT WHERE owner_sub)
- real handlers: 201/400/404/500, owner-scoped GET/POST, listScans registryId filter
- graceful shutdown closes pool; 7 new persistence tests (21/21)
2026-09-16 22:32:48 +02:00
admin
495050752a
feat(api): real Zitadel token introspection (fail-closed) + expected-audience enforcement
...
CI (SIAX Cloud) / security (push) Successful in 12s
CI (SIAX Cloud) / contracts (push) Successful in 30s
CI (SIAX Cloud) / quality (push) Successful in 1m33s
- preHandler: Bearer tokens are introspected against Zitadel (RFC 7662)
- any introspection failure (unreachable, non-200, bad JSON, inactive) = 401
- asserted aud must include ZITADEL_EXPECTED_AUDIENCE (project id); absent aud accepted per RFC 7662
- config: ZITADEL_INTROSPECTION_CLIENT_ID/SECRET + ZITADEL_EXPECTED_AUDIENCE (optional; Bearer-presence fallback logs warn in prod)
- 13 new tests (introspection fail-closed matrix + preHandler flow)
2026-09-16 22:06:46 +02:00
admin
db3509ab4f
fix: add fail-closed preHandler auth check
Deploy to Coolify / deploy (push) Failing after 2s
CI (SIAX Cloud) / security (push) Successful in 13s
CI (SIAX Cloud) / contracts (push) Successful in 16s
CI (SIAX Cloud) / quality (push) Successful in 49s
2026-09-16 15:13:13 +02:00
admin
e04cf8fbd3
c0py: initial scaffolding for website registry tool
...
Repo: sax3l/c0py (created on Gitea, code pushed)
Initial scaffolding includes:
- apps/api: Fastify API server (typecheck, build, test pass)
- apps/web: Next.js UI (build passes)
- packages/c0py-core: Crawler, registry assembler, analyzer (6 tests pass)
- packages/config: Zod-validated env loader
- packages/types: Shared TypeScript types
CI/CD: .gitea/workflows/ci.yml + deploy.yml
Dockerfile for Coolify deployment
mise.toml (toolchain contract)
lefthook.yml, renovate.json
docs/architecture/OVERVIEW.md, docs/PLATFORM.md
Platform setup required (see docs/PLATFORM.md):
1. Coolify app provision (c0py on server5/6)
2. Postgres database (dedicated, not shared)
3. Infisical secrets (DATABASE_URL, CL0UD, ZITADEL, AUD0, ST0RE, INF0, N0D)
4. DNS c0py.siax.io A-record
5. Zitadel OIDC project (Simon-decision)
Status: dev (repo live, code pushable, platform infra pending)
2026-09-16 13:33:45 +02:00
admin
e6cc719f37
c0py: initial scaffolding for website registry tool
CI (SIAX Cloud) / security (push) Successful in 12s
CI (SIAX Cloud) / contracts (push) Failing after 12s
CI (SIAX Cloud) / quality (push) Failing after 8s
Deploy to Coolify / deploy (push) Failing after 2s
2026-09-16 13:15:21 +02:00