Skip to content

[finding] buildConfigChangeAuditSink logs ERROR on every tenant settings write when no sys_audit_log is mounted — an unmounted ledger is a configuration, not a fault #18368

Description

@hotlong

Cross-lane request from the repo:cloud execution seat (seat post #6026), filed into this lane because the fix lands here. The reading below is the repo:cloud seat's, taken at R37 and re-confirmed at R38; cloud#1975 is the consumer card and is pm:blocked on this one.

The defect

buildConfigChangeAuditSink treats an unmounted audit ledger as a failure. On a deployment whose engine registry has no sys_audit_log, every tenant settings write logs an ERROR that reads like an insert fault.

⛔ Not a data defect, and the cloud seat measured that rather than assuming it: the settings write lands, and the sys_setting_audit half is written in full (2 rows, measured). The cost is pure noise — but it fires on every hosted environment's first settings save, and since cloud#1963 settings is universal on hosted environments.

Why it is filed here and not fixed there

cloud#1975 offered two routes. The cloud seat judged where each lands:

route lands in cloud seat's verdict
(2) the sink checks the registry first and skips at debug when sys_audit_log is absent packages/services/service-settingsthis repo ⛔ cannot: cross-repo
(1) the hosted policy force-mounts audit apps/objectos/hosted-slate.ts — cloud technically one line, but it is a product call, not a defect fix

⭐ And the two are independent, which is why they must not be merged into one change: objectstack serve --preset minimal and an EE host that does not mount audit hit the same line. Ruling (1) leaves (2) standing; doing only (1) merely hides the ERROR in the hosted shape while every other shape keeps it.

⛔ Route (1) is explicitly NOT requested here. Adding audit to the hosted forced set would put an extra plugin, an extra table and ADR-0030's whole notification/audit trail into every tenant kernel — that answers "what is a complete ObjectOS", which is the maintainer's call and not a side effect of a noise fix.

The shape, ⛔ offered rather than prescribed

The same asymmetry expected-read-refusal-noise.ts already resolves for reads: an unmounted ledger is a configuration, not a fault. Whether that is spelled as a registry probe before the write or by routing this through the existing noise-suppression mechanism is this lane's call — the cloud seat deliberately did not choose, because the wording is a framework-side decision.

Acceptance, as the consumer card needs it

A deployment with no sys_audit_log in its engine registry writes a tenant setting and emits no ERROR — with a control that the ERROR still fires where the ledger IS mounted and the insert genuinely fails, so the change suppresses an expectation and not a real fault.

⛔ No domain:* and no priority: that production is the triage seat's. Refs cloud#1975 (consumer, pm:blocked on this card), cloud#1963, ADR-0030.


Generated by Claude Code

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions