Event names are local now, in the manifests and in the code
Every module named its events the way the old bus spelled a routing key — `module.<module>.<verb>`. Design 29 says a module names an event locally and the mesh works out where it lands, so all 37 were stale against a rule already decided. On the new bus that derives into a namespace belonging to a module called "module", so no cross-module subscription in the mesh matched anything: nothing failed, nothing reacted (novox/hq 04-ISSUES/127). 36 manifests converted, and 43 files of module code with them. The code mattered as much as the manifests: the runtime builds the subject from what `emit()` is handed, so a converted manifest with unconverted code would have had the permission and the subject disagree. Three things the new check found on the way: - `photos` emitted an event its manifest never declared, which the new bus refuses outright. Declared. - `showcase` waited for an event nothing emits, so its demo could never be triggered — only `showcase` may publish under its own name. It emits both halves now. - `distribution` declared an event named after a different module. It emits `image.pushed` under its own name. An event about a *role* belongs on the seat, where the name outlives whoever holds it, but the sdk has no way to publish on a seat yet, so that stays recorded rather than declared. The audit logger's "everything" pattern is `**` rather than the old bus's `#`.
This commit is contained in:
@@ -14,11 +14,11 @@ interface DatabaseEvent {
|
||||
user?: string;
|
||||
}
|
||||
|
||||
await on<DatabaseEvent>("module.postgres.database.provisioned", async (e) => {
|
||||
await on<DatabaseEvent>("database.provisioned", async (e) => {
|
||||
console.log(`[postgres] database provisioned for ${e.body.consumer} (db ${e.body.database})`);
|
||||
});
|
||||
|
||||
await on<DatabaseEvent>("module.postgres.database.deprovisioned", async (e) => {
|
||||
await on<DatabaseEvent>("database.deprovisioned", async (e) => {
|
||||
console.log(`[postgres] database deprovisioned for ${e.body.consumer} (db ${e.body.database})`);
|
||||
});
|
||||
|
||||
|
||||
@@ -17,12 +17,12 @@
|
||||
"container-runtime"
|
||||
],
|
||||
"emits": [
|
||||
"module.postgres.database.provisioned",
|
||||
"module.postgres.database.deprovisioned"
|
||||
"database.provisioned",
|
||||
"database.deprovisioned"
|
||||
],
|
||||
"consumes": [
|
||||
"module.postgres.database.provisioned",
|
||||
"module.postgres.database.deprovisioned"
|
||||
"postgres.database.provisioned",
|
||||
"postgres.database.deprovisioned"
|
||||
],
|
||||
"listens": [
|
||||
{
|
||||
|
||||
@@ -34,7 +34,7 @@ runProvisioner("postgres-database", {
|
||||
// Database and owning role share the consumer's login, so the consumer owns exactly its own.
|
||||
const database = p.as;
|
||||
await postgres.createDatabaseAndRole(database, p.as, p.password);
|
||||
await announce("module.postgres.database.provisioned", {
|
||||
await announce("database.provisioned", {
|
||||
consumer: p.consumer ?? "",
|
||||
database,
|
||||
user: p.as,
|
||||
@@ -43,7 +43,7 @@ runProvisioner("postgres-database", {
|
||||
|
||||
async remove(p: { as: string }): Promise<void> {
|
||||
await postgres.dropDatabaseAndRole(p.as, p.as);
|
||||
await announce("module.postgres.database.deprovisioned", { database: p.as });
|
||||
await announce("database.deprovisioned", { database: p.as });
|
||||
},
|
||||
// Asked every minute by the harness: whether the backend still holds this consumer exactly as
|
||||
// the mesh gave it, so a login lost behind the provisioner's back is made again (novox/hq issue 120).
|
||||
|
||||
Reference in New Issue
Block a user