diff --git a/src/fable5/external-project-review.test.ts b/src/fable5/external-project-review.test.ts index 1326564..6667be1 100644 --- a/src/fable5/external-project-review.test.ts +++ b/src/fable5/external-project-review.test.ts @@ -31,6 +31,14 @@ describe("external project review receipts", () => { expect(matt.risks).toContain("external skill prompts are prompt-injection inputs"); }); + it("records ECC as learn-only external harness research", () => { + const receipt = createSkillsRepoReviewReceipt("affaan-m/ECC", new Date("2026-07-01T00:00:00.000Z")); + + expect(receipt).toMatchObject({ repo: "affaan-m/ECC", license: "MIT", safeToVendor: false, decision: "learn-only", deployAttempted: false }); + expect(receipt.patternsLearned).toContain("agent harness optimization patterns"); + expect(receipt.risks).toContain("optimization claims need local receipts"); + }); + it("records deploy-gated permission posture without opening 8098", () => { const receipt = createPermissionPostureReceipt("deploy-gated", new Date("2026-07-01T00:00:00.000Z")); diff --git a/src/fable5/external-project-review.ts b/src/fable5/external-project-review.ts index 75a7838..efde38d 100644 --- a/src/fable5/external-project-review.ts +++ b/src/fable5/external-project-review.ts @@ -60,7 +60,7 @@ export function createOpenCovenReviewReceipt(now = new Date()): ExternalProjectR } -export function createSkillsRepoReviewReceipt(repo: "mattpocock/skills" | "AI-Builder-Club/skills", now = new Date()): ExternalProjectReviewReceipt { +export function createSkillsRepoReviewReceipt(repo: "mattpocock/skills" | "AI-Builder-Club/skills" | "affaan-m/ECC", now = new Date()): ExternalProjectReviewReceipt { const rows: Record> = { "mattpocock/skills": { url: "https://github.com/mattpocock/skills", @@ -82,6 +82,16 @@ export function createSkillsRepoReviewReceipt(repo: "mattpocock/skills" | "AI-Bu decision: "learn-only", policy: "learn-patterns-no-vendored-code", }, + "affaan-m/ECC": { + url: "https://github.com/affaan-m/ECC", + license: "MIT", + safeToVendor: false, + patternsLearned: ["agent harness optimization patterns", "skills and memory organization", "research-first development posture"], + adaptations: ["review harness ideas as advisory", "rewrite any useful pattern locally behind receipts", "keep Fable safety gates as authority"], + risks: ["external harness code is not local capability proof", "do not vendor or execute without review", "optimization claims need local receipts"], + decision: "learn-only", + policy: "learn-patterns-no-vendored-code", + }, }; return { schema: "fable.external_project.review.v1", createdAt: now.toISOString(), repo, ...rows[repo], deployAttempted: false }; }