/** * C5 regression: CapabilityTrustLevel wrong enum values * Bug: used core/trusted/untrusted (3 values) instead of spec's 5-level hierarchy. * Fix: import CapabilityTrustLevel from contracts, use 5 values. */ import { describe, it, expect } from 'bun:test' import { CapabilityManifestValidator } from '../../src/capabilities/CapabilityManifestValidator.js' import { readFileSync } from 'fs' import { join } from 'path' describe('C5: CapabilityTrustLevel 5-level enum', () => { const src = readFileSync( join(import.meta.dir, '..', '..', 'src', 'capabilities', 'CapabilityManifestValidator.ts'), 'utf-8' ) it('imports CapabilityTrustLevel from contracts', () => { expect(src).toContain('CapabilityTrustLevel') expect(src).toContain('@aircoding/contracts') }) it('TRUST_LEVELS contains all 5 spec values', () => { const match = src.match(/TRUST_LEVELS[^=]*=\s*\[([^\]]+)\]/) expect(match).not.toBeNull() const levels = match![1] expect(levels).toContain('built_in') expect(levels).toContain('project_local') expect(levels).toContain('user_installed') expect(levels).toContain('verified_publisher') expect(levels).toContain('untrusted') }) it('TRUST_LEVELS does not contain legacy values', () => { const match = src.match(/TRUST_LEVELS[^=]*=\s*\[([^\]]+)\]/) expect(match).not.toBeNull() const levels = match![1] expect(levels).not.toContain("'core'") expect(levels).not.toContain("'trusted'") }) it('validate accepts manifest with trust_level=built_in', () => { const validator = new CapabilityManifestValidator() const result = validator.validate({ schema_version: 1, name: 'test-cap', version: '1.0.0', tools: [], trust_level: 'built_in', }) expect(result.valid).toBe(true) }) it('validate rejects manifest with trust_level=core', () => { const validator = new CapabilityManifestValidator() const result = validator.validate({ schema_version: 1, name: 'test-cap', version: '1.0.0', tools: [], trust_level: 'core', }) expect(result.valid).toBe(false) }) })