Skip to content

fix(ci): stacked-PR base support + governance-gate CodeRabbit/OpenCode fallback fixes - #1531

Open
seonghobae wants to merge 12 commits into
chore/aiohttp-3.14.3-maintainerfrom
chore/stacked-pr-governance-gate-support
Open

fix(ci): stacked-PR base support + governance-gate CodeRabbit/OpenCode fallback fixes#1531
seonghobae wants to merge 12 commits into
chore/aiohttp-3.14.3-maintainerfrom
chore/stacked-pr-governance-gate-support

Conversation

@seonghobae

@seonghobae seonghobae commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

Current authority — 2026-09-07

  • protected root: develop@042b0c70531b229af3acbd0421a2f23098d848b3
  • direct prerequisite/base: chore(deps): update hash-locked aiohttp to 3.14.3 #1244 chore/aiohttp-3.14.3-maintainer@156a816c3e799bc8cc2cf87e5e1a2ffb8cc1c78f
  • branch: chore/stacked-pr-governance-gate-support
  • exact head: bd0135de778a01a51deae536084447ce2481280c
  • lifecycle: Ready / independently reviewed / mergeable / not merge-ready
  • effective delta relative to the current prerequisite: 9 governance/workflow/test/documentation files

Ready and current-head robot approval do not authorize merge while the prerequisite and required hosted evidence remain incomplete.

Bounded governance contract

This PR remains the Naruon-owned stacked-PR trigger and PR-governance metadata lane.

  • Application CI, Bandit, Dependency Review, and Docker PR validation accept every PR base; contract tests reject both branches: and branches-ignore: filters.
  • Draft PRs remain non-terminal wait states.
  • CodeRabbit marker-delimited approval-pending notices are stripped with multiline-safe parsing before substantive warning scanning.
  • An exact-head structured OpenCode approval may satisfy the documented fallback only when authoritative CodeRabbit evidence is absent; stale pending notices do not override successful authoritative evidence.
  • Review-like names are not publisher authentication. Check evidence requires the coderabbitai or github-code-quality App slug; commit-status evidence requires Bot type plus exact supported bot identity.
  • Successful/skipped review evidence still blocks when its output contains a real warning/failure. Only complete known clean lines are excluded from blocker matching.
  • Missing/wrong publishers, failed/pending checks, separate substantive comments, and CHANGES_REQUESTED remain fail closed.

Intervening delta adoption and P1 repair

The previous authority stopped at b6d6c286...; later normal descendants were read and adopted rather than treated as a race. f2e2ac0e9fd84907d49b9646af894e55077cb383 repairs the remaining P1: broad output matching had classified complete clean CodeRabbit lines such as No warnings found and No actionable comments were generated as blockers. The fix removes only whole anchored clean lines before blocker matching; real warnings, qualified clean text, explicit failure, neutral-without-skip evidence, and forged publishers still fail closed. Eleven regression scenarios cover the boundary.

Current merge commit bd0135de778a01a51deae536084447ce2481280c then normally inherited combined dependency prerequisite #1244/#1571 as its second parent. It keeps governance history as first-parent ancestry and does not make dependency files part of this PR's effective delta. No force push, destructive rebase, predecessor closure, or source copy was used.

Review state

The final clean-summary P1 thread is resolved and fresh thread inventory is zero unresolved. CodeRabbit submitted APPROVED on 2026-09-06 14:40:28Z after exact head bd0135de... existed. This remains qualifying current-head independent robot-review evidence for this lane; older submissions are predecessor history only.

Exact-head hosted evidence

The previously queued repository workflows are now terminal on unchanged exact head bd0135de...:

  • Application CI 34039482640success
  • Security Scan 34039482620success
  • SAST Semgrep 34039482600success
  • Bandit Security Scan 34039482619success
  • Build and Publish Docker Images 34039482904success
  • CodeQL PR 34039482713failure

The CodeQL run reproduces the shared verdict-path failure rather than a governance-source CodeQL finding. Language detection succeeded; JavaScript/TypeScript, Actions, and Python compatibility jobs each completed Request current-head CodeQL scan dispatch successfully and then failed at Release runner or enforce current-head CodeQL verdict. This remains a canonical .github control-plane repair, not grounds for a Naruon-local authorization expansion, synthetic status, dummy commit, workflow copy, or gate weakening.

Stack and owner boundary

#1244 remains the direct security prerequisite and must land normally first. #1562 and #1417 remain downstream governance/runtime consumers. After each prerequisite lands, descendants must adopt the protected ancestry normally and regenerate their own exact-head evidence.

