TenantAtlas/apps/platform/.pnpm-store/v10/files/df/1eb98f9c7812215527cef5087c32780180776f41e23cf9701c40b09528ea393c5b76d82fbc026bd37585c49337fa15eac6e21d41dbcb4282e0bcdd22204e9b
ahmido 1fec9c6f9d
Some checks failed
Main Confidence / confidence (push) Failing after 45s
feat: compress governance operator outcomes (#253)
## Summary
- introduce surface-aware compressed governance outcomes and reuse the shared truth/explanation seams for operator-first summaries
- apply the compressed outcome hierarchy across baseline, evidence, review, review-pack, canonical review/evidence, and artifact-oriented operation-run surfaces
- expand spec 214 fixtures and Pest coverage, and fix tenant-panel route assertions by generating explicit tenant-panel URLs in the affected Filament tests

## Validation
- `cd apps/platform && ./vendor/bin/sail bin pint --dirty --format agent`
- focused governance compression suite from `specs/214-governance-outcome-compression/quickstart.md` passed (`68` tests, `445` assertions)
- `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/Filament/InventoryItemResourceTest.php tests/Feature/Filament/BackupSetUiEnforcementTest.php tests/Feature/Filament/RestoreRunUiEnforcementTest.php` passed (`18` tests, `81` assertions)

Co-authored-by: Ahmed Darrazi <ahmed.darrazi@live.de>
Reviewed-on: #253
2026-04-19 12:30:36 +00:00

55 lines
2.3 KiB
Plaintext

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.KillOthers = void 0;
const operators_1 = require("rxjs/operators");
const command_1 = require("../command");
const utils_1 = require("../utils");
/**
* Sends a SIGTERM signal to all commands when one of the commands exits with a matching condition.
*/
class KillOthers {
logger;
abortController;
conditions;
killSignal;
timeoutMs;
constructor({ logger, abortController, conditions, killSignal, timeoutMs, }) {
this.logger = logger;
this.abortController = abortController;
this.conditions = (0, utils_1.castArray)(conditions);
this.killSignal = killSignal;
this.timeoutMs = timeoutMs;
}
handle(commands) {
const conditions = this.conditions.filter((condition) => condition === 'failure' || condition === 'success');
if (!conditions.length) {
return { commands };
}
const closeStates = commands.map((command) => command.close.pipe((0, operators_1.map)(({ exitCode }) => exitCode === 0 ? 'success' : 'failure'), (0, operators_1.filter)((state) => conditions.includes(state))));
closeStates.forEach((closeState) => closeState.subscribe(() => {
this.abortController?.abort();
const killableCommands = commands.filter((command) => command_1.Command.canKill(command));
if (killableCommands.length) {
this.logger.logGlobalEvent(`Sending ${this.killSignal || 'SIGTERM'} to other processes..`);
killableCommands.forEach((command) => command.kill(this.killSignal));
this.maybeForceKill(killableCommands);
}
}));
return { commands };
}
maybeForceKill(commands) {
// No need to force kill when the signal already is SIGKILL.
if (!this.timeoutMs || this.killSignal === 'SIGKILL') {
return;
}
setTimeout(() => {
const killableCommands = commands.filter((command) => command_1.Command.canKill(command));
if (killableCommands) {
this.logger.logGlobalEvent(`Sending SIGKILL to ${killableCommands.length} processes..`);
killableCommands.forEach((command) => command.kill('SIGKILL'));
}
}, this.timeoutMs);
}
}
exports.KillOthers = KillOthers;