Defines comprehensive security mechanisms for plugin isolation, permission
management, and threat protection in the ObjectStack ecosystem.
Features:
Fine-grained permission system
Resource access control
Sandboxing and isolation
Runtime security monitoring
⛔ NOT security scanning. The scan-result family — KernelSecurityScanResult,
KernelSecurityVulnerability, PluginSecurityManifest.scanResults and its
sibling list .vulnerabilities — was retired under ADR-0049 enforce-or-remove
(#15932), after the runtime scanner that was its last type-only importer went
the same way. That scanner retirement was issue 14919 — a number DELETED from
the board and no longer resolving; its live record is PR #15930, which landed
the removal. Nothing on this platform scans a plugin.
[REMOVED] KernelSecurityPolicy.authentication.tokenExpiration was renamed to tokenExpirationSeconds in @objectstack/spec 17 — the unit of a duration-shaped number lives in the key name, not only in the describe prose, and the sibling rate-limit window on this same policy is already windowMs. Rename the key to tokenExpirationSeconds; the value (seconds) is unchanged.
[REMOVED] KernelSecurityPolicy.auditLog.retention was renamed to retentionDays in @objectstack/spec 17 — the unit of a duration-shaped number lives in the key name, not only in the describe prose. Rename the key to retentionDays; the value (days) is unchanged.
[REMOVED] PluginSecurityManifest.scanResults was removed in @objectstack/spec 17 (ADR-0049 enforce-or-remove) — nothing on this platform ever produced, stored or read a security scan result, so an authored array parsed cleanly and changed nothing. Delete the key. There is no replacement key: plugin security scanning is not a platform capability. What this manifest still enforces is permissions and sandbox; artifact provenance is answered by the plugin signature verifier, which tells you an artifact is the one its publisher signed and never that it is safe. Audit dependencies with a tool built for it (npm audit, pnpm audit, Dependabot, the GitHub Advisory Database, OSV).
vulnerabilities
never
optional
[REMOVED] PluginSecurityManifest.vulnerabilities was removed in @objectstack/spec 17 (ADR-0049 enforce-or-remove) — it was an array of KernelSecurityVulnerability, the other half of the scan-result family, and leaves with it: nothing ever wrote the list and nothing ever read it, so declaring a known vulnerability against a plugin warned nobody and blocked no install. Delete the key. There is no replacement key: plugin security scanning is not a platform capability. Publish vulnerability contact and disclosure terms through the surviving securityContact and vulnerabilityDisclosure blocks on this same manifest, and audit dependencies with a tool built for it (npm audit, pnpm audit, Dependabot, the GitHub Advisory Database, OSV).
[REMOVED] PluginSecurityManifest.vulnerabilityDisclosure.responseTime was renamed to responseTimeHours in @objectstack/spec 17 — the unit of a duration-shaped number lives in the key name, not only in the describe prose. This one is HOURS, while the same bare name on PluginHealthReport.metrics was milliseconds — which is the confusion the rule exists to remove. Rename the key to responseTimeHours; the value (hours) is unchanged.
[REMOVED] RuntimeConfig.resourceLimits.timeout was renamed to timeoutMs in @objectstack/spec 17 — the unit of a duration-shaped number lives in the key name, not only in the describe prose. Its unit (milliseconds) lived in a source JSDoc only and the published description read "Maximum execution time", naming no unit at all, so a reader of the reference page could not tell 60000 milliseconds from 60000 seconds. Rename the key to timeoutMs; the value (milliseconds) is unchanged.
[REMOVED] SandboxConfig.process.timeout was renamed to timeoutMs in @objectstack/spec 17 — the unit of a duration-shaped number lives in the key name, not only in the describe prose. Rename the key to timeoutMs; the value (milliseconds) is unchanged.