Skip to content

ci: centralize law-agent quality on dedicated self-hosted runners - #2581

Merged
seonghobae merged 12 commits into
fix/sdp-ghas-analyses-pagination-20261002from
feat/law-agent-central-ci
Oct 12, 2026
Merged

seonghobae merged 12 commits into
fix/sdp-ghas-analyses-pagination-20261002from
feat/law-agent-central-ci

Conversation

@seonghobae

@seonghobae seonghobae commented Oct 5, 2026 •

Copy link
Copy Markdown
Contributor

현재 source와 검토 요청

Closes #2580. ContextualWisdomLab/law-ai-agent의 품질 실행을 중앙 reusable workflow로 정의합니다. CWL law CI 전용 group을 사용하며 private 제품 source를 중앙 저장소에 복사하지 않습니다.

  • 현재 head: a55eb2a949d42a49e7e1e9f3f3b7e6bcd0b86d07
  • tree: 0e4f548c5bd58bc7b124f111f7600ee0fb1539d8
  • ordinary merge 부모: 8dff0538c55b99df3f6f19b25a06633fc72b38ef + 32eced9f3586534e9a9fc5ef33e01ca52f3efbff
  • base branch: ci/sdp-all-self-hosted-20261003 (PR ci: stage all workflows on isolated self-hosted runners #2565)
  • non-force 게시 후 branch ref, pull ref, API head/parents/tree의 일치를 확인했습니다.
  • base 대비 누적 변경은 law 10파일입니다. 공유 충돌 8파일은 base의 mode/blob을 그대로 보존했습니다.

Ready는 source-only review 요청입니다. 운영 activation, runner 격리, canary, inference, 비용·retention admission, App 승인 또는 merge 승인이 아닙니다. 기존 self-HOLD의 runtime 준비 조건을 운영 gate로 분리합니다. #2555 및 #2565의 기존 담당자와 보호 gate는 변경하지 않습니다.

수리 범위

  • cleanup은 소유 scratch root에서 PostgreSQL cluster와 postmaster.pid까지 symlink 경계를 거부합니다. PID 누락, stop 실패 또는 stop 이후 PID 잔존이면 증거를 보존합니다.
  • migration acceptance는 고정 [1,2] 대신 exact 제품 source의 전체 SQL inventory를 사용합니다. 제품의 read_text().encode() checksum 의미를 보존하고 DB ledger와 전체 version/checksum을 비교합니다.
  • 제품 import 전에 source migration directory와 모든 lexical ancestor를 검사합니다. 설치된 wheel의 전체 resource inventory를 보존된 source manifest와 비교합니다.
  • helper SHA-256: 74fa5d7c309ef83687d2cfed2c3adf6c5a24ad4c8bdc5007c9b693f2ea4d4f48
  • test SHA-256: cbc5fa07cb6f004ff32f4f8a89f91d16dbcb4e944f9850af14d64c10e7311a25

해당 tree의 로컬 검증

Python 3.14.5 / pytest 9.0.3의 로컬 실행입니다. Linux Actions나 실제 제품 DB/wheel acceptance를 대신하지 않습니다.

  • coverage run --branch -m pytest tests -q -W error: 5,993 passed / 4 skipped, subtests 86개 별도 통과, exit 0.
  • scripts/ci Python coverage: statements 19,279/19,279, branches 7,916/7,916, missing/partial 0, 100%, exit 0. Bash helper coverage를 주장하지 않습니다.
  • interrogate: 100%, exit 0.
  • staged diff 검사: exit 0. 검증 후 전체 769 tracked source hash 불일치 0.
  • focused 5모듈: normal 124 passed, GITHUB_ACTIONS=true 124 passed. 합성 경계/source 계약 검증입니다.
  • 기존 독립 composition 검토: tree/parents/10 law paths/8 base-preserved conflicts의 정적 구성 APPROVE. 의미 전체 검토, 운영 또는 formal App approval이 아닙니다.
  • full receipt SHA-256: 2b7726067175f0c3b3ba252017db90cf30465daf24b243af9688344f7fb7369b
  • composition review MD SHA-256: 55faf5734e3c20e90cd51c4cfe01f45c4edd047c2643f57980283f0c974c2df2
  • composition review JSON SHA-256: 051085b2e251b33167ef34feacedc4a14e325ed60350d6ed755a7aa074cf315b

이전 PR body의 431c575f head와 5,536-test 수치는 역사이며 현재 acceptance가 아닙니다. 이전 cleanup RED/GREEN과 후속 symlink 반례·재수리 이력은 보존합니다. 새 Ready 전이를 위해 unchanged suite나 reviewer를 반복하지 않았습니다.

현재 원격 실패와 미완료 조건

Noema run 38259231556, job 114846985934의 실제 GraphQL annotation:

  • Failed to CreateArtifact: Artifact storage quota has been hit. Unable to upload any new artifacts.
  • PR is draft; Noema model review skipped before sidecar provisioning.

이는 artifact transport failure이며 substantive model verdict가 아닙니다. App token 준비, Draft skip, CodeRabbit skipped SUCCESS, zero-step 또는 skipped checks를 실제 review/approval로 계산하지 않습니다. 현재 candidate에는 Draft/current-producer evidence 수리가 이미 있지만 실제 실행 source binding과 protected producer 채택은 별도입니다. artifact 삭제, quota flag 조작, 유료 storage 변경 또는 blind dispatch를 하지 않습니다.

운영 및 정상 merge gate — 유지

  1. 해당 head의 실제 source-executing required CI와 security gates.
  2. 작성자와 다른 독립 Noema/OpenCode App의 substantive exact-head 판정 및 qualifying APPROVED. 실제 requested-changes finding은 수리 후 재검토합니다.
  3. 미해결 blocking review thread 없음과 최신 ruleset/protection 결과.
  4. 기존 stack prerequisite 및 운영 isolation/canary acceptance. 전용 runner 구성·등록·활성화는 Ready와 별개이며 완료로 주장하지 않습니다.
  5. 지정 LiteLLM literal auto의 실제 인증 inference, 유효 비용·private retention admission. 기존 key custody를 유지하며 새 key, Secret overwrite 또는 허위 zero-cost/ZDR attestation을 만들지 않습니다.

조건을 충족한 뒤에만 normal merge를 검토합니다. PR2581의 feature-base delivery와 protected default-main 배포는 서로 다릅니다. Ready는 위 조건의 면제나 사전 승인, admin bypass, dispatch 또는 운영 activation이 아닙니다.

@coderabbitai

coderabbitai Bot commented Oct 5, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 80b0df68-c05c-473d-b29f-5342d3d3ee88

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Law AI Agent의 품질 검사를 중앙 reusable workflow로 구성했습니다. Workflow는 checkout 전에 호출 정보와 SHA를 검증하고, 전용 runner에서 두 Python 버전으로 CI helper를 실행합니다. 새 이미지, 테스트, 운영 및 검토 기록도 추가했습니다.

Changes

중앙 CI 실행

Layer / File(s) Summary
전용 runner 환경
.github/runner-images/law-ai-agent/Dockerfile, docs/doctoring/law-ci-runner-provisioning.md
Runner 이미지에 PostgreSQL 16 및 관련 도구를 설치합니다. Runner 구성, 운영 절차와 격리 범위도 기록합니다.
Workflow admission과 실행 설정
.github/workflows/law-ai-agent-ci.yml, tests/test_law_ai_agent_ci.py, docs/doctoring/law-ai-agent-central-ci.md
허용된 호출자·이벤트·SHA를 checkout 전에 검증합니다. 소비 코드와 중앙 workflow를 지정된 SHA로 checkout하고, Python 3.12 및 3.14에서 CI 실행과 cleanup을 호출합니다. 테스트는 admission 조건과 workflow 설정을 확인합니다.
CI 검사와 정리 계약
scripts/ci/law_ai_agent_ci.sh, tests/test_law_ai_agent_ci.py, docs/doctoring/law-central-ci-independent-review.md
Helper가 JUnit 및 wheel·source archive를 검증하고, PostgreSQL 기반 품질 검사·테스트·빌드를 실행합니다. 안전한 경로 검증, 종료 처리와 cleanup 동작을 테스트하며, 독립 검토 기록에 관측 범위와 한계를 남깁니다.

Priority: ➖ Normal

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

Change: Other

Sequence Diagram(s)

sequenceDiagram
  participant Caller as law-ai-agent caller
  participant CentralWorkflow as law-ai-agent-ci.yml
  participant CIHelper as law_ai_agent_ci.sh
  participant PostgreSQL
  Caller->>CentralWorkflow: workflow_call로 호출
  CentralWorkflow->>CentralWorkflow: 호출자와 이벤트 메타데이터 admission 검사
  CentralWorkflow->>CIHelper: run 명령과 source SHA, Python 버전 전달
  CIHelper->>PostgreSQL: 테스트용 클러스터에서 검사 실행
  CentralWorkflow->>CIHelper: cleanup 명령 실행
  CIHelper->>PostgreSQL: 클러스터 정지 및 정리
Loading

Merge Risk: 🟡 Moderate · up to 9e482

The full test suite can fail on runners and developer machines without this local directory. Use a short temporary path that the test creates before merging.

Security Architecture Review

Security architecture risk: 🟡 Moderate · up to 9e482

Repository admission, immutable source selection, and read-only permissions substantially narrow access. However, the new execution path depends on externally managed runner isolation and disposal that have not been demonstrated end-to-end. Database cleanup also relies on mutable state and can complete without establishing that the server stopped.

Retained concerns

  • Medium · security · inferred: The new lane executes admitted same-repository PR code on a self-hosted runner, while host and network containment remain external rollout preconditions. Runner assignment precedes inline admission, and the recorded runner-group ACL is repository-wide rather than restricted to this workflow. The documentation explicitly leaves private-network egress unverified. Read-only permissions and the recorded container restrictions reduce exposure, but do not establish end-to-end containment; unauthorized access or internal-service reachability has not been demonstrated.
  • Medium · reliability · inferred: Cleanup does not independently establish termination of the database instance it started. If consumer code or a partial failure removes postmaster.pid, cleanup skips pg_ctl stop, deletes the scratch root, and can remove the recovery marker while returning success. Root ownership and symlink checks do not protect this mutable descendant. This weakens cleanup and recovery guarantees; effects beyond the current job depend on whether the container is reliably destroyed, which is not demonstrated by the supplied execution evidence.

Security review details

Security Blast Radius

  • inferred — Through this callee, an attacker must influence an admitted same-repository revision; fork revisions and central public-repository PR events fail admission. Executed consumer code can affect its runner-user environment, scratch database, and build resources. Provisioning records exclude host mounts and production volumes, but maximum network-reachable scope is unresolved because private-network egress was not verified.

Security Findings and Attack Paths

  • inferred — A possible lifecycle failure path is admitted consumer code executing under the runner UID, modifying the cluster's PID file, and then triggering cleanup. Cleanup can delete recovery evidence without explicitly stopping the instance. This is a containment and recovery weakness, not demonstrated privilege escalation, persistent compromise, or cross-job deletion.

Trust Boundaries and Controls

  • observed — Caller identity and consumer revision are checked separately from the called workflow's repository and SHA. GitHub-provided job.workflow fields select the initial central helper checkout rather than caller-supplied inputs. These controls bind initial source identity; they are not a sandbox against admitted code running under the same UID. Runner-group access is a separate platform boundary, and the recorded ACL has no workflow restriction.

Resilience and Maintainability Implications

  • inferred — Per-job container destruction would bound process and filesystem residue independently of helper cleanup. Ownership and mode checks protect against differently privileged users, but do not bind mutable markers to an immutable creating instance. Cross-job marker targeting requires shared same-UID scratch access; the documented fresh-container contract is counterevidence, and that cross-job condition is not established.

Hardening Proposals

  • proposed — Before enabling the consumer, verify the effective runner ACL, deployed image, internal-network egress policy, and container destruction across success, cancellation, and interruption. Consider restricting the runner group to the intended reusable workflow in addition to its repository allowlist.
  • proposed — Bind database teardown to independently owned instance identity or a job-container supervisor. Treat missing or altered process metadata as inconclusive rather than successful shutdown, and verify interruption and PID-file-loss recovery without deleting the only recovery evidence prematurely.

Pre-merge checks | Passed 4 | Failed 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Linked Issues check Warning [#2580] workflow는 workflow_call만 허용하고 checkout 전에 caller와 SHA를 검증합니다. job.workflow_sha로 중앙 소스를 고정하고, 읽기 전용 권한, 전용 runner 그룹, Python 3.12/3.14 행렬을 사용합니다. 헬퍼는 새 native PostgreSQL 클러스터, zero-skip JUn… 기존 정책과 보안 게이트를 우회하지 않고 실제 GitHub workflow를 실행하십시오. 실행 receipt와 해당 job의 runner identity를 기록해 이슈 요건을 확인하십시오.
✅ Passed checks (4 passed)
Check name Status Explanation
Out of Scope Changes check Passed 변경 파일은 재사용 workflow, 격리 CI 헬퍼, 계약 테스트, runner 이미지와 이 CI lane의 doctoring 문서입니다. 모두 [#2580]의 중앙 law-agent CI 또는 그 격리·검증을 지원합니다. 요약에는 기존 scanner/control/signing workflow나 다른 runner group을 변경한 내용이 없습니다.
Docstring Coverage Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 22 functions across 2 files. (5 skipped: 5…
Description Check Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check Passed 제목은 전용 self-hosted runner에서 law-agent 품질 검사를 중앙화하는 변경 사항을 정확하고 간결하게 요약합니다.

Full details: Linked Issues check

Explanation

[#2580] workflow는 workflow_call만 허용하고 checkout 전에 caller와 SHA를 검증합니다. job.workflow_sha로 중앙 소스를 고정하고, 읽기 전용 권한, 전용 runner 그룹, Python 3.12/3.14 행렬을 사용합니다. 헬퍼는 새 native PostgreSQL 클러스터, zero-skip JUnit 검사, coverage 90, wheel/sdist 검사, 오프라인 설치와 정리를 구현합니다. 계약 테스트도 추가했습니다. 그러나 이슈는 실제 workflow 실행과 runner identity 확인을 요구합니다. PR 설명은 실행 receipt가 없다고 명시하므로 이 통합 검증 요건은 충족되지 않았습니다.


✨ Finishing Touches 💡 1
🛠️ Fix failing CI checks 💡
  • Commit to this branch
  • Create a new PR

📝 Generate docstrings
  • Commit to this branch
  • Create a new PR

🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR

  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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.

coderabbitai[bot]

This comment was marked as resolved.

@seonghobae

Copy link
Copy Markdown
Contributor Author

15:15 KST 실제 follow-up: consumer full349passed/skip0 in Python3.12/3.14 and final caller independent PASS; ContextualWisdomLab/law-ai-agent#1 head02f0f6db51eb28801c6d0105592a68a0ff53962a points to this central9e482e14. Source/app code preserved.
Central full-suite5198passed/4skipped/40subtestspassed, but coverage100 admission fails (176misses/33partial,display99,exit2). Isolated exact-base37b10243 baseline is running; no gate reduction. Required current-head jobs gitleaks/scope37269721729,Semgrep37269721797,Python37269721792,CodeQL37269721845 have actual annotation “The job was not started because your account is locked due to a billing issue.” steps0, so source security findings were not produced. OpenCode coverage-evidence succeeded but authenticated exact-head verdict missing; Noema native job is executing model review. Skipped Devin is not an approval.
CodeRabbit's test scratch portability comment is accepted and assigned separate bounded TDD repair ctx_df60f6521590; old PASS is not clearance of the new defect.
Dedicated runner1134186 was idle with no job, so it was deregistered and both owned runner/proof containers removed; group11 private-onlylaw provisioning contract remains. Linux actual finalhelper test receipts remain345×2 with offline wheel/cleanup. No billing, existing ACL, protection, actor or credential changes.

@seonghobae

Copy link
Copy Markdown
Contributor Author

2026-10-05 15:33 KST: CodeRabbit portability finding repaired under strict TDD: no-Hermes-HOME RED2 → final39passed (normal and GITHUB_ACTIONS=true). Independent final static review deleg_8376bba3 PASS; final test SHA256e36b38d67befd4f591c2362fe2306430af8843d8028d7d13e3deb5429bfece79 and reportaa2a376 matched before staging. Coordinator re-ran39passed, then pushed67bf8ded11e7d6feb4e7c0cda83217bc36bc2965. Working tree clean; helper/workflow bytes unchanged. No stale approval reused for the new test.
Existing central coverage100 failure remains separately visible; baseline included production bytes identical and same coverage gaps, environment-bound HOME-temp failures reproduced on both. Current-head remote security/model checks are not cleared by this source fix. Account billing annotations, provider429 capacity, artifact quota and missing authenticated OpenCode verdict are distinct boundaries. Existing owner was sent exact-run evidence; no gate, ACL, actor or billing changes. Existing continuation/scheduler will be checked before another retry.
Law consumer PR ContextualWisdomLab/law-ai-agent#1 already pins immutable core9e482e14; latest67bf8ded is test/report-only. Update pin to protected merged immutable source after ordinary central merge and renewed consumer checks.
Orca three workers this wave settled/released; total8 released/reclaimable0. Dedicated idle runner and both owned containers reclaimed; group11 private-only consumer remains. Existing Goal cron resumes with current PR lineage and ownership handoff; no duplicate scheduler or speculative completion.

@seonghobae

Copy link
Copy Markdown
Contributor Author

2026-10-05 16:32 KST 새 확인. 대상은 이 PR의 현재 head 67bf8ded11e7d6feb4e7c0cda83217bc36bc2965입니다.

  • Noema의 실제 후속 run 37275376360은 모델 요청 HTTP 502 / provider_capacity_unavailable로 실패했습니다. 로그에 automatic re-dispatch budget exhausted가 있습니다. 선행 37272929218의 HTTP 429와 구분합니다. 후속 artifact upload도 quota로 실패했고 authenticated verdict publication은 skipped입니다. 중복 dispatch, 유료 모델 전환, 한도 변경은 하지 않았습니다.
  • 현재 gitleaks check 111643606822 annotation은 account locked due to billing issue입니다. 소비 PR1 current e1853835278976a71e0a69d7b3a54dd132b6e8f7의 run 37275936417은 STARTUP_FAILURE / jobs 0입니다. CodeRabbit paused/rate-limited 및 Devin skipped를 승인으로 해석하지 않습니다.
  • CodeRabbit architecture comment의 cleanup 우려를 현재 helper 고정본으로 확인했습니다. 실제 DB나 process를 시작하지 않은 합성 scratch fixture에서, 초기화 흔적은 있으나 postmaster.pid가 없을 때 cleanup이 exit 0으로 root와 recovery marker를 모두 지웠습니다. 안전 계약 assertion은 1 failed / skip 0 / exit 1입니다. 동일 synthetic probe를 전용 scratch 아래 다시 실행해 같은 실패를 확인했습니다. 이 결과는 증거 조기 삭제의 재현이지, 실제 살아 있는 DB, 외부 침입, privilege escalation의 입증은 아닙니다.
  • 확인한 helper SHA256: 7ee3d7d4f7083d87b921530f4ee3c7ce7dd8041e9611f4429390aa58f9e4e935. canonical source를 수정하지 않았습니다. 이전 정상 cleanup/정적 PASS는 이 metadata-loss 계약을 입증하지 않습니다. 중앙 helper 소유자의 최소 수리와 최종 hash 재리뷰가 필요합니다. 보호 gate를 낮추지 않습니다.
  • Orca runtime은 starting/disconnected이고 live worker/terminal 조회가 timeout입니다. writer ownership을 추정하지 않고 source/shared ledger 편집을 보류했습니다. 세 worktree와 기존 Goal/cron을 보존했습니다.

소유자 인계 요청: 현재 helper의 불확실한 instance metadata에서는 shutdown 성공과 recovery evidence 제거를 보류하는 경계를 검토해 주십시오. 정상/초기 실패/실제 stop 실패/metadata 유실을 구분하는 회귀 검증이 필요합니다. runner ACL·결제·signing·control gate 수정은 이 요청에 포함하지 않습니다.

@seonghobae
seonghobae marked this pull request as draft October 9, 2026 06:35

Copy link
Copy Markdown
Contributor Author

Drafted due to a reproducible cleanup trust-boundary defect on exact head 7558db6749e6f73a83cefd5f67dfaca380c8ef7d.

cleanup_root validates only the lane root. Its descendant cluster check uses [[ -d "$cluster" ]], which follows a symlink. A same-user writable lane can therefore replace data/private/postgres/cluster with a symlink to a foreign directory containing postmaster.pid; the helper then invokes pg_ctl -D on that foreign target. The subsequent [[ -e "$cluster/postmaster.pid" ]] and eventual recursive cleanup also follow the descendant alias. The current contracts reject symlinks at the root/parent boundary but do not cover this cluster-child escape.

Required repair before Ready:

  1. Add a RED contract that creates a symlinked cluster child targeting a foreign directory and proves neither pg_ctl nor deletion is reached.
  2. Validate every destructive descendant boundary without following symlinks, including the cluster and PID metadata, immediately before use.
  3. Re-run exact-head contracts/whole-suite evidence and hosted checks.
  4. Keep all existing valid runner isolation and consumer evidence intact.

No merge/bypass is justified while this substantive filesystem-boundary failure exists.

@seonghobae
seonghobae changed the base branch from main to ci/sdp-all-self-hosted-20261003 October 9, 2026 07:21

Copy link
Copy Markdown
Contributor Author

Current authority — exact head 431c575f9778e727ef2ec071e57eb334564bd737

Canonical stack repair is complete for this head.

Preserve shared base bytes exactly. Reviewed-Tree: 0e4f548
Local full gate: 5993 passed, 4 skipped, 86 subtests; Python coverage/docstrings 100%.
Source publication only; runner, inference, formal App approval and protected merge remain open.
@seonghobae
seonghobae marked this pull request as ready for review October 12, 2026 14:29

@devin-ai-integration devin-ai-integration 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.

Devin Review found 3 potential issues.

Devin Review

Comment thread scripts/ci/law_ai_agent_ci.sh Outdated
Comment on lines +56 to +58
| `.github/workflows/law-ai-agent-ci.yml` | `3aac714edfb5438c1f7c0eb6420fcff2f43b39692324cd6d7e86c4c103cfc164` |
| `scripts/ci/law_ai_agent_ci.sh` | `7ee3d7d4f7083d87b921530f4ee3c7ce7dd8041e9611f4429390aa58f9e4e935` |
| `tests/test_law_ai_agent_ci.py` | `8afd78b82f0c2a270375192eb35454735b1bb192b573bc89027d951b50900b35` |

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.

🔍 Verification receipts identify older helper bytes

The recorded helper and test hashes differ from this PR's files. The documented review and local results cannot establish which checks covered the final bytes.

Devin Review


Was this helpful? React with 👍 or 👎 to provide feedback.

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.

현재 f31 기준 문서 상태를 정정합니다. lines57–58의 helper7ee3d7d/test8afd78b8는 초기 frozen bytes의 역사적 receipt이며 현재 파일의 승인/실행으로 전이하지 않습니다. lines79의 “미게시” 및 line89의 “새 base 조합은 아직 실행하지 않았다”는 scratch 준비 시점의 문구로, 현재 상태를 설명하지 못하므로 철회합니다. 실제 f31d7e69f97187336c5cfdd7d45e109682d0a761은 parents a55eb2a + 362fed6, tree7707779ad171803411214d7631616011d86b0b2b로 ordinary 조합·non-force 게시 및 branch/pull/API readback을 완료했습니다. 현재 helperSHA67b7b11968eed60745537d9e000a5c834f1cfbc22409d8321f16191ac25355f6, 기존testSHAcbc5fa07cb6f004ff32f4f8a89f91d16dbcb4e944f9850af14d64c10e7311a25, 새testSHA736eb442735e1d40744edb554a65c087f825079eb91f5dc7650a679d6d3b8800입니다. 기존 peer의3파일 source APPROVE(문서 포함), patch25902ffe24be63974a460e4cae5a1c36ba8496f0cc41d4a0b890c8f092450778가 이 bytes에 결속됩니다. 76 targeted PASS는 부모 관측 tool 결과이며 native PostgreSQL startup·새base전체suite·Linux격리·App 승인으로 확대하지 않습니다. 이전 a55 전체5993pass도 변경된f31의full acceptance가 아닙니다. 이 thread reply가 상태정정 원문이며 historical receipts는 보존합니다. 새로운 source-neutral wake commit을 만들지 않습니다. egress finding은 별도로 미해결 유지합니다.

Comment on lines +15 to +17
runs-on:
group: CWL law CI
labels: [self-hosted, Linux, X64, law-ai-agent-ci]

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 code reaches unfiltered runner network

For same-repository PRs, quality executes the PR head on a runner whose network permits internal access. The runner label does not isolate egress, exposing reachable internal services to PR-controlled code.

Devin Review


Was this helpful? React with 👍 or 👎 to provide feedback.

Reconcile the reviewed law lane with current base 362fed6 and keep the base-owned Noema/App producer delta. Quote the PostgreSQL server socket option and libpq host value for RUNNER_TEMP paths containing spaces. Source publication only; runtime, App approval and protected merge remain separate.
Base automatically changed from ci/sdp-all-self-hosted-20261003 to fix/sdp-ghas-analyses-pagination-20261002 October 12, 2026 21:39
@seonghobae
seonghobae merged commit 75bdd69 into fix/sdp-ghas-analyses-pagination-20261002 Oct 12, 2026
16 of 21 checks passed
@seonghobae
seonghobae deleted the feat/law-agent-central-ci branch October 12, 2026 21:42
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.

ci: centralize law-agent quality on dedicated self-hosted capacity

1 participant