3427 Commits
Author SHA1 Message Date
Henry Zhang b45b0942a3 Merge pull request #218 from pnoker/tmp-align-develop
chore(repo): align develop with main
2026-09-18 22:35:31 +08:00
pnoker 0646298c2a chore(repo): align develop with main (ours merge)
develop's 11 unique commits are fully superseded by main (audited):
cve patch versions already present in main's lock, dep bumps
superseded or obsolete, GrcpR envelope removed. this ours-merge
records develop's history while taking main's tree wholesale.
2026-09-18 22:34:27 +08:00
pnoker 33741fb333 build(deps): bump dc3-cli js-yaml to 4.3.2
supersedes dependabot #217 (stale develop base); js-yaml 4.3.2 carries
the security fix, verified locally with the full cli suite
2026-09-18 22:20:16 +08:00
pnoker 9482cf0be4 build(deps): bump dc3-cli vitest to 4.1.11
supersedes dependabot #216/#213 which targeted the stale develop
branch; verified locally: 67/67 tests, build and lint clean
2026-09-18 22:19:06 +08:00
dependabot[bot] dc7256cb00 build(deps-dev): bump @playwright/test from 1.62.0 to 1.62.1 in /dc3-web (#184)
Bumps [@playwright/test](https://github.com/microsoft/playwright) from 1.62.0 to 1.62.1.
- [Release notes](https://github.com/microsoft/playwright/releases)
- [Commits](https://github.com/microsoft/playwright/compare/v1.62.0...v1.62.1)

---
updated-dependencies:
- dependency-name: "@playwright/test"
  dependency-version: 1.62.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-09-18 22:11:00 +08:00
dependabot[bot] cbb4508291 build(deps-dev): bump unplugin-auto-import in /dc3-web (#190)
Bumps [unplugin-auto-import](https://github.com/unplugin/unplugin-auto-import) from 21.0.0 to 21.1.0.
- [Release notes](https://github.com/unplugin/unplugin-auto-import/releases)
- [Commits](https://github.com/unplugin/unplugin-auto-import/compare/v21.0.0...v21.1.0)

---
updated-dependencies:
- dependency-name: unplugin-auto-import
  dependency-version: 21.1.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-09-18 22:10:55 +08:00
dependabot[bot] a923946e14 build(deps): bump js-base64 from 3.9.1 to 3.9.2 in /dc3-web (#188)
Bumps [js-base64](https://github.com/dankogai/js-base64) from 3.9.1 to 3.9.2.
- [Commits](https://github.com/dankogai/js-base64/compare/3.9.1...3.9.2)

---
updated-dependencies:
- dependency-name: js-base64
  dependency-version: 3.9.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-09-18 22:10:50 +08:00
dependabot[bot] cfe04d18cb build(deps): bump actions/download-artifact from 4.3.0 to 8.0.1 (#192)
Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 4.3.0 to 8.0.1.
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](https://github.com/actions/download-artifact/compare/d3f86a106a0bac45b974a628896c90dbdf5c8093...3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c)

---
updated-dependencies:
- dependency-name: actions/download-artifact
  dependency-version: 8.0.1
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-09-18 22:10:44 +08:00
dependabot[bot] acc788943c build(deps): bump actions/checkout from 7.0.0 to 7.0.1 (#191)
Bumps [actions/checkout](https://github.com/actions/checkout) from 7.0.0 to 7.0.1.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0...3d3c42e5aac5ba805825da76410c181273ba90b1)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: 7.0.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-09-18 22:10:39 +08:00
dependabot[bot] e92980bb2b build(deps): bump docker/build-push-action from 6.19.2 to 7.3.0 (#183)
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 6.19.2 to 7.3.0.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/10e90e3645eae34f1e60eeb005ba3a3d33f178e8...53b7df96c91f9c12dcc8a07bcb9ccacbed38856a)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-version: 7.3.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-09-18 22:10:34 +08:00
dependabot[bot] 3c49e6eb5f build(deps): bump docker/login-action from 4.4.0 to 4.6.0 (#180)
Bumps [docker/login-action](https://github.com/docker/login-action) from 4.4.0 to 4.6.0.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](https://github.com/docker/login-action/compare/af1e73f918a031802d376d3c8bbc3fe56130a9b0...dbcb813823bdd20940b903addbd779551569679f)

---
updated-dependencies:
- dependency-name: docker/login-action
  dependency-version: 4.6.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-09-18 22:10:29 +08:00
dependabot[bot] 8016d9ba9b build(deps): bump ossf/scorecard-action from 2.4.3 to 2.4.4 (#178)
Bumps [ossf/scorecard-action](https://github.com/ossf/scorecard-action) from 2.4.3 to 2.4.4.
- [Release notes](https://github.com/ossf/scorecard-action/releases)
- [Changelog](https://github.com/ossf/scorecard-action/blob/main/RELEASE.md)
- [Commits](https://github.com/ossf/scorecard-action/compare/4eaacf0543bb3f2c246792bd56e8cdeffafb205a...2d1146689b8cda280b9bc96326124645441f03bc)

---
updated-dependencies:
- dependency-name: ossf/scorecard-action
  dependency-version: 2.4.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-09-18 22:10:24 +08:00
pnoker 014f66ac19 build(deps): bump seven build plugins to latest
antrun 3.2.0, surefire 3.6.0, spotless 3.10.2, graalvm-native 1.1.13,
versions-plugin 2.22.0, compiler 3.16.0, jar 3.5.1

verified: clean package, dual quality gates, 5282/5282 unit tests
2026-09-18 21:32:31 +08:00
pnoker 5b74de8b6a build(deps): bump nine runtime dependencies to latest patch
bouncycastle 1.86, snakeyaml 2.7 (security-adjacent, first priority);
lombok 1.18.48, protobuf 4.36.2, grpc 1.84.0, springdoc 3.1.1,
swagger-core 2.2.55, freemarker 2.3.35, oshi 7.6.1

verified: clean package, 5282/5282 unit tests, 26/26 backend e2e
2026-09-18 21:28:43 +08:00
pnoker 21e0bae93c refactor(driver): collapse duplicated hex and checksum helpers into codecutil
five drivers carried private bytesToHex copies and three carried
hexToBytes variants, while mbus/dlt645 frames each implemented the same
sum checksum:

- codecutil.bytesToHex now uses hexformat uppercase, matching what all
  five private copies already emitted (zero display change)
- codecutil.hexToBytes added: whitespace-tolerant, blank-to-empty,
  mixed-case input
- codecutil.sumChecksum added as the shared mbus/dlt645 frame checksum
  and both frame classes delegate to it
- dlt645's inline hex loop replaced by codecutil.hexTobytes
- fins' private bcd copy kept deliberately: codecutil's bcd variant
  strips leading zeros, a different protocol semantic
2026-09-18 19:45:24 +08:00
pnoker c04d541bf6 chore(repo): normalize line endings for cross-platform clones
gitattributes only covered five file types; on a windows clone
(core.autocrlf=true) every other text file checks out as crlf, which
spotless's origin/main ratchet then treats as whole-repo changes and
the format gate fails everywhere. declare lf as the repository-wide
text convention with explicit crlf exceptions for bat/cmd/ps1, mark
the binary asset families, and renormalize (no content changes - the
tree was already lf)
2026-09-18 18:39:04 +08:00
pnoker 12dded2225 chore(repo): clear the remaining third-party boot warnings
- springdoc: declare api-docs/swagger-ui enabled explicitly; the boot
  reminder only fires on unset properties, so the intent-declaring
  values keep behavior identical and quiet all six services
- netty: add the macos dns native resolver to the gateway so the
  resolver does not log an error at boot on mac dev machines (the
  no-classifier jar bundles every arch and is inert on linux)
- hibernate-validator HV000271: spring-cloud-gateway 4.3.0 still uses
  container-level @Valid on its List properties. logger-level rules
  cannot suppress it because spring boot's logging re-init installs a
  second loggercontext that resets them, so drop the exact message
  with a turbo filter attached to every context loading this config;
  the class documents the upstream trigger for removal

live verification: five services plus gateway boot with zero warn and
zero error lines, virtual driver included; salt/login probe 200
2026-09-18 18:02:11 +08:00
pnoker b6726f7dc1 docs(agents): document the commit-msg hook now that it exists 2026-09-18 11:44:34 +08:00
pnoker cc1ac2886c chore(repo): enforce the conventional-commit subject line in husky
the husky shim routes commit-msg to .husky/commit-msg, which did not
exist - the documented subject-line rules (type whitelist, optional
scope, lowercase imperative english description of 10-100 chars) were
never machine-enforced; add the missing hook so bad subjects fail the
commit while merges/reverts/fixups pass through
2026-09-18 11:40:17 +08:00
pnoker 4eb9b48bef chore(repo): ignore runtime data dirs and sqlite wal files anywhere
services resolve dc3/data against the process cwd, so a driver started
from its module directory writes dc3-driver/<module>/dc3/data/... that
the root-anchored dc3/data/ pattern never matched; use **/dc3/data/
(any depth) and add the sqlite -shm/-wal/-journal sidecars that *.db
alone does not cover
2026-09-18 11:35:46 +08:00
pnoker 372d75b0c9 refactor(core): rename find/query/fetch methods to get per crud law
sweep every module to satisfy the new method-name rule, renaming
about 40 methods together with their interface, implementation, test
and cli call sites: store find() lookups become get(), analytics
queryLatest/queryHistory become getLatest/getHistory, sql helper
query() becomes spec()/sql(), jwks fetch() becomes load(), and the
cursor record component queryDigest becomes requestDigest

no behavior changes; full unit suite (5278 tests) and both quality
gates stay green
2026-09-18 09:53:51 +08:00
pnoker 38204bf7db build(quality): enforce unused imports, missing javadoc and crud verbs
upgrade checkstyle from a naming-only ruleset to a public-api gate:

- unusedimports: dead imports fail the build (zero violations existed
  at adoption)
- missingjavadoctype/method: public types and members must carry
  javadoc (scope public, @override exempt) - about 140 doc comments
  were added across records, filters, stores and gRPC servers
- method name format now rejects find/query/fetch prefixes, encoding
  the repo crud verb law (select stays reserved for mybatis mappers
  and is policed by review)
- suppressions: skip protobuf generated-sources, which only enter the
  scan in full-reactor builds
- spotless: ratchet checks to origin/main so legacy formatting debt
  stops blocking unrelated changes and CI formats only what changed
2026-09-18 09:50:41 +08:00
pnoker 83fe17bd28 fix(gateway): exclude load-balancer autoconfiguration noise
reactiveloadbalancer is intentionally absent from the gateway; loading
the no-load-balancer-client autoconfiguration only emits a
typenotpresent introspection warning at boot
2026-09-18 09:49:25 +08:00
pnoker f3a0d95650 fix(deploy): repair helm templates broken by the repo reformat
the repo-wide reformat mangled every go template directive in the
chart ({{ }} split to { { } }, {{- to {{ -, headers indented into the
yaml, ports list items misaligned under conditional blocks), leaving
the chart unrenderable since it landed; restore the directives, align
the conditional grpc/https port entries with the http entry, and drop
the stray blank lines - helm lint now passes and the full chart
renders 66 resources with both default and production values
2026-09-18 09:48:54 +08:00
pnoker 2d565f4a2d fix(deploy): require deployment-specific secrets everywhere
the historical defaults dc3.security.key.2026.io.github.pnoker and
io.github.pnoker.dc3 are public in this repository, so any deployment
that never overrode them shipped a known hmac signing key

- app/scale/swarm compose: fail fast (${var:?}) when dc3_security_key
  or auth_hmac_secret is unset; dev compose keeps a clearly-marked
  dev-only default
- helm production/default values and k8s secret.env ship empty values:
  pre/pro startup rejects blank and known-default hmac keys, forcing
  --set-string or an existingsecret; document the per-key failure mode
  honestly instead of overpromising startup rejection for both
- dev env files: rotate both keys to machine-generated dev-only values
  and add throwaway rs256 material for local oauth flows
- fix the chart maintainer email to a syntactically valid address
2026-09-18 09:48:54 +08:00
pnoker dc2164f46e fix(driver): repair boot, scheduling and registration regressions
a live-stack sweep of all 36 drivers surfaced five sdk-level defects
that left reads dead or the whole fleet unbootable:

- drop the empty spring.main stub in the shared driver profile; the
  boot 4.1 binder rejects null-valued keys and every driver died at
  startup with a bind exception
- rename the schedule enable flag to enable to match what every driver
  application.yml actually spells; with the old enabled key the read
  and custom quartz jobs were silently never scheduled
- treat proto3 zero-versions as unset when reconciling registration
  so a driver restart re-registers instead of failing the optimistic
  lock with 'driver version conflict'
- ignore the driver's own registration event that can be consumed
  before applymetadata finishes instead of logging an error
- initialize jdbc/serial connection maps eagerly: the registration
  event handler invalidates pools and nped on a lazy-null map
- ble: exclude the guava 18 pin dragged in by bluetooth-manager
- kafka: use the starter (boot 4 split autoconfigurations out of the
  bare jar) and read the compose-provided bootstrap variable
- lwm2m: pin californium to the 3.x api leshan m14 needs and
  configure an explicit coap endpoint
- mqtt: replace the orphaned spring-integration gateway with a paho
  publisher so the send path exists again
- boot sweep result: 36/36 drivers start, 0 errors
2026-09-18 09:48:19 +08:00
pnoker f970ebc4e8 fix(mcp): complete the client credentials token issuance chain
the client_credentials grant could never complete: the authorization
insert left principal_type null, state/code/refresh columns were
declared not null for a grant that never sets them, and the connection
grant type silently fell back to authorization_code because builders
match on the enum value, not the name

- stamp the service-account principal type on the cc authorization
- bind explicit nulls for grant-specific columns in insertauthorization
- make state_hash, authorization_code_hash and the refresh hashes
  nullable in seed ddl and resync the embedded schema fingerprint
2026-09-18 09:47:13 +08:00
pnoker febb4d8a9c fix(gateway): route only pre-auth token endpoints publicly
the /api/v3/auth/token/** wildcard also routed check and cancel
without the authentic filter, so those @PreAuthorize endpoints could
never establish a caller identity and always returned 401 (the logout
denylist never fired); enumerate salt, generate and change_password
explicitly and let the rest fall through to the authenticated route
2026-09-18 09:46:40 +08:00
pnoker 6ef14a9721 fix(auth): surface method security denials as 403 and tighten actuator
- method-level @PreAuthorize rejections propagated to the generic
  handler and returned http 500; add an access-denied mapping so
  permission failures read as 403 problem details
- actuator: only /actuator/health stays public, the rest require
  authentication in pre/pro (dev keeps prometheus open for local
  scraping); document why csrf is safely disabled
- centers: exclude the grpc oauth2 resource-server autoconfiguration
  per service (not in the shared web profile, which outranks the
  gateway's own excludes) and add the resource-server/jose deps so
  annotation introspection resolves cleanly at boot
2026-09-18 09:46:23 +08:00
pnoker 2438c281d4 fix(auth): restrict token cancel to the owning principal
token/cancel accepted any name+tenant pair, so a principal holding
token:delete could log out arbitrary users; compare the resolved
credential against the caller principal and deny otherwise
2026-09-18 09:45:39 +08:00
pnoker f9622a6941 fix(auth): block privilege escalation through bind grants
role_principal_bind:add alone could attach the wildcard administrator
role to any principal, and role_resource_bind:add could attach the
wildcard resource to a held role; require the caller to already hold
the granted role/resource code or the wildcard authority before the
insert proceeds (permission resolution goes through the same
authpermissionprovider used by @perm.can)
2026-09-18 09:45:39 +08:00
pnoker 7a8e09ca19 fix(auth): count change-password failures toward credential lockout
the public token/change_password endpoint verified the current
password but never recorded failed attempts, leaving it a brute-force
surface the login endpoint does not have; route wrong-password
attempts through recordFailed so the existing lockout applies
2026-09-18 09:45:39 +08:00
pnoker 23bf6d339f fix(api): drop parse-time tenant check from facade offset queries
the compact constructors rejected a null tenantId during jackson
deserialization, so any authenticated request body with filters failed
with http 400 before withTenant could inject the caller tenant; keep
only the page-bounds validation at parse time
2026-09-18 09:45:02 +08:00
pnoker 98055d3a79 fix(api): expose read-only tenantId on command and event vos
the command/event detail drawers render tenantId but the vos never
returned it; add a server-resolved read-only field (inbound binding
stays ignored by the existing mapstruct mapping) and refresh the
openapi-manager snapshot
2026-09-18 09:45:02 +08:00
pnoker e4523f993b fix(api): accept snake_case params on history lookup endpoints
- command_history/get_by_record_id now binds the declared wire name
  record_id instead of the raw parameter name recordId, matching the
  event_history twin and the frontend/CLI clients
- point_command_history/get_by_command_id likewise binds command_id,
  and the accepted statusUri built by point_command write now uses it
- openapi-data snapshot updated for both query params
- cli command history and web mock handlers aligned to the same names
- web mock registers command_history under the data service prefix
2026-09-18 09:44:36 +08:00
pnokerandClaude Code 11a8a8f775 docs(agents): split task-area conventions into dc3/agents guides
AGENTS.md stays lean with always-relevant rules and a task routing
table; the deep per-area conventions move to
dc3/agents/{backend,frontend,cli,testing}.md to be read on demand.
CONTRIBUTING.md documents the changelog-only commit rule and the
generated-CHANGE.md editing policy.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-07 19:33:30 +08:00
pnokerandClaude Code 3fb43c4239 feat(web): unify three-terminal control density and close audit defects
Land the v7 three-terminal UX decision: drop the width/pointer-based
44px touch enlargement so one 32px density holds across desktop,
tablet, and mobile, and rebuild entity pages on a responsive record
list (ResponsiveRecordList + EntityMobileCard + per-entity mobile
summaries). Tighten the nginx security headers (CSP frame-ancestors
'none', X-Frame-Options DENY) to match the static e2e server.

Complete the dc3-web audit remediation, including the remaining LOW
items from docs/dc3-web-low-defects-handoff.md: streaming-safe
message loads in the agentic store, mock menu reparent cycle
rejection, paged-list page clamping, fetch/axios mock request
normalization, per-table attribute catalogs, post-flush alarm
watchers, rowKey-agnostic delete state, localized card text
fallbacks, and e2e-server port fail-fast.

Gate: vue-tsc, eslint, vitest 687 passed, responsive e2e 64 passed.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-07 19:33:17 +08:00
pnoker 031deb4453 feat(web): adopt family login atmosphere and copyright footer
Replace the Particles canvas with LoginAtmosphere, the warped interactive
grid + logo-dot silhouette shared with the dc3.site family sites, and add
an AGPL copyright footer with the platform tagline. Drop the 48px grid
overlay from the login background so the atmosphere carries the scene.
2026-09-04 09:38:38 +08:00
pnokerandClaude Code 77b32e30db build(dependabot): target main for update PRs
develop is no longer the integration target (main is the only active
line). Route all four ecosystems to main so updates are proposed against
the active branch; the develop branch is kept as an archive.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-03 12:56:00 +08:00
pnokerandClaude Code b984580d4e docs(javadoc): backfill public API Javadoc
Backfill the one-line Javadoc required by check_documentation on public
top-level types and non-override public methods (1305 sites across 313
files), matching the existing single-line contract style: each doc states
the behaviour contract without @param/@return tags.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-03 12:55:54 +08:00
pnokerandClaude Code ea635f12fd docs(db): document the per-domain postgres modules
Add README files for the four dc3-db-postgres-* modules, state the
artifactId in the r2dbc module READMEs, list the new modules in the
dc3-db README, and document the CallTool RPC in dc3-api-auth.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-03 12:55:47 +08:00
pnokerandClaude Code 5aa0caeed1 fix(ci): skip multiline annotation arguments when validating type Javadoc
The type-level Javadoc check walked annotations line by line and stopped
inside multiline annotation arguments, reporting false negatives such as
AuthInitRunner. Reuse the bracket-aware _annotation_block_start helper so
Javadoc attached above a multiline annotation block is recognized.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-03 12:55:40 +08:00
pnokerandClaude Code b0a4c01e9c fix(db): point dc3-db-tck at the per-domain postgres stores
7fde11134 moved the R2dbc store adapters into per-domain postgres modules
but left the tck suite importing them from dc3-common, breaking test
compilation. Add the four module dependencies and update the imports.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-03 12:55:06 +08:00
pnoker 613e1726dc chore(db): remove postgres demo seed 2026-09-03 09:03:49 +08:00
pnoker 52260f7bd3 build(ci): inline codeql paths-ignore in workflow
The config file only carried two paths-ignore entries, which the init action accepts directly as inputs; folding them into codeql.yml removes the separate .github/codeql directory without behavior change.
2026-09-03 09:03:48 +08:00
pnoker ba6406bd60 feat(db): add mariadb and mysql dependency modules
Add Dockerfiles under dc3/dependencies for MariaDB and MySQL that layer on the dc3-mariadb-base/dc3-mysql-base images published by dc3-docker (2026.6), matching the dc3-postgres layering convention. Nothing is layered yet since DC3 runs on the PostgreSQL dialect; credentials, seeds, and entrypoint overrides land here when a MariaDB/MySQL profile is needed.
2026-09-03 09:03:47 +08:00
pnoker 2246b73f6a fix(web): drop https termination from nginx
Serve the dc3-web image over plain HTTP on port 80 only: remove the ssl_certificate/ssl_certificate_key directives, the 443 listeners and the HSTS header from default.conf, drop the 8443:443 mapping and the certificate COPY from the Dockerfile, and remove the acme.sh README. The retired dc3.site certificate is preserved as reference material at nginx/certs/ssl-certs.md.
2026-09-03 09:03:13 +08:00
pnoker 72e315ea96 style(db): normalize initdb formatting and order ddl before seeds
Join 1242 keyword-split statement lines (COMMENT/CREATE/ALTER/LOAD), move the dc3_identity_audit_log table section and the schema fingerprint INSERT so every script orders DDL before seed data, and drop one duplicated COMMENT ON COLUMN. Statement multiset verified identical apart from the intended dedup. The canonical fingerprint changes to e81e3562... and is synchronized via schema_fingerprint.py --sync into the embedded ddl_hash and all four distribution points; existing initialized databases require re-initialization (flag day).
2026-09-03 09:02:47 +08:00
pnoker 7fde111341 refactor(db): move r2dbc store adapters into per-domain postgres modules
Relocate all 64 R2dbc*Store implementations from dc3-common-{auth,manager,data,agentic} repositories into new dc3-db-postgres-{auth,manager,data,agentic} adapter modules (package io.github.pnoker.db.postgres.<domain>), each registered through its own AutoConfiguration. Reactive*Store ports and filter types stay in the business modules; services are untouched. Drops stale MyBatis wording from AGENTS.md and init runner javadoc.
2026-09-03 09:01:32 +08:00
pnoker 66aab58f20 build: standardize repository tooling and quality gates 2026-09-02 20:51:10 +08:00