The current Calendar stack (#1245#1488#1569) now also provides a live non-default-base trigger acceptance case: after #1488 and #1569 were repaired/restacked without force, both exact heads produced zero PR workflow runs. #1562 remains the canonical stacked-base workflow prerequisite; do not copy its workflow changes into Calendar PRs.

Shared organization CodeQL/Strix/review execution defects remain .github owner concerns. The product Gap ledger remains owned by #1557.

Merge boundary

Merge Gate: FAIL. This head has qualifying current-head review and five repository workflow families GREEN, but CodeQL is not GREEN and #1244 is unintegrated. Once #1244 lands, reconcile this branch through normal ancestry without dropping governance delta and regenerate all then-live evidence on the resulting exact head. No self-approval, review dismissal/fabrication, admin bypass, dummy/no-op requeue commit, force-push, destructive rebase, predecessor-evidence transfer, synthesized status, or ruleset weakening.

…e-gate CodeRabbit/OpenCode fallback fixes

Extracted from #1502 at the repo owner's request
(#1502 issue comment, 2026-09-02): that PR's diff had drifted to also carry
this unrelated PR-governance/stack-trigger content, which should live in
its own lane rather than hitchhike on the Postgres-service-container PR.

Two independent pieces of work, both already validated on #1502's branch
before this extraction:

1. Stacked-PR base support: removes the `branches: [develop, master,
   release/**]` restriction from the four governed `pull_request`-triggered
   workflows (app-ci.yml, bandit.yml, dependency-review.yml,
   docker-publish.yml) so required checks run for every PR base, including
   a PR stacked on another open PR's branch rather than directly on
   develop/master. Adds tests/test_stacked_pr_workflow_contract.py to pin
   this and updates backend/tests/test_release_governance.py's existing
   app-ci.yml/docker-publish.yml assertions to match.

2. scripts/ci/pr_governance_gate.sh: recognizes CodeRabbit's "approval
   pending" notice (marker-delimited, "has no unresolved comments, but it
   has not reviewed the latest commit") as a wait state rather than a false
   blocker -- the prior regex matched the phrase "blocking issues" inside
   CodeRabbit's own hypothetical-approval sentence. Also fixes a regression
   Devin Review found in that same fix: once the approval-pending notice
   routed to add_waiting, it did so unconditionally, even when the
   documented no-check-run fallback (an accepted, exact-current-head
   OpenCode adversarial approval) had already been satisfied -- defeating
   the fallback's whole purpose (governance not stuck when CodeRabbit
   itself is unavailable). OPENCODE_FALLBACK_APPROVED now tracks whether
   that fallback was accepted and skips the wait when it was.

Verified on this exact extracted head: `bash scripts/ci/test_pr_governance_gate.sh`
PASS (including the new missing_coderabbit_adversarial_approval_with_pending_notice
regression scenario); `python3 -m pytest tests/test_stacked_pr_workflow_contract.py -q`
1 passed; manually re-checked backend/tests/test_release_governance.py's
app-ci.yml/docker-publish.yml assertions against this branch's exact
workflow file contents (all hold).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019YgmaEKnPhrsbSyQBierFH
@coderabbitai

coderabbitai Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Team

Run ID: eca443c7-b07d-4db9-bc27-7c132a60da04

📥 Commits

Reviewing files that changed from the base of the PR and between 27ab83b and bd0135d.

⛔ Files ignored due to path filters (1)
  • frontend/pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (7)
  • backend/tests/test_stacked_pr_workflow_contract.py
  • docs/development/merge-gate-policy.md
  • frontend/pnpm-workspace.yaml
  • frontend/src/dependency-lock.security.test.ts
  • requirements-strix-ci-hashes.txt
  • scripts/ci/pr_governance_gate.sh
  • scripts/ci/test_pr_governance_gate.sh

Included review availability: Your plan provides up to 1 included review per hour; 0 remain after this review.


📝 Walkthrough

Walkthrough

Pull-request workflows now run for all target branches. The governance gate authenticates CodeRabbit evidence, evaluates blocking output, and handles draft and approval-pending states. Frontend and Python CI dependency pins were updated with security validation.

Changes

Pull-request workflow and governance

Layer / File(s) Summary
Unrestricted pull-request workflow triggers
.github/workflows/*.yml, backend/tests/test_release_governance.py, backend/tests/test_stacked_pr_workflow_contract.py, docs/development/merge-gate-policy.md
The governed workflows no longer filter pull requests by target branch. Regression tests and policy documentation cover stacked pull requests.
Authenticated evidence and governance states
scripts/ci/pr_governance_gate.sh, scripts/ci/test_pr_governance_gate.sh, docs/development/merge-gate-policy.md
The gate validates CodeRabbit publisher metadata and output, handles draft and approval-pending states, preserves separate blocking warnings, and accepts valid current-head OpenCode approval fallback evidence.

Dependency security pins

Layer / File(s) Summary
Frontend js-yaml security pin
frontend/pnpm-workspace.yaml, frontend/src/dependency-lock.security.test.ts
The workspace pins js-yaml to 4.3.1. The security test verifies lock metadata and rejects 4.3.0 resolutions.
Python CI aiohttp update
requirements-strix-ci-hashes.txt
The pinned aiohttp version changed from 3.14.1 to 3.14.3, with its package hashes replaced.

Estimated code review effort: 4 (Complex) | ~45 minutes

Merge Risk: ⚪ Minimal · up to bd013

No concrete merge-blocking risk remains after the governance and dependency updates.

Sequence Diagram(s)

sequenceDiagram
  participant GitHubPR as GitHub PR metadata
  participant GitHubChecks as GitHub checks and statuses
  participant GitHubComments as GitHub issue comments
  participant OpenCodeReviews as OpenCode reviews
  participant GovernanceGate as pr_governance_gate.sh
  GitHubPR->>GovernanceGate: provide draft and merge state
  GitHubChecks->>GovernanceGate: provide CodeRabbit publisher and output
  GitHubComments->>GovernanceGate: provide approval-pending notices
  OpenCodeReviews->>GovernanceGate: provide current-head adversarial approval
  GovernanceGate->>GitHubChecks: publish waiting, failure, or success status
Loading
🚥 Pre-merge checks | ✅ 4
✅ Passed checks (4 passed)
Check name Status Explanation
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.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly identifies the main changes: stacked-PR workflow support and CodeRabbit/OpenCode governance-gate fixes.
✨ 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 chore/stacked-pr-governance-gate-support

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.

devin-ai-integration[bot]

This comment was marked as resolved.

Copy link
Copy Markdown
Contributor Author

Current-source review found one governance-contract violation that needs repair on this external branch before it can be treated as merge-ready. In scripts/ci/pr_governance_gate.sh, OPENCODE_FALLBACK_APPROVED=1 suppresses the CodeRabbit approval-pending wait when a structured OpenCode App adversarial result is present. Because the gate publishes in_progress while WAITING is non-empty but can proceed toward a completed pass once that wait is removed, this makes model-only OpenCode evidence capable of satisfying a missing/current-head CodeRabbit evidence requirement. Naruon's live writer contract explicitly classifies model-only/status-only evidence as non-passing; it also forbids converting one review model's unavailability into another model's approval.

Please repair this on #1531 itself, test-first: preserve the useful parsing fix that distinguishes CodeRabbit's marker-delimited approval-pending notice from an actual blocking finding, but keep that notice in WAITING until current-head CodeRabbit evidence itself becomes terminal, or explicitly classify the CodeRabbit lane as unavailable/non-required under a separately authoritative deterministic policy. A structured OpenCode adversarial result may remain supplemental evidence but must not clear another required reviewer/model lane by itself. Add a regression proving approval_notice_start + current-head OpenCode status=passed still leaves the metadata check non-terminal when CodeRabbit has not reviewed the current head. Do not weaken the separate formal GitHub approval/ruleset requirement.

seonghobae pushed a commit that referenced this pull request Sep 2, 2026
…on fix with #1503

Owner's request on this PR (2026-09-02): this branch had accumulated
unrelated content over a long, CI-congestion-heavy session. Narrows it
back to its stated purpose -- the dependency-root CI-enablement slice
(Postgres service container + the minimum fix needed to make the newly
real-executing tests pass) -- and converges the overlapping migration fix
with #1503's independently-derived, more complete implementation so the
two branches don't carry conflicting historical-migration semantics.

Moved out entirely (zero diff vs develop now), extracted to
#1531:
- .github/workflows/{bandit,dependency-review,docker-publish}.yml and
  app-ci.yml's `pull_request: branches:` removal (stacked-PR base support)
- tests/test_stacked_pr_workflow_contract.py
- backend/tests/test_release_governance.py's stacked-PR assertions
- scripts/ci/pr_governance_gate.sh + scripts/ci/test_pr_governance_gate.sh
  (CodeRabbit approval-pending + OpenCode fallback governance-gate fixes)

Converged with #1503 (adopted its exact implementation, verified
byte-identical via diff against its branch):
- backend/alembic/versions/0011_email_read_state.py: #1503 independently
  found and fixed the same relation "emails" does not exist crash, more
  completely -- guards on column existence (not just table existence) and
  checks both "email_records" and legacy "emails", vs. this branch's
  simpler has_table-only guard. Adopting it here means #1503's later
  rebase onto this PR (once merged) is a clean no-op on this file instead
  of a conflict between two divergent fixes for the same bug.
- backend/scripts/bootstrap_db.py: same convergence for
  execute_schema_backfill's legacy-index handling.
- backend/tests/test_alembic_migrations.py: swapped this branch's
  test_email_read_state_legacy_table_guard_is_reversible (asserted the
  old implementation's exact shape) for #1503's
  test_email_read_state_guards_both_legacy_and_current_table_names,
  which asserts the now-shared implementation instead.

backend/alembic/versions/0001_initial_control_plane.py,
backend/tests/test_bootstrap_db.py, and backend/tests/test_data_api.py
needed no changes -- diffed identically against #1503's branch already
(both PRs independently reached the exact same is_read raw-SQL fix and
0001 refactor while investigating the same real-Postgres failures).

Net result: 10 files changed vs. develop (down from 18), matching the
"dependency-root CI-enablement slice" scope the owner asked for.

Verification (real-Postgres re-run blocked by this sandbox having no
usable Docker daemon -- ExpressJS-style hashes/lint/isolated-assertion
checks substitute; the point of this very PR is to make GitHub's own CI
runners do the authoritative check):
- python3 -m py_compile on every touched Python file: clean.
- python3 -m ruff check on every touched backend file: all checks passed.
- backend/tests/test_alembic_migrations.py's three targeted test
  functions executed directly (bypassing this sandbox's unrelated
  conftest.py/cryptography import breakage): all 3 pass.
- git diff against develop for every "moved out" file: zero lines,
  confirming a clean revert.
- git diff against #1503's branch for the converged migration/bootstrap
  files: zero lines, confirming byte-identical adoption.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019YgmaEKnPhrsbSyQBierFH
coderabbitai[bot]

This comment was marked as resolved.

…g CodeRabbit lane; scope marker exclusion precisely

Two independent, confirmed findings on this PR (owner comment + Devin
Review, both against 38a53ee):

1. Owner: OPENCODE_FALLBACK_APPROVED (introduced by the prior
   pr_governance_gate.sh fix) suppressed the "waiting for CodeRabbit"
   state whenever a structured OpenCode adversarial approval was present,
   even in cases where CodeRabbit had NOT gone silent -- it had posted its
   own approval-pending issue comment for the exact current head, which
   means it is actively reviewing and just hasn't reached the latest
   commit yet. That is not the same thing as CodeRabbit being absent, and
   letting a different model's approval clear it lets one review model's
   temporary lag become another model's approval -- exactly the pattern
   this repo's product-technical-gap-baseline.md already documents as
   invalid ("model-only... evidence is not passing evidence").

   Fixed by computing CODERABBIT_APPROVAL_PENDING_COUNT before the
   no-check-run fallback decision (moved the issue-comments fetch earlier)
   and only accepting the fallback when CodeRabbit shows NO engagement at
   all -- no check-run AND no approval-pending issue comment. When a
   pending notice exists despite no check-run, the gate now waits on
   CodeRabbit specifically instead. This makes the later
   OPENCODE_FALLBACK_APPROVED guard on the CODERABBIT_APPROVAL_PENDING_COUNT
   branch provably redundant (if the fallback was accepted, that count is
   already 0), so it's removed rather than kept as dead defensive code.

2. Devin Review: the CODERABBIT_ISSUE_BLOCKERS jq filter excluded an
   entire issue comment from the blocking-evidence scan whenever it
   contained the approval-pending marker anywhere in it, even if the same
   comment also carried a real, separate pre-merge blocking warning
   elsewhere in its body. Fixed by stripping only the marker-delimited
   <!-- approval_notice_start/end --> span from the body before running
   the blocking-pattern test, rather than excluding the whole comment --
   verified directly with jq that a comment combining both now correctly
   still matches on the surviving blocking text, while a comment
   containing only the pending notice still correctly strips to nothing.

TDD evidence: added
assert_missing_coderabbit_adversarial_approval_still_waits_for_pending_coderabbit_notice
(replaces the now-incorrect
assert_missing_coderabbit_adversarial_approval_survives_pending_notice,
which asserted the very behavior finding #1 says is wrong) and
assert_coderabbit_approval_pending_notice_does_not_hide_separate_blocking_warning
(new scenario for finding #2). `bash scripts/ci/test_pr_governance_gate.sh`
-> PASS (all scenarios, including both new/rewritten ones).
`python3 -m pytest tests/test_stacked_pr_workflow_contract.py -q` -> 1
passed (unaffected). `bash -n` on both modified scripts: clean.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019YgmaEKnPhrsbSyQBierFH

Copy link
Copy Markdown
Contributor Author

Fixed both findings on this branch (exact head 6acf91ee), test-first.

Your finding: confirmed — OPENCODE_FALLBACK_APPROVED could clear the "waiting for CodeRabbit" state even when CodeRabbit had posted its own approval-pending notice for the exact current head (actively reviewing, not absent), letting OpenCode's approval substitute for a lane that was actually still live. Fixed by moving the issue-comments fetch before the no-check-run fallback decision and only accepting the fallback when CodeRabbit shows no engagement at all — neither a check-run nor a pending-notice comment. When a pending notice exists despite no check-run, the gate now waits on CodeRabbit specifically. This also makes the old && OPENCODE_FALLBACK_APPROVED != 1 guard on the later branch provably redundant (if the fallback was ever accepted, that count is already 0), so I dropped it rather than keep it as dead code.

Devin's finding (same root file, different bug): the blocker-scan jq filter excluded an entire CodeRabbit issue comment whenever it contained the approval-pending marker anywhere, even if the same comment also carried a separate real blocking warning. Fixed by stripping only the marker-delimited <!-- approval_notice_start/end --> span before testing for blocking language, rather than excluding the whole comment — verified directly with jq that a comment combining both text now still matches on the surviving blocking text.

Regression coverage: replaced the now-incorrect assert_missing_coderabbit_adversarial_approval_survives_pending_notice (it asserted exactly the behavior your finding says is wrong) with assert_missing_coderabbit_adversarial_approval_still_waits_for_pending_coderabbit_notice, and added assert_coderabbit_approval_pending_notice_does_not_hide_separate_blocking_warning for Devin's finding. bash scripts/ci/test_pr_governance_gate.shPASS (all scenarios).

I did not weaken the separate formal GitHub approval/ruleset requirement — this script's conclusion only feeds the informational "metadata-only gate evaluation" check, not the branch-protection required checks themselves.

Claude-Session: https://claude.ai/code/session_019YgmaEKnPhrsbSyQBierFH


Generated by Claude Code

devin-ai-integration[bot]

This comment was marked as resolved.

CodeRabbit review on this PR: the stacked-PR base-support contract tests
only asserted the absence of a branches: filter on each governed
workflow's pull_request trigger, not branches-ignore: -- which can just
as effectively exclude a stacked PR's base branch. Added the matching
assertion at all three flagged locations: tests/test_stacked_pr_workflow_contract.py's
generic loop (covers all four governed workflows) and the two per-file
checks in backend/tests/test_release_governance.py (app-ci.yml,
docker-publish.yml).

Verified: python3 -m pytest tests/test_stacked_pr_workflow_contract.py -q
-> 1 passed. Manually re-checked both new backend/tests/test_release_governance.py
assertions directly against the actual workflow files (neither
app-ci.yml nor docker-publish.yml's pull_request block contains
branches-ignore:, so both hold). ruff check: clean.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019YgmaEKnPhrsbSyQBierFH

Copy link
Copy Markdown
Contributor Author

Fixed CodeRabbit's branches-ignore finding too (exact head ae0f09df): added the matching assertion at all three locations it flagged (tests/test_stacked_pr_workflow_contract.py's generic loop, and both per-file checks in backend/tests/test_release_governance.py for app-ci.yml/docker-publish.yml). Manually re-verified against the actual workflow files — neither currently uses branches-ignore:, so both new assertions hold.

Claude-Session: https://claude.ai/code/session_019YgmaEKnPhrsbSyQBierFH


Generated by Claude Code

Copy link
Copy Markdown
Contributor Author

Replying to Devin's newest finding on scripts/ci/pr_governance_gate.sh lines 415-420 (#1531 (comment)) — not applying the suggested deletion, since that's reverting the exact fix this PR's previous round made in direct response to the owner's own review here.

Devin's description of the mechanism is accurate: yes, a genuine CodeRabbit approval-pending notice now makes the gate wait rather than accept the OpenCode fallback, and yes, that wait persists for as long as CodeRabbit doesn't produce terminal evidence for that head (its own rate limits included — ironically, CodeRabbit just hit exactly that on this PR a few minutes ago). But that's not an oversight; it's the explicit, reasoned trade-off the owner asked for in this comment's predecessor (the earlier finding on #1502, ported here): "keep that notice in WAITING until current-head CodeRabbit evidence itself becomes terminal, or explicitly classify the CodeRabbit lane as unavailable/non-required under a separately authoritative deterministic policy. A structured OpenCode adversarial result may remain supplemental evidence but must not clear another required reviewer/model lane by itself." Reverting to Devin's suggestion would restore the exact bypass — an actively-reviewing-but-lagging CodeRabbit lane getting silently cleared by a different model's approval — that instruction was written to close.

The liveness concern (an indefinite wait if CodeRabbit's lane never resolves) is real, but the owner's own instruction names its intended relief valve: a separately authoritative deterministic policy explicitly classifying the CodeRabbit lane as unavailable, not a blanket fallback re-opened inside this same conditional. That's a bigger, deliberate design decision outside this PR's scope — flagging it for the owner rather than unilaterally deciding it.

Claude-Session: https://claude.ai/code/session_019YgmaEKnPhrsbSyQBierFH


Generated by Claude Code

@seonghobae seonghobae added documentation Improvements or additions to documentation priority: high High-priority or P1 work status: needs-review Open pull request requiring current-head review or checks type: bug Defect or incorrect behavior labels Sep 2, 2026 — with ChatGPT Codex Connector
@github-actions

github-actions Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

PR governance metadata gate is not ready for 27ab83b57e94dc84bf5f8c8708d5b2b7a962304f:

  • Draft PR: merge automation is paused.
  • Required check strix is CANCELLED on the current head.

…-policy

Devin Review flagged docs/development/merge-gate-policy.md as stale
against this PR's own change: it still said Application CI runs "on
pull requests to master and release/**" with push checks "scoped to
master", but this PR removes app-ci.yml's pull_request: branches:
restriction entirely (so every PR base runs required checks, including
one stacked on another open PR's branch) and push already covers both
develop and master. Updated the policy text to match the actual
workflow triggers.

No test pins the old wording (checked backend/tests/test_release_governance.py's
only assertion against this file, which is unrelated -- "GitHub Checks
integration stays disabled"); verified that assertion still passes and
tests/test_stacked_pr_workflow_contract.py still passes.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019YgmaEKnPhrsbSyQBierFH

Copy link
Copy Markdown
Contributor Author

Addressed the governance gate's blockers on this cycle's wake:

  • docs/development/merge-gate-policy.md was stale (Devin Review, unresolved thread on .github/workflows/app-ci.yml): it still described Application CI as scoped to master/release/** PRs and master-only pushes, but this PR's own change removes app-ci.yml's pull_request: branches: restriction entirely and pushes already cover develop+master. Fixed in e03c805c — verified no test pins the old wording (the one test that reads this file, test_coderabbit_approval_is_decoupled_from_github_checks, asserts an unrelated line) and tests/test_stacked_pr_workflow_contract.py still passes.
  • The other two unresolved threads (docker-publish.yml publication-scope note, pr_governance_gate.sh draft-wait note) were Devin's own informational confirmations, not findings — resolved without a code change.
  • CodeRabbit's CHANGES_REQUESTED is from its very first review (commit 38a53ee, the branches-ignore gap) — already fixed in ae0f09d per the resolved thread's own "✅ Addressed in commits 6acf91e to ae0f09d" note. It hasn't re-reviewed since (Team plan: 1 review/hour, exhausted at the time). Requesting a fresh review now that the hour has passed.

@coderabbitai review


Generated by Claude Code


Generated by Claude Code

coderabbitai[bot]

This comment was marked as resolved.

CodeRabbit correctly flagged this as dead code: it's assigned when
CodeRabbit check-run and issue-comment evidence are both absent (so
an OpenCode adversarial approval is accepted as a fallback), but
nothing downstream ever reads it. Verified this doesn't change gate
behavior -- the later wait-state check re-examines
CODERABBIT_APPROVAL_PENDING_COUNT directly (the same value, computed
once and reused, not recomputed), which is already guaranteed to be
"0" whenever this flag would have been set, so the wait branch it
would have needed to suppress can't trigger anyway. No test
(scripts/ci/test_pr_governance_gate.sh included) references this
variable.

Verified: bash -n syntax check clean, full
scripts/ci/test_pr_governance_gate.sh suite passes, and
tests/test_stacked_pr_workflow_contract.py passes.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019YgmaEKnPhrsbSyQBierFH

Copy link
Copy Markdown
Contributor Author

CodeRabbit's OPENCODE_FALLBACK_APPROVED finding was correct — verified: it's assigned but never read anywhere. Traced why it's genuinely inert rather than a functional bug: the later wait-state check re-examines CODERABBIT_APPROVAL_PENDING_COUNT directly (a value computed once and reused, not recomputed), which is already guaranteed 0 at the point this flag would have been set — so the wait branch it would have needed to suppress can't trigger regardless. Removed the dead declaration/assignment in 27ab83b5. Verified bash -n, the full scripts/ci/test_pr_governance_gate.sh suite, and tests/test_stacked_pr_workflow_contract.py all still pass.


Generated by Claude Code


Generated by Claude Code

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Devin Review found 1 new potential issue.

Devin Review

Comment thread scripts/ci/pr_governance_gate.sh
@coderabbitai

coderabbitai Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

@seonghobae: I will review the current changes in #1531, including the workflow-trigger contract, governance-gate behavior, tests, and policy documentation.

⚠️ Action not completed

Review rate limited.

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

Re-checked this cycle's metadata-gate wake — all four listed blockers are stale or infra, not new findings:

  • CHANGES_REQUESTED: still the same OPENCODE_FALLBACK_APPROVED finding fixed in 27ab83b5 (confirmed by CodeRabbit's own "✅ Addressed in commit 27ab83b" note on that thread). My earlier @coderabbitai review request (12:10) landed before that fix commit (12:19) and hit the plan's 1/hour rate limit anyway. Requesting again now that ~10 hours have passed:

@coderabbitai review

  • 1 unresolved thread: was Devin's informational confirmation ("Removed flag had no consumers... unchanged") — not a finding requiring a change. Resolved.
  • strix CANCELLED: part of the ongoing org-wide GitHub Actions admission incident tracked in ContextualWisdomLab/.github#712 (ubuntu-24.04 runner/job-admission starvation and, more recently, zero-job startup_failure on CodeQL across many repos org-wide). Not caused by this PR's diff; nothing in this PR's reach can fix GitHub's own runner assignment.
  • "blocking warning/failure evidence": same stale CHANGES_REQUESTED review body being picked up by the gate's blocker scan — no separate new finding exists.

No further code change is needed on this PR's own diff; will keep watching for CodeRabbit's fresh review and for strix/noema-review to clear the runner queue.


Generated by Claude Code


Generated by Claude Code

@coderabbitai

coderabbitai Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

@seonghobae I will review the current changes in #1531.

✅ 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 approved these changes Sep 2, 2026

Copy link
Copy Markdown
Contributor Author

noema-review failed on the current head (27ab83b5). Root-caused via job logs, not this PR's diff:

  • Most orchestrator/free-pool candidate models were rejected before any content came back — several TimeoutErrors and, notably, multiple 404 HTTPErrors on google/gemma-3-12b-it / google/gemma-3-4b-it (both the primary and _sub provider variants), which reads as stale/retired model IDs in the pool rather than a transient outage.
  • One of the models that did respond (ready) returned truncated/malformed JSON (Expecting ',' delimiter: line 1 column 2829).
  • The bounded JSON-repair retry then hit its own 900-second absolute wall-clock deadline (NoemaRepairDeadlineExceeded) without producing a parseable verdict.

None of this touches .github/workflows/app-ci.yml, bandit.yml, dependency-review.yml, docker-publish.yml, scripts/ci/pr_governance_gate.sh, or the tests/docs this PR changes — the failure is in the shared orchestrator/free model pool's reliability (partially overlapping the capacity/admission issues already tracked in ContextualWisdomLab/.github#712, plus what looks like a separate stale-model-ID gap in the pool's own catalog). Re-ran the failed job once to rule out a one-off flake; will report back if it recurs. Fixing the underlying model-pool catalog/JSON-repair reliability is outside this PR's scope (it lives in contextual-orchestrator, not naruon).


Generated by Claude Code


Generated by Claude Code

@seonghobae
seonghobae marked this pull request as ready for review September 4, 2026 12:50
@seonghobae
seonghobae marked this pull request as draft September 4, 2026 12:51
@seonghobae
seonghobae marked this pull request as ready for review September 4, 2026 12:56
@seonghobae
seonghobae marked this pull request as draft September 4, 2026 15:43
@seonghobae
seonghobae marked this pull request as ready for review September 5, 2026 05:24

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 550798ccaf

ℹ️ 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".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread scripts/ci/pr_governance_gate.sh Outdated
Comment thread scripts/ci/pr_governance_gate.sh Outdated
Comment thread backend/tests/test_stacked_pr_workflow_contract.py
@seonghobae
seonghobae marked this pull request as draft September 5, 2026 05:44
seonghobae added a commit that referenced this pull request Sep 6, 2026
Normally merge full migration prerequisite #1503 at 19d5860, including #1565; preserve #1562/#1531/#1554 history and current #1531 base. Record decision and original missing-emails/skip failures in doctoring before commit. No delta discarded, no copied central workflow, no gate bypass.

Add hardened task-only DB lifecycle, isolated bootstrap/child settings, actual pytest collection/xfail guard, cancellation-safe scoped cleanup and redacted artifacts. Full candidate: 1871 passed and 2 explicitly unconfigured live API skips. Independent signal tests passed. Revalidate this exact committed head before protected integration.
Retain all predecessor governance changes. Move the existing four-workflow regression into the CI-collected backend tree without dropping assertions; correct the shared jq notice span after a multiline-fixture RED reproduction.

Co-Authored-By: Codex <noreply@openai.com>
Signed-off-by: Seongho Bae <me@seonghobae.me>
Repair review 3939597997 with separate success-check and success-status regressions. Correct the notice-only fixture and stale fallback commentary; preserve all predecessor delta and substantive blockers. No deletion, restack, or policy weakening.

Co-authored-by: Codex <noreply@openai.com>
Signed-off-by: Seongho Bae <me@seonghobae.me>
@seonghobae

Copy link
Copy Markdown
Contributor Author

Exact current head b6d6c28 preserves fac3437 and adds ordinary commits 179229d (shared publisher/output repair) and b6d6c28 (edge fixtures).

Independent nine-file readiness review identified two pre-existing metadata risks: name-only CodeRabbit evidence and success/skipped conclusions bypassing warning inspection. Main independently confirmed both in source. Six isolated pre-fix fake-GitHub scenarios each incorrectly emitted success: forged App check/status publisher with/without a pending notice, and success/skipped check output carrying a blocking warning.

Repair requires an allowed App slug or exact Bot status creator before selecting evidence, and checks blocking output before accepting the conclusion. Existing fallback, neutral-skip and separate-comment rejection remain intact. Ten focused publisher/output cases pass, including absent creator, correct login with User type rejection, and github-code-quality check/status positive coverage.

Post-commit full fake-GitHub harness: PASS, exit 0. Post-commit source contracts: 36 passed, zero skips, 0.25s. ShellCheck and git diff --check passed. Local/remote heads match and worktree is clean. Independent source re-review found no new blocking finding; it is not a GitHub approval.

Actual Edge Markdown Preview visual inspection at this exact head covered the full new policy bullet and RCA paragraph, with readable wrapping and no observed overlap/clipping in those regions. Screenshots retained locally under naruon-gate-b6d6-visual-eLO7dv (publisher_policy.png, publisher_rca.png). No whole-document, mobile or product UI claim.

Draft remains open. Hosted checks/reviews need this new head. CI #1562 and SMTP #1417 still retain prior heads 0648eac/cc2c4cbc; their earlier local DB/security receipts do not certify a future restack. Complete non-force delta propagation, AGENTS owner guidance and Gap refresh remain next steps. No review was self-resolved, no protection changed and no merge claimed.

@seonghobae
seonghobae marked this pull request as ready for review September 6, 2026 13:42

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: b6d6c28604

ℹ️ 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".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread scripts/ci/pr_governance_gate.sh
seonghobae and others added 2 commits September 6, 2026 23:05
Preserve publisher, neutral-skip and real-warning gates; match only complete known clean lines. Add eleven regression scenarios and record the failed first regex attempt. Full governance harness, 36 source contracts, ShellCheck and diff checks passed. No delta deleted or PR closed.

Co-Authored-By: Codex <noreply@openai.com>
Preserve existing1244 and1571 dependency repairs before governance adoption. Normal merge retains all1531 review-gate delta; no history rewrite or PR closure. Parent dependency scan passed expanded Medium-plus scope; hosted gates and UI-test diagnostics remain separate.
@seonghobae
seonghobae changed the base branch from develop to chore/aiohttp-3.14.3-maintainer September 6, 2026 14:32
@seonghobae

Copy link
Copy Markdown
Contributor Author

선행 보안 수정 상속 완료: bd0135de778a01a51deae536084447ce2481280c는 기존 f2e2ac0e와 #1244의156a816c를 일반 병합했습니다. 4개 dependency 파일은156a와 byte-identical이며 리뷰 게이트 delta는 보존됐습니다. PR base를 기존 #1244 branch로 변경해 선행 수정 순서를 명시했습니다. 전체 governance harness exit0/PASS,36 source contracts -W error/ShellCheck/diff exit0. tracked archive의 expanded Trivy MEDIUM/HIGH/CRITICAL fixable(vuln,secret,misconfig) exit0,11language manifests/0findings. JSON SHA2562710b3768d5b95b6dd15d19b637e846876fdf41fc93dd85f0fe9b93fbfcc1bc6. 이는 localhead검증이며 새 hosted checks/review와 보호 병합은 별도입니다. #1244의 기존 React act 경고와 최신 Visual Inspection 미완료도 유지합니다. Force/PRclose/반복Ready 없이 기존 변경을 통합했습니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation priority: high High-priority or P1 work status: needs-review Open pull request requiring current-head review or checks type: bug Defect or incorrect behavior

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants