Skip to content

feat(container): publish findings service and distribute workflow runner - #666

Merged
kmbroai merged 40 commits into
dev/kyleb/findings-apifrom
dev/kyleb/findings-ghcr
Aug 27, 2026
Merged

feat(container): publish findings service and distribute workflow runner#666
kmbroai merged 40 commits into
dev/kyleb/findings-apifrom
dev/kyleb/findings-ghcr

Conversation

@kmbroai

@kmbroai kmbroai commented Aug 27, 2026

Copy link
Copy Markdown
Collaborator

Summary

Distribute the findings service and a scanner-based workflow runner through the existing two-image container release process. The runner uses the scanner image and shared Dockerfile; the findings API remains a separately deployed service.

Stacked on #660. This update merges its consolidated SDK, workflow, checkpoint, dashboard, and canonical plugin changes into the container branch. The diff against #660 remains limited to container distribution, documentation, and integration tests. Neither PR is merged into its base.

Changes

  • Share the release pipeline across scanner and findings images, preserving version checks, native architecture builds, anonymous pulls, SBOMs, provenance, and immutable stable tags.
  • Findings consumer Compose pulls ghcr.io/openai/codex-security-findings; the existing image setting selects a version, digest, or local build.
  • Add compose.runner.yaml using the scanner image, durable state/artifact mounts, and existing security and authentication settings. Document connectivity to a separate findings service, persistent source paths, AppArmor, and lifecycle management.
  • Exercise CLI deduplication in disposable scanner containers across a Compose network. Verify workflow results and review checkpoints in the runner database, findings and groups in the service database, dashboard assets, and persistence across replacements. The service smoke uses the packaged default command.
  • Read host fixtures from plugins/codex-security; generate the installed plugin payload during packaging. Keep the TypeScript SQLite/runner fixtures and existing workbench database initialization.
  • No third image, duplicated workflow engine, new public CLI/API syntax, sandbox-policy change, or workflow/checkpoint implementation is added by this PR.

Testing

Local verification at a8be37a3:

  • Focused integration tests: 153 passed, 12 skipped, zero failures.
  • Full SDK suites passed with fixed seed 12345 and randomized seed 3716402526: each had 2,031 passed, 29 skipped, and zero failures.
  • Canonical plugin generation/source ownership, generated-model consistency, TypeScript checks including MCP, formatting, and git diff --check passed.
  • Docker smoke passed from a tracked source snapshot with no pre-generated host plugin: separate scanner runner, packaged service default command, independent SQLite state, dashboard assets and API, scoped candidates, screening/pair reviews, checkpoint reuse, missing-scan exit behavior, restart persistence, and clean shutdown.
  • The Docker-built npm archive passed package and installed-consumer checks: 381 entries, including 121 plugin files. Verified public imports, NodeNext types, CLI, credential locking, MCP initialization, bundled Codex, dashboard assets, and nested-worker startup without global Codex. Test fixtures are excluded.
  • Scoped lint passed for all three container workflows.
  • Hosted CI is tracked by the checks attached to the current PR commit; these results describe local verification.

Risk and rollout

  • Custom publication, group write-back, workflow resumption, review checkpoints, and the dashboard come from feat(typescript): persist findings and embeddings through the API #660. The SDK implementation, canonical plugin, SQL migrations, and unit tests match that base; durable mounts alone do not add those capabilities.
  • GHCR publication requires public packages, repository Actions write access, and the existing container approval gate. This update does not publish images or merge PRs. Local testing covers Linux amd64; native arm64 release validation remains in CI.
  • The service has no API authentication and its published host port remains loopback-only. Connect the runner over a private network or appropriately protected endpoint. Runner and service databases remain separate.
  • Preserve and back up persistent state before migrations. Stable image versions cannot be overwritten. Restricted hosts require the documented AppArmor configuration for native sandbox execution.
  • Tests use synthetic findings and provider responses; no live model reviews were run.

Public disclosure review

  • No customer, partner, prospect, or user identities, data, or identifying details are included.
  • No credentials, personal data, private source, scan findings, or nonpublic links or tickets are included.
  • I reviewed the branch name, title, description, commits, changes, comments, logs, screenshots, attachments, and links for public disclosure.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Aug 27, 2026

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
🔒 Security Review Completed 2026-08-27T22:45:40.765080Z a8be37a New commits
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@kmbroai
kmbroai changed the base branch from dev/kyleb/findings-deduplication to dev/kyleb/findings-writeback August 27, 2026 03:34
@kmbroai kmbroai changed the title feat(container): publish findings service image to GHCR feat(container): publish findings service and distribute workflow runner Aug 27, 2026
Base automatically changed from dev/kyleb/findings-writeback to dev/kyleb/findings-deduplication August 27, 2026 21:42
Base automatically changed from dev/kyleb/findings-deduplication to dev/kyleb/findings-api August 27, 2026 21:43
Keep the container distribution changes on top of the current findings API,
workflow, checkpoint, dashboard, and canonical plugin implementation.

