Track owner approval packet in dashboard

This commit is contained in:
Affaan Mustafa
2026-05-19 10:23:34 -04:00
committed by Affaan Mustafa
parent 8148340ad1
commit c7d662c3c6
11 changed files with 123 additions and 30 deletions

View File

@@ -100,9 +100,21 @@ function seedRepo(rootDir, overrides = {}) {
'docs/releases/2.0.0-rc.1/preview-pack-manifest.md': [
'publication-readiness.md release-notes.md quickstart.md',
'release-name-plugin-publication-checklist-2026-05-18.md',
'owner-approval-packet-2026-05-19.md',
'`scripts/preview-pack-smoke.js`',
'npm run preview-pack:smoke'
].join('\n'),
'docs/releases/2.0.0-rc.1/owner-approval-packet-2026-05-19.md': [
'Owner Approval Packet',
'Decision Register',
'GitHub prerelease',
'npm `next` publish',
'Claude plugin tag',
'Video upload',
'Final URL Fill-In',
'Do Not Approve If',
'No outbound email, personal-account post, package publish, plugin tag, or billing announcement is authorized by this packet alone.'
].join('\n'),
'docs/releases/2.0.0-rc.1/release-notes.md': 'release notes',
'docs/releases/2.0.0-rc.1/x-thread.md': 'x thread',
'docs/releases/2.0.0-rc.1/linkedin-post.md': 'linkedin post',
@@ -178,7 +190,7 @@ function seedRepo(rootDir, overrides = {}) {
'Operator dashboard',
'GitGuardian',
'macOS/Ubuntu/Windows test matrix',
'2548 passed',
'2550 passed',
'Business baseline',
'$1,728/mo',
'$8,272/mo'
@@ -381,6 +393,12 @@ function runTests() {
&& item.evidence.includes('sponsor outbound')
&& item.gap === 'replace final URLs after publication gates, then get explicit approval before outbound or personal-account posts'
)));
assert.ok(report.requirements.some(item => (
item.id === 'owner-approval-packet'
&& item.status === 'current'
&& item.evidence.includes('release, package, plugin, video, billing, social, and outbound decisions')
&& item.gap === 'review owner approvals from the final release commit before any publication or outbound action'
)));
assert.ok(report.requirements.some(item => (
item.id === 'supply-chain-local-protection'
&& item.artifact.includes('AgentShield package-manager hardening')
@@ -403,6 +421,7 @@ function runTests() {
assert.ok(report.top_actions.some(item => item.id === 'naming-and-plugin-publication'));
assert.ok(report.top_actions.some(item => item.id === 'release-video-suite'));
assert.ok(report.top_actions.some(item => item.id === 'partner-sponsor-talks-pack'));
assert.ok(!report.top_actions.some(item => item.id === 'owner-approval-packet'));
assert.ok(!report.top_actions.some(item => item.id === 'ecc-preview-pack'));
assert.ok(!report.top_actions.some(item => item.id === 'hermes-specialized-skills'));
assert.ok(!report.top_actions.some(item => item.id === 'hypergrowth-command-center'));
@@ -424,7 +443,7 @@ function runTests() {
'Operator dashboard',
'GitGuardian',
'macOS/Ubuntu/Windows test matrix',
'2548 passed',
'2550 passed',
'Business baseline',
'$1,728/mo',
'$8,272/mo',
@@ -517,6 +536,32 @@ function runTests() {
}
})) passed++; else failed++;
if (test('owner approval packet fails closed when it is missing from the release pack', () => {
const rootDir = createTempDir('operator-dashboard-owner-packet-');
try {
seedRepo(rootDir, {
'docs/releases/2.0.0-rc.1/owner-approval-packet-2026-05-19.md': null,
'docs/releases/2.0.0-rc.1/preview-pack-manifest.md': [
'publication-readiness.md release-notes.md quickstart.md',
'release-name-plugin-publication-checklist-2026-05-18.md',
'`scripts/preview-pack-smoke.js`',
'npm run preview-pack:smoke'
].join('\n')
});
const report = buildSeededReport(rootDir);
const ownerPacket = report.requirements.find(item => item.id === 'owner-approval-packet');
assert.strictEqual(ownerPacket.status, 'not_complete');
assert.strictEqual(ownerPacket.evidence, 'owner approval packet is missing or incomplete');
assert.strictEqual(ownerPacket.gap, 'add the owner decision sheet before publication review');
assert.ok(report.top_actions.some(item => item.id === 'owner-approval-packet'));
} finally {
cleanup(rootDir);
}
})) passed++; else failed++;
if (test('AgentShield enterprise evidence covers export and policy promotion markers', () => {
const cases = [
{

View File

@@ -68,7 +68,7 @@ function seedRepo(rootDir, overrides = {}) {
'Operator dashboard',
'GitGuardian',
'macOS/Ubuntu/Windows test matrix',
'2548 passed'
'2550 passed'
].join('\n'),
'docs/releases/2.0.0-rc.1/operator-readiness-dashboard-2026-05-19.md': [
'This dashboard is generated by `npm run operator:dashboard`',