Release govoplan-campaign v0.1.28: stabilize saving, review and delivery recovery
Module Package Release / publish-packages (push) Successful in 12s

This commit is contained in:
2026-09-08 01:32:26 +02:00
parent 1b32427813
commit c51fc180fb
111 changed files with 6905 additions and 980 deletions
@@ -69,6 +69,20 @@ const attachmentPreview = fs.readFileSync(
path.join(sourceRoot, "features/campaigns/review/AttachmentLinkingPreview.tsx"),
"utf8",
);
const archivePolicyNotice = fs.readFileSync(
path.join(sourceRoot, "features/campaigns/components/CampaignArchiveEncryptionPolicyNotice.tsx"),
"utf8",
);
for (const page of ["AttachmentsDataPage.tsx", "GlobalSettingsPage.tsx"]) {
const value = fs.readFileSync(path.join(sourceRoot, "features/campaigns", page), "utf8");
assert.match(value, /<CampaignArchiveEncryptionPolicyNotice/, `${page} must make archive policy configuration discoverable`);
}
assert.match(archivePolicyNotice, /\/admin\?section=system-campaign-archive-encryption/, "Campaign must link to the actual system Legacy ZipCrypto setting");
assert.match(archivePolicyNotice, /\/admin\?section=tenant-campaign-archive-encryption/, "Campaign must expose the tenant ceiling as well as the system switch");
assert.match(archivePolicyNotice, /policyInstalled && hasScope\(auth, "admin:policies:read"\)/, "Policy admin actions stay conditional on module and permission availability");
assert.match(archivePolicyNotice, /campaigns:archive:use_legacy_zipcrypto/, "The dedicated weak-encryption permission stays explicit");
assert.match(archivePolicyNotice, /setPolicy\(UNAVAILABLE_ARCHIVE_POLICY\)/, "Reloading policy must fail closed while its current state is unknown");
assert.match(archivePolicyNotice, /setRefresh\(\(value\) => value \+ 1\)/, "Operators must be able to reload policy after an administrator changes it");
assert.ok(
jsonView.includes('DismissibleAlert tone="warning" dismissible={false}'),
"The full Campaign JSON projection must retain an explicit privacy warning",