From 567c583ab42e3613002aee49f69fb914e1a83636 Mon Sep 17 00:00:00 2001 From: hjqcan Date: Sun, 16 Aug 2026 21:43:47 -0400 Subject: [PATCH 1/4] Add pinned plugin security scan --- .github/workflows/plugin-security-scan.yml | 25 +++++++++++++++++++ .../orchestration-protocol-boundaries.test.ts | 19 ++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 .github/workflows/plugin-security-scan.yml diff --git a/.github/workflows/plugin-security-scan.yml b/.github/workflows/plugin-security-scan.yml new file mode 100644 index 00000000..e02bd362 --- /dev/null +++ b/.github/workflows/plugin-security-scan.yml @@ -0,0 +1,25 @@ +name: Plugin Security Scan + +on: + pull_request: + push: + branches: + - main + workflow_dispatch: + +permissions: + contents: read + +jobs: + scan: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 + with: + persist-credentials: false + + - uses: hashgraph-online/ai-plugin-scanner-action@55616c962cf86368423f7673b2ecdfdbe613d1af + with: + plugin_dir: "." + min_score: 80 + fail_on_severity: high diff --git a/tests/release/orchestration-protocol-boundaries.test.ts b/tests/release/orchestration-protocol-boundaries.test.ts index 3020fc8f..1729ce10 100644 --- a/tests/release/orchestration-protocol-boundaries.test.ts +++ b/tests/release/orchestration-protocol-boundaries.test.ts @@ -23,6 +23,25 @@ function collectBunRunTargets(content: string): string[] { } describe("orchestration and proof protocol boundaries", () => { + it("keeps the plugin scanner workflow read-only and source-pinned", async () => { + const workflow = await readFile( + join(REPOSITORY_ROOT, ".github/workflows/plugin-security-scan.yml"), + "utf8", + ); + + expect(workflow).toContain("permissions:\n contents: read"); + expect(workflow).toContain("persist-credentials: false"); + expect(workflow).toContain( + "hashgraph-online/ai-plugin-scanner-action@55616c962cf86368423f7673b2ecdfdbe613d1af", + ); + expect(workflow).toContain('plugin_dir: "."'); + expect(workflow).toContain("min_score: 80"); + expect(workflow).toContain("fail_on_severity: high"); + expect(workflow).not.toContain("online: true"); + expect(workflow).not.toContain("submission_enabled: true"); + expect(workflow).not.toContain("secrets."); + }); + it("fetches the history required by source-bound unit tests", async () => { const workflow = await readFile( join(REPOSITORY_ROOT, ".github/workflows/ci.yml"), From a0d97bc189332606aa73407c51413ea2b0ea3506 Mon Sep 17 00:00:00 2001 From: hjqcan Date: Sun, 16 Aug 2026 21:49:39 -0400 Subject: [PATCH 2/4] Expose plugin scanner findings --- .github/workflows/plugin-security-scan.yml | 1 + tests/release/orchestration-protocol-boundaries.test.ts | 1 + 2 files changed, 2 insertions(+) diff --git a/.github/workflows/plugin-security-scan.yml b/.github/workflows/plugin-security-scan.yml index e02bd362..5bdb349c 100644 --- a/.github/workflows/plugin-security-scan.yml +++ b/.github/workflows/plugin-security-scan.yml @@ -21,5 +21,6 @@ jobs: - uses: hashgraph-online/ai-plugin-scanner-action@55616c962cf86368423f7673b2ecdfdbe613d1af with: plugin_dir: "." + format: json min_score: 80 fail_on_severity: high diff --git a/tests/release/orchestration-protocol-boundaries.test.ts b/tests/release/orchestration-protocol-boundaries.test.ts index 1729ce10..dec82514 100644 --- a/tests/release/orchestration-protocol-boundaries.test.ts +++ b/tests/release/orchestration-protocol-boundaries.test.ts @@ -35,6 +35,7 @@ describe("orchestration and proof protocol boundaries", () => { "hashgraph-online/ai-plugin-scanner-action@55616c962cf86368423f7673b2ecdfdbe613d1af", ); expect(workflow).toContain('plugin_dir: "."'); + expect(workflow).toContain("format: json"); expect(workflow).toContain("min_score: 80"); expect(workflow).toContain("fail_on_severity: high"); expect(workflow).not.toContain("online: true"); From e035fb9d9a5895a4fe181a8f283084cc24617069 Mon Sep 17 00:00:00 2001 From: hjqcan Date: Fri, 21 Aug 2026 04:02:16 -0400 Subject: [PATCH 3/4] Update plugin scanner for native Kimi support --- .github/workflows/plugin-security-scan.yml | 2 +- tests/release/orchestration-protocol-boundaries.test.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/plugin-security-scan.yml b/.github/workflows/plugin-security-scan.yml index 5bdb349c..82bd2625 100644 --- a/.github/workflows/plugin-security-scan.yml +++ b/.github/workflows/plugin-security-scan.yml @@ -18,7 +18,7 @@ jobs: with: persist-credentials: false - - uses: hashgraph-online/ai-plugin-scanner-action@55616c962cf86368423f7673b2ecdfdbe613d1af + - uses: hashgraph-online/ai-plugin-scanner-action@432eebe0fb9212be97c8d15cb1da9668a91e7914 with: plugin_dir: "." format: json diff --git a/tests/release/orchestration-protocol-boundaries.test.ts b/tests/release/orchestration-protocol-boundaries.test.ts index dec82514..bc764ed9 100644 --- a/tests/release/orchestration-protocol-boundaries.test.ts +++ b/tests/release/orchestration-protocol-boundaries.test.ts @@ -32,7 +32,7 @@ describe("orchestration and proof protocol boundaries", () => { expect(workflow).toContain("permissions:\n contents: read"); expect(workflow).toContain("persist-credentials: false"); expect(workflow).toContain( - "hashgraph-online/ai-plugin-scanner-action@55616c962cf86368423f7673b2ecdfdbe613d1af", + "hashgraph-online/ai-plugin-scanner-action@432eebe0fb9212be97c8d15cb1da9668a91e7914", ); expect(workflow).toContain('plugin_dir: "."'); expect(workflow).toContain("format: json"); From 8b1fb7088fe10644f65c032961ce01181873167c Mon Sep 17 00:00:00 2001 From: hjqcan Date: Fri, 21 Aug 2026 04:05:13 -0400 Subject: [PATCH 4/4] Declare plugin scan mode explicitly --- .github/workflows/plugin-security-scan.yml | 1 + tests/release/orchestration-protocol-boundaries.test.ts | 1 + 2 files changed, 2 insertions(+) diff --git a/.github/workflows/plugin-security-scan.yml b/.github/workflows/plugin-security-scan.yml index 82bd2625..686ac2e9 100644 --- a/.github/workflows/plugin-security-scan.yml +++ b/.github/workflows/plugin-security-scan.yml @@ -21,6 +21,7 @@ jobs: - uses: hashgraph-online/ai-plugin-scanner-action@432eebe0fb9212be97c8d15cb1da9668a91e7914 with: plugin_dir: "." + mode: scan format: json min_score: 80 fail_on_severity: high diff --git a/tests/release/orchestration-protocol-boundaries.test.ts b/tests/release/orchestration-protocol-boundaries.test.ts index bc764ed9..5a157fe0 100644 --- a/tests/release/orchestration-protocol-boundaries.test.ts +++ b/tests/release/orchestration-protocol-boundaries.test.ts @@ -35,6 +35,7 @@ describe("orchestration and proof protocol boundaries", () => { "hashgraph-online/ai-plugin-scanner-action@432eebe0fb9212be97c8d15cb1da9668a91e7914", ); expect(workflow).toContain('plugin_dir: "."'); + expect(workflow).toContain("mode: scan"); expect(workflow).toContain("format: json"); expect(workflow).toContain("min_score: 80"); expect(workflow).toContain("fail_on_severity: high");