Skip to content

fix(hourly): stream bounded proposal path counting - #643

Merged
seonghobae merged 4 commits into
mainfrom
fix/hourly-proposal-path-count-retention-20260912
Sep 11, 2026
Merged

fix(hourly): stream bounded proposal path counting#643
seonghobae merged 4 commits into
mainfrom
fix/hourly-proposal-path-count-retention-20260912

Conversation

@seonghobae

@seonghobae seonghobae commented Sep 11, 2026

Copy link
Copy Markdown
Contributor

Finding

After #642 merged, the next independent buyer/security gap was in Noema's autonomous product-development proposal boundary. The proposer, verifier, and publisher counted git diff --cached --name-only -z records by retaining every stdin chunk and concatenating the complete untrusted pathname stream before applying or re-checking the declared 40-file bound. The publisher's path-isolation preparation repeated the same full-stream retention before base64 set comparison. A model-generated working tree could therefore make retained heap/object count scale with pathname-stream fragmentation before the proposal admission contract took effect.

RED

Test-only exact a8953edc3c0f098636184bfdd9f5cb92fe6f42f8 required the workflow to stop retaining/concatenating pathname chunks and to count NUL-delimited paths incrementally. Hosted application CI run 34628909983 checked out that exact head, passed live-base/lockfile/install/typecheck, and failed at release tests, providing the expected RED.

Repair

Workflow repair c102fcec224eb0dd510a3406b79c5daccb8ddf90 counts each NUL delimiter directly as stdin chunks arrive in the proposer, uncredentialed verifier, and non-executing publisher. It never materializes a pathname list for file-count admission. Publisher path-isolation preparation now consumes the same NUL-delimited Git stream one pathname at a time and writes each base64 record directly to the file-backed comparison set instead of retaining all proposal paths first. Existing 40-file/500,000-byte bounds, exact base/digest evidence, open-PR path isolation, publication authority, and fail-closed behavior are unchanged.

docs/operations/hourly-product-development.md records the streaming file-count and one-path-at-a-time isolation contract. The regression requires all three file-count admission points plus the publication path-isolation stream to remain non-retaining. Final exact is b13903e3208232086871d7f117f8f20e753eb583.

GREEN / review

On that unchanged exact, application CI 34629820648, reviewer-ci 34629820588, required Security Scan 34629820564, and patch-validator-image 34629820791 are terminal SUCCESS. Application release tests/security/KPI/license/acquisition gates passed; reviewer-ci retained 100% line+branch/docstring gates and the real no-network CodeGraph sandbox smoke; patch-validator retained exact-source/image, no-network smoke, SBOM, vulnerability, and stale-head evidence. A current-head COMMENT-only review found no additional valid source, DDD/owner-boundary, documentation, or regression finding. Fresh unresolved inline threads are 0. Protected main remained GitHub-verified 36c786a070550225b4352aabb2a56196095b3245, matching this PR's base immediately before Ready.

Scope

No LLM provider routing, quarantine/security product authority, outbound authority, foreign domain truth, branch-protection weakening, release, or deployment authority moves into Noema. This is bounded proposal-workflow resource hardening only.

Summary by CodeRabbit

  • 개선 사항

    • 시간별 제품 개발 자동화가 대용량 변경 사항을 보다 안정적으로 처리하도록 개선되었습니다.
    • 제안 및 게시 단계에서 변경 파일을 효율적으로 확인해 처리 안정성과 확장성이 향상되었습니다.
  • 문서

    • 시간별 제품 개발 운영 절차에 변경된 파일 처리 방식이 반영되었습니다.
  • 테스트

    • 변경 파일 수와 경로 처리의 정확성을 검증하는 테스트가 추가되었습니다.

@coderabbitai

coderabbitai Bot commented Sep 11, 2026

Copy link
Copy Markdown

Review Change StackReview Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Advanced

Run ID: b654b9f4-64d3-4717-9b52-a2dd5f872fe1

📥 Commits

Reviewing files that changed from the base of the PR and between 36c786a and b13903e.

📒 Files selected for processing (3)
  • .github/workflows/hourly-product-development.yml
  • docs/operations/hourly-product-development.md
  • test/hourly-product-development-proposal-bounds.test.ts

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


📝 Walkthrough

Walkthrough

시간별 product-development 워크플로가 NUL 구분 경로를 스트리밍 방식으로 계산합니다. 게시 단계는 경로를 하나씩 Base64로 인코딩합니다. 문서와 Vitest 테스트가 새 처리 방식을 반영하고 검증합니다.

Changes

시간별 product-development 워크플로

Layer / File(s) Summary
스트리밍 경로 수 계산과 검증
.github/workflows/hourly-product-development.yml, test/hourly-product-development-proposal-bounds.test.ts, docs/operations/hourly-product-development.md
제안, 패키징, 게시 작업이 NUL 바이트를 직접 계산합니다. 테스트는 버퍼 누적 제거와 세 개의 바이트 반복문을 확인합니다. 문서는 스트리밍 계산과 파일 기반 경로 비교를 설명합니다.
게시 경로 격리 인코딩
.github/workflows/hourly-product-development.yml
게시 작업이 NUL 구분 경로를 while read -d '' 루프로 읽고 base64 --wrap=0으로 경로별 값을 생성합니다. 게시 요약의 마지막 줄에는 공백 변경이 포함됩니다.

Priority: ⬇️ Low

Estimated code review effort: 2 (Simple) | ~10 minutes

Change: Bug fix

Merge Risk: ⚪ Minimal · up to b1390

The workflow changes preserve file-count limits and path-isolation behavior without introducing an actionable merge risk.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed 제목은 시간별 워크플로에서 제안 경로 수를 스트리밍 방식으로 계산하도록 변경한 핵심 내용을 정확하고 간결하게 설명합니다.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 1…
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 fix/hourly-proposal-path-count-retention-20260912

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.

@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 review on b13903e3208232086871d7f117f8f20e753eb583: no additional valid source, DDD/owner-boundary, documentation, or regression finding. The proposer, verifier, and publisher now count NUL-delimited Git path records incrementally without retaining the full pathname stream; publication path isolation emits one base64 pathname record at a time into the file-backed set. The 40-file/500,000-byte admission contract, immutable proposal identity checks, open-PR path isolation, credentials, publication authority, and fail-closed behavior remain unchanged. Operations documentation and the regression cover the new invariant. This is COMMENT-only review, not self-approval. Merge remains contingent on terminal success of all required exact-head hosted gates and a fresh pre-merge base/head/thread check.

@seonghobae
seonghobae marked this pull request as ready for review September 11, 2026 17:52
@seonghobae
seonghobae merged commit 665fbb1 into main Sep 11, 2026
18 checks passed
@seonghobae
seonghobae deleted the fix/hourly-proposal-path-count-retention-20260912 branch September 11, 2026 17:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant