Skip to content

fix(containers): bind provenance to pinned bases - #1203

Merged
seonghobae merged 35 commits into
developfrom
codex/docker-base-current
Aug 14, 2026
Merged

fix(containers): bind provenance to pinned bases#1203
seonghobae merged 35 commits into
developfrom
codex/docker-base-current

Conversation

@seonghobae

@seonghobae seonghobae commented Jul 31, 2026

Copy link
Copy Markdown
Contributor

Summary

Current exact candidate

The current tree contains no PR-specific finalizer workflow or repair script. It includes executable contracts for OCI metadata/base synchronization, Ollama multi-platform manifest resolution, backend/Strix Python security pins, and frontend generated-lock security pins.

Standards and claim boundary

Doctoring uses OCI Image Format 1.1.1, SLSA Build Provenance 1.2, and final NIST SSDF 1.1 as authoritative references in APA 7th form. This does not claim a SLSA level or certification solely from OCI annotations.

Verification boundary

All predecessor-head checks and reviews are historical after consolidation. The current exact head must pass the complete repository CI, container, dependency, security, coverage, and current-head review gates. Queued, predecessor-head, stale, author-only, or model-only evidence is not qualifying independent approval.

Merge gate

Merge only after every required exact-head check is terminal-success, all actionable review threads are resolved, a qualifying independent non-author approval exists where live organization policy requires it, and normal protected-branch rules accept the unchanged head without bypass.

Summary by CodeRabbit

  • Security

    • Updated pinned container base images to newer verified versions.
    • Added validation for image digests, architecture support, and OCI metadata to improve release integrity.
    • Strengthened checks for dependency and frontend package security pins.
  • Documentation

    • Added a container provenance contract describing image verification, multi-platform metadata, and release requirements.
  • Maintenance

    • Synchronized base-image metadata across application, frontend, connector, and Ollama containers.

@coderabbitai

coderabbitai Bot commented Jul 31, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: f9b8778d-ec3e-40a4-9c64-97ae7313f1be

📥 Commits

Reviewing files that changed from the base of the PR and between e2a5eb1 and a6cce6f.

📒 Files selected for processing (9)
  • .github/workflows/docker-publish.yml
  • Dockerfile
  • Dockerfile.ollama
  • backend/tests/test_container_dependency_pin_contract.py
  • backend/tests/test_release_governance.py
  • backend/tests/test_repo_hygiene.py
  • connector/Dockerfile
  • docs/operations/container-provenance-contract.md
  • frontend/Dockerfile
🚧 Files skipped from review as they are similar to previous changes (6)
  • Dockerfile.ollama
  • backend/tests/test_repo_hygiene.py
  • docs/operations/container-provenance-contract.md
  • backend/tests/test_container_dependency_pin_contract.py
  • Dockerfile
  • .github/workflows/docker-publish.yml

📝 Walkthrough

Walkthrough

The PR updates Docker base-image digests, derives OCI metadata from selected Dockerfiles, validates Ollama multi-platform manifests, adds governance and dependency-pin tests, and documents the container provenance contract.

Changes

Container provenance governance

Layer / File(s) Summary
Base image pins and provenance contract
Dockerfile, Dockerfile.ollama, frontend/Dockerfile, connector/Dockerfile, backend/tests/test_repo_hygiene.py, docs/operations/container-provenance-contract.md
Dockerfiles and hygiene checks use updated digest pins. The contract defines synchronized references, derived OCI metadata, manifest validation, dependency governance, and required checks.
Publish metadata derivation and validation
.github/workflows/docker-publish.yml
PR and release matrices select base Dockerfiles. Workflow steps derive tagged digest-pinned base metadata and validate Ollama amd64 and arm64 platforms.
Release and dependency governance enforcement
backend/tests/test_release_governance.py, backend/tests/test_container_dependency_pin_contract.py
Tests extract first FROM references, verify OCI metadata, synchronize shared image pins, assert workflow validation rules, and check required dependency and lockfile pins.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Merge Risk: ⚪ Minimal · up to a6cce

The PR updates pinned container bases and strengthens provenance and dependency-validation contracts; no actionable merge-blocking risk remains after normal exact-head checks and review.

Sequence Diagram(s)

sequenceDiagram
  participant GitHubActions
  participant Dockerfile
  participant DockerRegistry
  participant OCIMetadata
  GitHubActions->>Dockerfile: Read selected first FROM reference
  Dockerfile-->>GitHubActions: Return tagged digest-pinned image
  GitHubActions->>DockerRegistry: Resolve Ollama manifest platforms
  DockerRegistry-->>GitHubActions: Return linux/amd64 and linux/arm64
  GitHubActions->>OCIMetadata: Publish derived base name and digest
Loading
🚥 Pre-merge checks | ✅ 4
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the main container provenance change and its relationship to pinned base images.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/docker-base-current

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

github-actions Bot commented Jul 31, 2026

Copy link
Copy Markdown
Contributor

PR governance metadata gate is not ready for a6cce6f014afe2638d46600ccfd521128f44f640:

  • Review decision is CHANGES_REQUESTED; address requested changes before merge.

@seonghobae

Copy link
Copy Markdown
Contributor Author

Closing after Loop drain: permanently blocked — branch was updated onto develop for mergeability, which cleared prior APPROVED robot evidence; re-review (CodeRabbit/OpenCode) and/or central gate jobs (metadata-only gate evaluation, coverage-evidence) remained pending/stuck without a re-runnable workflow handle. Not force-merging (merge-gate policy). Re-open a focused PR when robot capacity is available. Related product security fixes that reimplemented cleanly remain on branch goal/carddav-path-traversal-decode (#1206) for relaunch.

@seonghobae seonghobae closed this Jul 31, 2026
@seonghobae seonghobae reopened this Jul 31, 2026
@seonghobae
seonghobae enabled auto-merge July 31, 2026 13:53

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Aug 3, 2026

Copy link
Copy Markdown
Contributor
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

coderabbitai[bot]
coderabbitai Bot previously requested changes Aug 3, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@frontend/src/components/calendar/CalendarSidebarRight.tsx`:
- Around line 83-85: Update the three calendar action buttons in
CalendarSidebarRight: add disabled:hover:bg-background to the 삭제 and 복사 buttons,
and disabled:hover:bg-primary to the 수정 button, preserving their existing
disabled behavior and styling.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 868bee63-752d-447c-a801-9875c8a11684

📥 Commits

Reviewing files that changed from the base of the PR and between efdf14a and 1be7bc3.

📒 Files selected for processing (2)
  • .jules/palette.md
  • frontend/src/components/calendar/CalendarSidebarRight.tsx

Comment thread frontend/src/components/calendar/CalendarSidebarRight.tsx
coderabbitai[bot]
coderabbitai Bot previously approved these changes Aug 3, 2026
@seonghobae
seonghobae dismissed coderabbitai[bot]’s stale review August 3, 2026 01:11

The merge-base changed after approval.

Copy link
Copy Markdown
Contributor Author

Resolved the disabled-hover review finding in 1c4fb0a: delete/copy retain bg-background, and edit retains bg-primary, while disabled.

coderabbitai[bot]
coderabbitai Bot previously approved these changes Aug 3, 2026
@seonghobae
seonghobae dismissed coderabbitai[bot]’s stale review August 3, 2026 01:16

The merge-base changed after approval.

coderabbitai[bot]
coderabbitai Bot previously approved these changes Aug 3, 2026
@seonghobae
seonghobae dismissed coderabbitai[bot]’s stale review August 3, 2026 01:55

The merge-base changed after approval.

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Aug 3, 2026

Copy link
Copy Markdown
Contributor
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Aug 3, 2026

Copy link
Copy Markdown
Contributor
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@seonghobae seonghobae left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Current-head maintenance review completed for pinned container bases, OCI provenance derivation, multi-architecture manifest validation, and governance tests. Refresh central review evidence after the required action suite completes for this exact head.

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

Please re-review current head 7e4943fe3b5018193cbd86eea79f591778af8c08. The disabled calendar-action finding is addressed and resolved; review the final container provenance and governance scope.

@coderabbitai

coderabbitai Bot commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

@seonghobae I will review the current head. I will focus on the final container provenance and governance changes.

✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@seonghobae
seonghobae marked this pull request as draft August 3, 2026 04:42
auto-merge was automatically disabled August 3, 2026 04:42

Pull request was converted to draft

@seonghobae
seonghobae marked this pull request as ready for review August 3, 2026 04:42

Copy link
Copy Markdown
Contributor Author

Current head 19b6304801c5f2b702683f1c841fab7fb0ff9279 is now exactly seven container-provenance files ahead of live develop; unrelated Palette/Search/Calendar files and the temporary repair workflow are absent from the live-base comparison. Required checks and current-head OpenCode/Strix review should now be refreshed.

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

Please perform a complete review of the current head b83429c3abaadc1a10a19713368fd41090e01acf. The branch is refreshed onto current develop; the final scope is limited to pinned container bases, OCI provenance derivation, multi-architecture manifest validation, release notes, and governance tests.

coderabbitai[bot]
coderabbitai Bot previously approved these changes Aug 7, 2026
coderabbitai[bot]
coderabbitai Bot previously approved these changes Aug 7, 2026

Copy link
Copy Markdown
Contributor Author

@opencode-agent review
@cwl-noema-review review
@coderabbitai full review

Final read-only exact-head review for 70fae9c4145ac3cff0f177a9cb82ec059f622aa1. The completed PR-local cleanup workflow has been removed, leaving the permanent eight-file provenance and pinned-base contract only. Validate OCI annotation derivation from the actual first FROM, exact digest synchronization, amd64/arm64 Ollama manifest evidence, permanent dependency pins, current-head Application CI/container/security evidence, and absence of branch writers. Submit a formal current-head verdict only; do not mutate or merge.

@coderabbitai

coderabbitai Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor
🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

repo='ContextualWisdomLab/naruon'
target='70fae9c4145ac3cff0f177a9cb82ec059f622aa1'

git cat-file -e "${target}^{commit}"
printf '=== target commit ===\n'
git show -s --format='target=%H%nparents=%P%nsubject=%s%ncommitter_date=%cI' "$target"
printf 'checked_out=%s\n' "$(git rev-parse HEAD)"

base_ref=''
for ref in origin/develop develop; do
  if git rev-parse --verify --quiet "$ref" >/dev/null; then
    base_ref="$ref"
    break
  fi
done
test -n "$base_ref"
merge_base="$(git merge-base "$base_ref" "$target")"
printf 'base_ref=%s\nmerge_base=%s\n' "$base_ref" "$merge_base"

printf '\n=== PR state and exact-head status ===\n'
gh pr view 1203 --repo "$repo" --json state,headRefOid,baseRefName,statusCheckRollup
gh api "repos/${repo}/commits/${target}/check-runs?per_page=100" --paginate \
  --jq '.check_runs[] | {name,status,conclusion,details_url,started_at,completed_at}' | sort

printf '\n=== PR scope at target ===\n'
git diff --name-status "$merge_base" "$target"

printf '\n=== changed workflow paths and writer patterns ===\n'
git diff --name-status "$merge_base" "$target" -- .github/workflows scripts .github
git ls-tree -r --name-only "$target" .github/workflows |
  while IFS= read -r path; do
    git show "${target}:${path}" |
      rg -n -i '(contents:[[:space:]]*write|pull-requests:[[:space:]]*write|issues:[[:space:]]*write|git[[:space:]]+push|gh[[:space:]]+(pr|api|issue).*(create|edit|merge)|finali[sz]er|repair)' &&
      printf '%s\n' "--- ${path}"
  done || true

printf '\n=== Dockerfile first FROM references ===\n'
for path in Dockerfile Dockerfile.ollama frontend/Dockerfile connector/Dockerfile; do
  printf '%s\n' "--- $path"
  git show "${target}:${path}" | grep -nEm1 '^[[:space:]]*FROM[[:space:]]+' || true
done

printf '\n=== Docker publish provenance and manifest controls ===\n'
git show "${target}:.github/workflows/docker-publish.yml" |
  rg -n -C 9 '(base_dockerfile|base_digest|base_name|Dockerfile\.ollama|linux/amd64|linux/arm64|first FROM|manifest|inspect)' || true

printf '\n=== governance test outlines ===\n'
git show "${target}:backend/tests/test_release_governance.py" > /tmp/test_release_governance.py
git show "${target}:backend/tests/test_container_dependency_pin_contract.py" > /tmp/test_container_dependency_pin_contract.py
ast-grep outline /tmp/test_release_governance.py --items all --type function
ast-grep outline /tmp/test_container_dependency_pin_contract.py --items all --type function

printf '\n=== container and dependency governance assertions ===\n'
rg -n -C 5 \
  '(first_dockerfile_base_reference|assert_oci_metadata_matches_first_base|container_base|cryptography|protobuf|postcss|jsdom|brace-expansion|undici|pnpm-workspace|requirements-hashes)' \
  /tmp/test_release_governance.py /tmp/test_container_dependency_pin_contract.py

printf '\n=== governed dependency records ===\n'
for path in \
  backend/requirements.txt backend/requirements-hashes.txt \
  requirements-strix-ci.txt requirements-strix-ci-hashes.txt \
  frontend/package.json frontend/pnpm-workspace.yaml frontend/pnpm-lock.yaml
do
  printf '%s\n' "--- $path"
  git show "${target}:${path}" |
    rg -n -C 2 '(cryptography|protobuf|postcss|jsdom|brace-expansion|undici)' || true
done

printf '\n=== provenance documentation references ===\n'
git show "${target}:docs/operations/container-provenance-contract.md" | tail -n 32

printf '\n=== failed or incomplete exact-head run detail ===\n'
gh run list --repo "$repo" --commit "$target" --limit 100 \
  --json databaseId,workflowName,name,headSha,status,conclusion,url \
  | jq -r '.[] | select(.status != "completed" or (.conclusion != "success" and .conclusion != "skipped" and .conclusion != "neutral")) | [.databaseId,.workflowName,.name,.headSha,.status,(.conclusion // "null"),.url] | `@tsv`' \
  || true

Length of output: 72935


🏁 Script executed:

#!/bin/bash
set -euo pipefail

repo='ContextualWisdomLab/naruon'
target='70fae9c4145ac3cff0f177a9cb82ec059f622aa1'
run_id='31167943575'
job_id='92833042864'

printf '=== failed Application CI job ===\n'
gh run view "$run_id" --repo "$repo" \
  --json databaseId,headSha,status,conclusion,event,url,jobs \
  | jq '{databaseId,headSha,status,conclusion,event,url,jobs:[.jobs[]|{databaseId,name,status,conclusion,startedAt,completedAt,url,steps:[.steps[]|{name,status,conclusion,number}]}]}'

printf '\n=== failed Application CI log ===\n'
gh run view "$run_id" --repo "$repo" --job "$job_id" --log-failed || true

printf '\n=== metadata-only gate details ===\n'
gh api "repos/${repo}/check-runs/92833010841" \
  --jq '{name,head_sha,status,conclusion,details_url,output}' || true

printf '\n=== target OCI governance assertions ===\n'
git show "${target}:backend/tests/test_release_governance.py" | sed -n '40,182p'

printf '\n=== target dependency contract ===\n'
git show "${target}:backend/tests/test_container_dependency_pin_contract.py" | sed -n '80,190p'

printf '\n=== Dockerfile OCI argument declarations ===\n'
for path in Dockerfile frontend/Dockerfile; do
  printf '%s\n' "--- $path"
  git show "${target}:${path}" |
    rg -n -C 2 '(OCI_IMAGE_BASE_DIGEST|OCI_IMAGE_BASE_NAME|^FROM )' || true
done

printf '\n=== exact-head incomplete check state ===\n'
gh api "repos/${repo}/commits/${target}/check-runs?per_page=100" --paginate \
  --jq '.check_runs[] | select(.status != "completed") | {name,status,details_url,started_at}' | sort

Length of output: 37367


@seonghobae I cannot approve exact head 70fae9c4145ac3cff0f177a9cb82ec059f622aa1.

The container provenance implementation is coherent:

  • Dockerfile and connector/Dockerfile use the same pinned Python 3.14 digest.
  • Dockerfile and frontend/Dockerfile use the same pinned Node 26 digest.
  • Dockerfile.ollama uses an exact Ollama digest.
  • .github/workflows/docker-publish.yml reads the actual first FROM from the selected base_dockerfile.
  • The workflow derives base_digest and normalized base_name from that reference.
  • The workflow rejects an Ollama manifest without linux/amd64 and linux/arm64.
  • The dependency contract checks the backend and Strix manifests and hash locks, plus the frontend package and pnpm lock.
  • The PR changes only the intended eight-file provenance scope.
  • The PR does not add a branch-writing workflow. The existing write permissions are in unchanged .github/workflows/pr-governance.yml.

However, exact-head Application CI failed. The failure is reproducible from the GitHub log. backend/tests/test_release_governance.py contains three assertions that do not match the workflow-derived provenance design:

  1. assert_oci_metadata_matches_first_base() requires Dockerfile defaults such as:

    ARG OCI_IMAGE_BASE_DIGEST="<first-FROM digest>"

    The Dockerfiles now correctly declare OCI_IMAGE_BASE_DIGEST and OCI_IMAGE_BASE_NAME without defaults. The workflow derives and supplies the values. The test must validate the workflow derivation instead of requiring duplicated Dockerfile constants.

  2. test_container_images_use_pinned_node_runtimes() requires docker.io/library/node:26-slim text in frontend/Dockerfile.

  3. test_backend_images_use_python_314_runtime() requires docker.io/library/python:3.14-slim text in Dockerfile.

The Dockerfiles correctly use short Docker Hub references. The workflow normalizes those references to docker.io/library/... for org.opencontainers.image.base.name. Update these assertions to validate this workflow behavior. Do not add duplicate fully qualified image references or fixed base-metadata defaults to the Dockerfiles.

The failed check is on the requested commit:

  • backend (Python 3.14): failure.
  • metadata-only gate evaluation: failure because the backend check failed. It also reports that the branch is behind develop.
  • strix and all three image-validation checks remain in_progress.

A successful exact-head backend rerun, completed image validation, completed Strix result, and a passing metadata gate are required before approval.

⚠️ Action not completed

Review rate limited.


Your included review limit is currently reached under our Fair Usage Limits Policy. This review may still proceed through usage-based billing if eligible. Your next included review will be available in 28 minutes.

Copy link
Copy Markdown
Contributor Author

@opencode-agent review
@cwl-noema-review review
@coderabbitai full review

Final read-only exact-head review for b694980c9af59eee919e22b114329d376a1b2baa. Application CI, multi-architecture container build, dependency review, Bandit, Semgrep, and Security Scan are all complete and successful; every inline thread is resolved and all temporary writer workflows are absent. Validate that OCI base digest/name defaults exactly match each Dockerfile's first pinned FROM, release publication still derives and overrides those values, Python/Node/Ollama manifests retain exact architecture evidence, dependency-pin contracts are structurally enforced, and the permanent eight-file scope contains no branch writer. Submit a formal current-head verdict only; do not mutate or merge.

@coderabbitai

coderabbitai Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor
🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

repo='ContextualWisdomLab/naruon'
target='b694980c9af59eee919e22b114329d376a1b2baa'

git cat-file -e "${target}^{commit}"
printf '=== target ===\n'
git show -s --format='commit=%H%nparents=%P%nsubject=%s%ncommitter_date=%cI' "$target"
printf 'checked_out=%s\n' "$(git rev-parse HEAD)"

base_ref=''
for ref in origin/develop develop; do
  if git rev-parse --verify --quiet "$ref" >/dev/null; then
    base_ref="$ref"
    break
  fi
done
test -n "$base_ref"
merge_base="$(git merge-base "$base_ref" "$target")"
printf 'base_ref=%s\nmerge_base=%s\n' "$base_ref" "$merge_base"

printf '\n=== PR state and target check runs ===\n'
gh pr view 1203 --repo "$repo" --json state,headRefOid,baseRefName,statusCheckRollup
gh api "repos/${repo}/commits/${target}/check-runs?per_page=100" --paginate \
  --jq '.check_runs[] | {name,status,conclusion,details_url,started_at,completed_at}' | sort

printf '\n=== PR scope ===\n'
git diff --name-status "$merge_base" "$target"

printf '\n=== Dockerfile first FROM and OCI defaults ===\n'
for path in Dockerfile Dockerfile.ollama frontend/Dockerfile connector/Dockerfile; do
  printf '%s\n' "--- $path"
  git show "${target}:${path}" |
    rg -n -C 2 '^[[:space:]]*FROM[[:space:]]+|OCI_IMAGE_BASE_(DIGEST|NAME)' || true
done

printf '\n=== publish workflow provenance, override, and Ollama platform controls ===\n'
git show "${target}:.github/workflows/docker-publish.yml" |
  rg -n -C 10 '(base_dockerfile|base_digest|base_name|OCI_IMAGE_BASE_(DIGEST|NAME)|first FROM|Dockerfile\.ollama|manifest|linux/amd64|linux/arm64|build-arg)' || true

printf '\n=== governance test structure ===\n'
git show "${target}:backend/tests/test_release_governance.py" > /tmp/test_release_governance.py
git show "${target}:backend/tests/test_container_dependency_pin_contract.py" > /tmp/test_container_dependency_pin_contract.py
ast-grep outline /tmp/test_release_governance.py --items all --type function
ast-grep outline /tmp/test_container_dependency_pin_contract.py --items all --type function
rg -n -C 5 '(first_dockerfile_base_reference|assert_oci_metadata_matches_first_base|cryptography|protobuf|postcss|jsdom|brace-expansion|undici|pnpm-workspace|requirements-hashes)' \
  /tmp/test_release_governance.py /tmp/test_container_dependency_pin_contract.py

printf '\n=== governed dependency artifacts ===\n'
for path in \
  backend/requirements.txt backend/requirements-hashes.txt \
  requirements-strix-ci.txt requirements-strix-ci-hashes.txt \
  frontend/package.json frontend/pnpm-workspace.yaml frontend/pnpm-lock.yaml
do
  printf '%s\n' "--- $path"
  git show "${target}:${path}" |
    rg -n -C 2 '(cryptography|protobuf|postcss|jsdom|brace-expansion|undici)' || true
done

printf '\n=== changed workflow paths and writer patterns ===\n'
git diff --name-status "$merge_base" "$target" -- .github/workflows scripts .github
git ls-tree -r --name-only "$target" .github/workflows |
  while IFS= read -r path; do
    git show "${target}:${path}" |
      rg -q -i '(contents:[[:space:]]*write|pull-requests:[[:space:]]*write|issues:[[:space:]]*write|git[[:space:]]+push|gh[[:space:]]+(pr|api|issue).*(create|edit|merge)|finali[sz]er|repair)' &&
      printf '%s\n' "$path"
  done || true

printf '\n=== provenance documentation references ===\n'
git show "${target}:docs/operations/container-provenance-contract.md" | tail -n 36

Length of output: 74237


@seonghobae I cannot approve exact head b694980c9af59eee919e22b114329d376a1b2baa.

One dependency-governance gap remains. backend/tests/test_container_dependency_pin_contract.py parses frontend/package.json and frontend/pnpm-lock.yaml, but it does not read frontend/pnpm-workspace.yaml. The workspace file defines the governed brace-expansion, postcss, and undici overrides. A change to those workspace overrides can therefore pass the regression contract.

Parse frontend/pnpm-workspace.yaml and assert that its governed override values equal the expected values and the pnpm-lock.yaml overrides. This will enforce the frontend source and generated-lock contract together.

The container provenance implementation is otherwise consistent:

  • Dockerfile and frontend/Dockerfile OCI base defaults match their respective first pinned FROM references.
  • Validation and release publication derive and override base metadata from matrix.base_dockerfile.
  • The workflow normalizes Docker Hub short names before it emits org.opencontainers.image.base.name.
  • PR validation checks the pinned Ollama manifest for linux/amd64 and linux/arm64.
  • The PR changes the requested eight-file scope.
  • The PR adds no branch-writing workflow.

The exact-head checks are not all complete. strix and metadata-only gate evaluation are still in_progress for this commit. Successful results are required before approval.

⚠️ Action not completed

Review rate limited.


Your included review limit is currently reached under our Fair Usage Limits Policy. This review may still proceed through usage-based billing if eligible. Your next included review will be available in 2 minutes.

Copy link
Copy Markdown
Contributor Author

/oc

Reconcile this branch with current protected develop without changing the bounded provenance feature scope. Merge or rebase the latest develop into codex/docker-base-current, resolve only genuine overlap, and preserve the exact current Python/Node/Ollama pins, first-FROM-derived OCI base digest/name publication, multi-architecture manifest validation, permanent governance tests, and absence of temporary branch writers.

After reconciliation, run Application CI, dependency review, Bandit, Semgrep, Security Scan, amd64/arm64 container build, provenance/annotation assertions, and git diff --check. Update the PR body to the new exact head. Keep Ready only when the reconciled workflow-free head is fully green; then request fresh exact-head OpenCode, Noema, and CodeRabbit review. Do not bypass branch protection or reintroduce superseded dependency changes.

@opencode-agent opencode-agent Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

OpenCode cannot approve yet because required coverage evidence did not pass.

Review outcome

1. HIGH .github/workflows/opencode-review.yml:1 - Coverage evidence did not prove required test/docstring evidence

  • Problem: The required coverage-evidence job result was failure, so OpenCode cannot establish approval sufficiency for this head.

  • Root cause: Automated approval is only valid when the same-head coverage-evidence job proves supported repository test suites passed and configured docstring gates passed or were advisory, or reports not applicable because no supported source files or package manifests exist. Missing, failed, skipped, unavailable, or unsupported-tooling test evidence is a blocker.

  • Fix: Install or configure the repository test/docstring evidence tooling when source files or package manifests exist, rerun the current-head coverage-evidence job, and approve only after it reports success with required evidence or explicit no-source not-applicable evidence.

  • Regression test: Keep the approval branch checking needs.coverage-evidence.result == success before posting APPROVE, and publish REQUEST_CHANGES when coverage-evidence blocker states such as cancelled, skipped, failed, unsupported-tooling, or below-100 evidence are present.

  • Result: REQUEST_CHANGES

  • Reason: coverage-evidence result was failure, so required test/docstring evidence was not proven for current head cb3946c209a7c99f030e775d9219a43b6c74fad6.

  • Head SHA: cb3946c209a7c99f030e775d9219a43b6c74fad6

  • Workflow run: 31183597980

  • Workflow attempt: 1

Coverage evidence

Coverage evidence job did not run or did not publish coverage evidence.

Changed-File Evidence Map

flowchart LR
  PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
  Evidence --> S1["Workflow: docker-publish.yml"]
  S1 --> I1["GitHub Actions review job"]
  I1 --> R1["Review risk: Workflow: docker-publish.yml"]
  R1 --> V1["actionlint plus required checks"]
  Evidence --> S2["Changed file (2 files)"]
  S2 --> I2["repository behavior"]
  I2 --> R2["Review risk: Changed file (2 files)"]
  R2 --> V2["required checks"]
  Evidence --> S3["Backend (3 files)"]
  S3 --> I3["API and service runtime"]
  I3 --> R3["Review risk: Backend (3 files)"]
  R3 --> V3["backend tests"]
  Evidence --> S4["Docs: container-provenance-contract.md"]
  S4 --> I4["operator or user guidance"]
  I4 --> R4["Review risk: Docs: container-provenance-contract.md"]
  R4 --> V4["docs review"]
  Evidence --> S5["Frontend: Dockerfile"]
  S5 --> I5["browser runtime and bundle"]
  I5 --> R5["Review risk: Frontend: Dockerfile"]
  R5 --> V5["frontend tests"]
Loading

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Aug 14, 2026

Copy link
Copy Markdown
Contributor
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@seonghobae
seonghobae dismissed opencode-agent[bot]’s stale review August 14, 2026 22:43

Superseded by the current exact head a6cce6f. This review evaluated predecessor cb3946c and requested changes solely because coverage-evidence failed there. On the unchanged current head, coverage-evidence and opencode-review are both completed successfully, the required CI/security/container checks are terminal-success, and all review threads are resolved. Dismissing only this stale predecessor-head gate result; no approval is being synthesized or bypassed.

@seonghobae
seonghobae merged commit 83ce256 into develop Aug 14, 2026
46 of 47 checks passed
@seonghobae
seonghobae deleted the codex/docker-base-current branch August 14, 2026 22:44
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.

2 participants