Combine the smoke tests so workflow checkpoints stay in the separate runner
database while the service persists findings and duplicate groups.
@kmbroai
kmbroai merged commit 30a72b1 into dev/kyleb/findings-api Aug 27, 2026
43 of 52 checks passed
@kmbroai
kmbroai deleted the dev/kyleb/findings-ghcr branch August 27, 2026 22:56
kmbroai added a commit that referenced this pull request Aug 27, 2026
* feat(typescript): add findings service plumbing

* feat(typescript): persist findings and embeddings through the service API

* test(typescript): extract findings service Docker smoke runner

* refactor(test): translate findings storage fixture to TypeScript

* refactor(server): omit provisional bulk dedupe endpoint

* docs: use canonical plugin source in findings import example

* fix(plugin): support isolated findings helper execution

* test(plugin): include findings storage in schema expectations

* test(plugin): update findings migration snapshots

* test: read findings smoke fixture from canonical plugin source

* feat(typescript): deduplicate scans through SDK and CLI (#661)

* feat(typescript): deduplicate stored findings with Codex

* refactor(typescript): group server deduplication modules

* refactor(typescript): run scan deduplication in SDK and CLI

* feat(typescript): scope finding retrieval by repository

* refactor(typescript): trim redundant deduplication code

* fix(typescript): restore complete deduplication reviews

* refactor(typescript): trim deduplication setup and smoke bookkeeping

* perf(typescript): reduce deduplication review work

* test(plugin): include repository associations in schema expectations

* test(plugin): update repository migration snapshots

* test: read scan smoke manifest from canonical plugin source

* feat: publish custom findings and persist dedupe groups (#667)

* feat: publish custom findings and persist dedupe groups

* refactor(test): translate write-back smoke assertions to TypeScript

* test: align findings writeback with pair-only deduplication

* test(plugin): include dedupe groups in schema expectations

* test(plugin): update dedupe group migration snapshots

* feat: persist resumable local findings workflows (#673)

* feat: persist resumable local findings workflows

* fix: store workflow metadata in explicit SQLite columns

* test(plugin): align workflow helper and schema contracts

* feat: checkpoint dedupe reviews and replay group writes (#674)

* feat: checkpoint dedupe reviews and replay group writes

* fix: keep workflow source snapshots within the checkout

* fix: migrate dedupe checkpoint bindings to SQLite columns

* test: retain required canonical ID in translated checkpoint checks

* test: align checkpoint contracts with the updated findings stack

* feat(server): add read-only findings dashboard (#679)

* feat(server): add read-only findings dashboard

* fix(dashboard): show workflows first

* refactor(dashboard): simplify rendering and reuse workflow storage

* fix(dashboard): preserve filters and completed result semantics

* fix(dashboard): retain published repository identities in search

* fix(dashboard): include deep scan activity in freshness

* refactor(dashboard): use native selects and remove dropdown machinery

* refactor(dashboard): show only stored findings and groups

---------

Co-authored-by: kmbroai <272643392+kmbroai@users.noreply.github.com>

---------

Co-authored-by: kmbroai <272643392+kmbroai@users.noreply.github.com>

---------

Co-authored-by: kmbroai <272643392+kmbroai@users.noreply.github.com>

---------

Co-authored-by: Kyle Brown <272643392+kmbroai@users.noreply.github.com>

* feat(container): publish findings service and distribute workflow runner (#666)

* feat(typescript): deduplicate stored findings with Codex

* refactor(typescript): group server deduplication modules

* refactor(typescript): run scan deduplication in SDK and CLI

* feat(typescript): scope finding retrieval by repository

* refactor(typescript): trim redundant deduplication code

* fix(typescript): restore complete deduplication reviews

* feat(container): publish findings service image to GHCR

* feat: publish custom findings and persist dedupe groups

* refactor(container): trim findings release verification

* refactor(typescript): trim deduplication setup and smoke bookkeeping

* feat(container): add scanner workflow runner Compose

* refactor(test): translate write-back smoke assertions to TypeScript

* refactor(test): translate runner smoke fixtures to TypeScript

* perf(typescript): reduce deduplication review work

* test: align findings writeback with pair-only deduplication

* test(plugin): include repository associations in schema expectations

* test(plugin): include dedupe groups in schema expectations

* test(plugin): update repository migration snapshots

* test(plugin): update dedupe group migration snapshots

* test: read scan smoke manifest from canonical plugin source

---------

Co-authored-by: Kyle Brown <272643392+kmbroai@users.noreply.github.com>

---------

Co-authored-by: kmbroai <272643392+kmbroai@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant