QRun-IO/ci-policy: ci / fork-guard (push) Skipped
QRun-IO/ci-policy: ci / head-profile (push) Skipped
QRun-IO/ci-policy: ci / application-template-0 (push) Skipped
QRun-IO/ci-policy: ci / gradle-1 (push) Skipped
QRun-IO/ci-policy: ci / java-docker-3 (push) Skipped
QRun-IO/ci-policy: ci / java-docker-4 (push) Skipped
QRun-IO/ci-policy: ci / java-frontend-browser-5 (push) Skipped
QRun-IO/ci-policy: ci / java-maven-6 (push) Skipped
QRun-IO/ci-policy: ci / java-maven-7 (push) Skipped
QRun-IO/ci-policy: ci / node-8 (push) Skipped
QRun-IO/ci-policy: ci / node-9 (push) Skipped
QRun-IO/ci-policy: ci / node-10 (push) Skipped
QRun-IO/ci-policy: ci / node-playwright-11 (push) Skipped
QRun-IO/ci-policy: ci / repository-policy-12 (push) Skipped
QRun-IO/ci-policy: ci / source-config-13 (push) Skipped
QRun-IO/ci-policy: ci / source-config-14 (push) Skipped
QRun-IO/ci-policy: ci / android-0 (push) Skipped
QRun-IO/ci-policy: ci / original-business (push) Skipped
QRun-IO/ci-policy: ci / original-mcp (push) Skipped
QRun-IO/ci-policy: ci / original-voyage (push) Skipped
QRun-IO/ci-policy: ci / original-cli (push) Skipped
QRun-IO/ci-policy: ci / repository-policy (push) Skipped
QRun-IO/ci-policy: ci / java-core-2-head (push) Skipped
QRun-IO/ci-policy: ci / java-docker-3-head (push) Skipped
QRun-IO/ci-policy: ci / java-maven-6-head (push) Skipped
QRun-IO/ci-policy: ci / java-maven-7-head (push) Skipped
QRun-IO/ci-policy: ci / not-enrolled (push) Failing after 7s
QRun-IO/ci-policy: native / fork-deny (push) Skipped
QRun-IO/ci-policy: native / dotnet-0 (push) Skipped
QRun-IO/ci-policy: ci / ci-result (push) Failing after 6s
QRun-IO/ci-policy: native / native-result (push) Successful in 6s
Save the current implementation and README, status, and known-issue documentation at the user-requested stop. No completed release or deployment is claimed. Co-Authored-By: Claude <noreply@anthropic.com> Co-Authored-By: GPT-6 Codex <noreply@openai.com>
3.9 KiB
3.9 KiB
AGENTS.md
Guidance for coding agents working in this repository.
Project Overview
QBit Scripting (qbit-scripting): shared script projects, immutable strict-TypeScript builds, capability broker and record lifecycle hooks for QQQ. Current state and the production gate: docs/STATUS.md.
This QBit never executes script code and never compiles it in the JVM. Compilation and execution belong to an external, isolated worker behind WorkerProvider; with no qualified provider every operation fails closed.
Build Commands
./mvnw compile # always use the wrapper: machine Maven 3.10 cannot read the parent POM
./mvnw verify # Checkstyle (validate phase, tests included) + unit tests
Architecture
Entry point: ScriptingQBitProducer (QBitProducer, same style as qbit-printing) with ScriptingQBitConfig. Packages under com.kingsrook.qbits.scripting:
source-SourceFile,SourceSnapshot(hashed, immutable),GitCommitRef+ optionalGitSourceImporterinterface.build-BuildCoordinator(the only signer/verifier of artifacts),ArtifactSubmission,BuildOutcome.worker-WorkerProviderseam,WorkerMessages+WorkerProtocol(bounded JSON),UnconfiguredWorkerProvider.capability-CapabilityDeclaration,CapabilityBroker,RecordReader/QqqRecordReader.hooks-HookEvent,HookResult,ScriptHookCustomizer(aTableCustomizerInterface).service-ScriptingService(draft/check/test/publish/bind),ScriptExecutor,ScriptSourceRegistry,ScriptingStore,Actor.
Dependency rule: nothing imports document-generation, record-files, mobile or printing. Core only (qqq-backend-core).
Invariants
- Draft sources live in the existing core
script/scriptRevision/scriptRevisionFiletables; this QBit appends immutable revisions. Only publication advancesscript.currentScriptRevisionId, through reviewed core isolation authority in the same transaction; drafts never activate. No second registry. - Tables
scripting_*are readable withscripting.viewand writable only by the system session the service switches to after authorizing a namedActor(ScriptingTablePermission). - Lifecycle permissions are separate and never imply each other:
scripting.draft|check|test|publish|bind. - An artifact is accepted only if
BuildCoordinatorverified source hash, pinned toolchain, bundle hash and its HMAC attestation; this is re-checked before every execution. - A binding names a publication; later drafts/builds/publications never change what it runs.
- Native hooks support PRE_INSERT/PRE_UPDATE patches only in authorized early phases, PRE_DELETE veto, and read-only POST_INSERT/UPDATE/DELETE observations. Pre failures veto; post failures warn because the backend action already occurred. Never call a post callback "after commit". Native validation owns field constraints; do not duplicate it.
- No Nashorn, Node
vm, shell eval, embedded JS engine or regex "type checking" anywhere, and no tests that execute hostile code. Tests use the protocol-levelFakeWorker. - Worker messages carry no credentials, sessions or Java objects; capability tokens are opaque and scoped; reads are read-only.
Naming
- Tables: lowercase snake_case, prefixed
scripting_. Permissions:scripting.<action>.
Code Style
- 3-space indentation, opening braces on the next line,
return (x);. - Javadoc flower-box banners on every class, record, enum, constructor and method, including private ones and tests (Checkstyle enforces this and the license header).
- Explicit imports only, grouped java.*, third party, static; no wildcard imports.
- Fluent setters (
withX()) for configuration. No mutable global singletons.
Dependencies
- Java 21. Parent
com.kingsrook:qbit-build-parent:2.0.0, QQQ4.1.0-RC.21modules (public). NOTE: the source needs core APIs that RC.21 does not contain; seedocs/STATUS.md. Tests: JUnit 6.0.1.