Replace the hand-rolled HMAC in RevalidationHookRunner with core WebhookSigner (Standard Webhooks) from QQQ 4.1.0-RC.5, and send through core SafeHttpClient. New cdn_revalidation_hook fields: - signatureFormat: STANDARD_WEBHOOKS (the default for new rows) or LEGACY, which keeps X-Revalidate-Signature byte-for-byte. A null format, as on existing rows, stays LEGACY. - allowPlainHttp and internalAllowlist: explicit exceptions to the SSRF policy. Closes #15 (architecture review QRun-IO/qqq#1150, finding F11). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2.0 KiB
2.0 KiB
AGENTS.md
This file provides guidance to Codex when working with code in this repository.
Project Overview
QBit CDN: QQQ QBit: put any CDN in front of a QQQ application (portable cache headers, change-driven invalidation, edge statistics, Admin -> CDN app). Design: QRun-IO/qqq#1084 (docs/specs/2026-10-12-qbit-cdn-design.md). Implementation in progress.
Build Commands
./mvnw compile # Compile (always use the wrapper: Maven 3.10 cannot read the parent POM)
./mvnw test # Unit tests
./mvnw verify # Unit tests + JaCoCo gate (thresholds in pom.xml)
Architecture
Entry point: CdnQBitProducer implements QBitMetaDataProducer<CdnQBitConfig> in com.kingsrook.qbits.cdn. Component producers in this package (and below) are found by package scanning.
Naming (owner rule)
- Tables are lowercase snake_case prefixed with the full qbit name:
cdn_<name>. The QQQ table name and the backend (SQL) name are identical; possible-value sources take the table name. - Permissions use the full qbit name:
cdn.<action>(for examplecdn.view,cdn.admin). - Qbit data lives in standard, visible QQQ tables, secured by permissions and record security locks, never hidden.
- Processes run as table or record actions, never in the nav.
Code Style
- 3-space indentation, opening braces on the next line,
return (x);. - Javadoc flower-box comments (
/*****with**lines) on every class and method. - Fluent setters (
withX()). - Wrapper types (
Integer,Boolean) in config and entities.
Dependencies
- Java 21.
- Parent
com.kingsrook:qbit-build-parent:2.0.0(qqq 4.0.0). The default-activeqqq-snapshotprofile importsqqq-bom-pom:4.1.0-RC.5ahead of it, as in qbit-quick-search (ADR-0007). Remove that activation when the parent moves to 4.1. - Tests: see pom.xml.
Release
- CircleCI qqq-orb 0.6.8.
developpublishes SNAPSHOTs.- A
release/*branch publishes RCs (the orb bumps the version). - A
v*tag publishes the release.