Skip to content

docs: bind HTTP/1 header resource gaps to Pingora supplier paths - #44

Draft
seonghobae wants to merge 36 commits into
perf/pg-erd-bounded-origin-capacity-v1from
docs/request-header-admission-gap-v1
Draft

docs: bind HTTP/1 header resource gaps to Pingora supplier paths#44
seonghobae wants to merge 36 commits into
perf/pg-erd-bounded-origin-capacity-v1from
docs/request-header-admission-gap-v1

Conversation

@seonghobae

@seonghobae seonghobae commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

Documentation projection only. Runtime implementation remains tracked separately by pingora-gateway#43 (downstream HTTP/1 parser byte/count admission), pingora-gateway#45 (downstream HTTP/1 whole-request-header lifetime), and pingora-gateway#40 (upstream response-header lifetime). Supplier capability/disposition remains tracked by cloudflare/pingora#993, cloudflare/pingora#447, and cloudflare/pingora#992. This PR intentionally does not resolve or close any of those issues.

Parent repair completed without force-push

Final #42 is exact a5747c28310cb28703c99a1b02583ae2c0a2614e. The stale #44 head 504086addfddf48afdbf1190a448ce40e356e9d0 was preserved as historical first-parent ancestry. Ordinary merge commit 46daf30755087db6e10ee231e5f341e1ce5bc6c7 adopted final #42 as the additional parent while using final #42's tree exactly as the resolution tree; no stale child documentation blob was replayed wholesale and no destructive rebase/force-push occurred.

The still-valid #44 documentation delta was then semantically reapplied on top of that parent-correct tree. Final exact head is c026e1c8f419c6c5035a36518c3d482dfe7ff8a8. Fresh compare against final #42 is ahead=36, behind=0, with merge base exactly a5747c28310cb28703c99a1b02583ae2c0a2614e. GitHub reports this Draft PR mergeable. Final #42's CI/Supply Chain/capacity/review receipts were not transferred to this changed documentation head.

Valid documentation delta

The projection keeps the three supplier-bound header/resource gaps distinct and prevents a callback-only or speculative Admin Config field from being credited as parser/lifetime closure.

  • security: bound downstream request-header admission before callback allocation #43 / cloudflare/pingora#993 owns downstream HTTP/1 parser-phase byte/count admission. Pinned Pingora 09696b51bc59315353d96686355861604d0bb48c has finite fixed parser ceilings but no supported operator-controlled H1 parser byte/count budget through the current public server/composition API. Callback-only 431 is not pre-allocation admission; HTTP/2 decoded-header-list accounting is a separate protocol contract.
  • security: bound downstream HTTP/1 request-header slow-drip lifetime #45 / cloudflare/pingora#447 owns downstream HTTP/1 whole-request-header lifetime. A relative per-read timeout does not prove a whole-header lifetime when successful partial reads can continue; application callbacks occur after request-header parsing and cannot supply that pre-complete-header bound.
  • runtime: bound incomplete upstream response-header slow-drip #40 / cloudflare/pingora#992 owns upstream incomplete response-header lifetime. It remains separate from pg-erd v2's monotonic response-body progress lifetime.
  • No speculative Admin Config field, callback watchdog, retained legacy proxy, timeout reinterpretation, or mutable supplier fork is credited as closure.

The effective diff against final #42 is exactly 12 documentation paths: API_CONFIG_CONTRACT.md, ARCHITECTURE.md, CHANGELOG.md, CONTEXT_MAP.md, OPERABILITY.md, SECURITY.md, TEST_STRATEGY.md, THREAT_MODEL.md, TRD.md, UBIQUITOUS_LANGUAGE.md, docs/doctoring/TRACEABILITY.md, and docs/product-technical-gap-baseline.md. Production Rust, workflow semantics, routing, retry, product auth/business logic, Keyverse, Wardnet, and EgressWeave authority are unchanged.

Exact-head technical closure

The unchanged final exact head c026e1c8f419c6c5035a36518c3d482dfe7ff8a8 independently reacquired its applicable evidence after the ancestry/documentation movement:

  • CI 34286468359: test, oci-runtime, and load-contract are terminal GREEN. The test lane passed exact checkout, Rust 1.98.0 formatting/compile/test, strict lint, warnings-denied public rustdoc, pinned coverage tooling, complete owned-production coverage enforcement, and resolved-lock verification. OCI rebuilt both admitted images and exercised non-root/read-only least-privilege runtime; load rebuilt exact gateway/Rust origins and passed generic plus routed pg-erd traffic.
  • Supply Chain 34286468411: committed dependency audit, both admitted candidate-image builds, SPDX SBOM, both image scans, exact-source binding, and evidence upload are terminal GREEN.
  • PgErd bounded-origin capacity 34286468507: exact Rust 1.98.1 candidate/origins, one-worker serialization self-check, then 16-VU/1600-iteration measurement are terminal GREEN. Artifact 10079870584, digest sha256:c9c578aded6d49cfb23b14f27671dffcdaad94bc55aca94148642e784e7c35b5, records 1600 requests, 3200/3200 checks, zero HTTP request failures, aggregate p95 4.01235475 ms, backend p95 4.04371395 ms / 800, and frontend p95 3.96607155 ms / 800. This is controlled-loopback origin-capacity/connection-churn evidence, not production/TLS/WAN SLO credit.
  • Owner exact-current technical COMMENT found no actionable source/documentation/DDD defect. A later explicit CodeRabbit exact-range review of final perf: prove pg-erd against bounded origin capacity #42c026e1c8... found one metadata/evidence-integrity defect only: the PR had temporarily been marked Ready while its body still required Draft. The PR was converted back to Draft without source/docs movement; CodeRabbit reported no other actionable finding in the requested range. Technical comments are not independent governance APPROVED credit.

Documentation successor #47 is already ordinarily/non-force based on this exact final #44 head and has independently reacquired its own exact-head technical/hosted evidence. Keep #44 Draft to prevent premature stacked-branch integration while the supplier/runtime and protected-promotion roots remain unresolved.

No protected merge, release readiness, parity, shadow/canary, rollback, cutover, or Nginx/OpenResty removal credit is claimed.

@coderabbitai

coderabbitai Bot commented Sep 3, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Team

Run ID: 97de810a-fa16-45ce-ae0d-5987dec3fb58

📥 Commits

Reviewing files that changed from the base of the PR and between 924f5a7 and 926253f.

📒 Files selected for processing (6)
  • API_CONFIG_CONTRACT.md
  • CHANGELOG.md
  • OPERABILITY.md
  • TEST_STRATEGY.md
  • THREAT_MODEL.md
  • docs/product-technical-gap-baseline.md

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


📝 Walkthrough

Walkthrough

v2 Runtime Isolation에 upstream 응답 본문 진행 수명 예산을 추가했습니다. Admin Config의 버전별 동작을 문서화했습니다. Pingora HTTP/1·HTTP/2 헤더 제한과 parser admission hook의 현재 경계를 명시했습니다. 관련 추적 자료와 성능 검증 조건을 갱신했습니다.

Changes

런타임 경계 문서화

Layer / File(s) Summary
v2 응답 본문 예산 계약
ARCHITECTURE.md, CONTEXT_MAP.md, API_CONFIG_CONTRACT.md, THREAT_MODEL.md
v2는 첫 번째 비정보성 upstream 응답 헤더부터 단조 증가하는 max_upstream_response_body_ms 예산을 사용합니다. Admin Config는 v2에서 양수 값을 요구하고 v1에서는 해당 필드를 거부합니다.
헤더 admission 경계와 추적성
SECURITY.md, TRD.md, UBIQUITOUS_LANGUAGE.md, docs/doctoring/TRACEABILITY.md, CHANGELOG.md, OPERABILITY.md, THREAT_MODEL.md, docs/product-technical-gap-baseline.md
고정된 Pingora HTTP/1 파서 한계와 HTTP/2 decoded-header-list 회계를 구분했습니다. request_filter()의 사후 검사 한계와 지원되는 parser admission hook의 부재를 기록했습니다. 관련 추적 이슈와 릴리스 차단 조건을 갱신했습니다.
용량 검증 계약
TRD.md, TEST_STRATEGY.md, docs/product-technical-gap-baseline.md
bounded-origin 검증에 16 VU, 1600 요청, aggregate·backend·frontend별 독립 p95 20ms 미만 조건을 기록했습니다.

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

Merge Risk: ⚪ Minimal · up to 92625

This update documents existing HTTP/1 parser boundaries, HTTP/2 accounting distinctions, response-lifetime semantics, and bounded-origin performance contracts without changing runtime behavior. No current merge-readiness risk remains.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Linked Issues check ⚠️ Warning 문서는 #993의 현재 한계와 필요한 Pingora parser-phase 설정 훅을 정확히 기록합니다. 그러나 #993이 요구하는 configurable HTTP/1 request-header parser admission limits를 구현하거나 공개 API로 제공하지 않습니다. #993의 요구사항을 충족하려면 Pingora에 지원되는 HTTP/1 parser 또는 composition 옵션을 추가해야 합니다. 해당 기능을 별도 구현하지 않는 문서 PR이라면 #993을 직접 연결 이슈로 사용하지 않거나, 이 PR이 문서 추적만 수행한다는 별도 이슈를 연결해야 합니다.
✅ Passed checks (4 passed)
Check name Status Explanation
Out of Scope Changes check ✅ Passed 변경 사항은 모두 문서 파일에 한정되며, PR 목표인 Pingora HTTP/1 parser admission 경계와 관련 이슈 추적을 설명합니다. 생산 코드, 라우팅, 인증, 배포 동작의 변경은 없습니다.
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 0…
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed 제목은 문서 변경임을 명시하고, HTTP/1 헤더 리소스 격차를 Pingora 공급자 경로에 연결하는 PR의 핵심 목적을 정확히 요약합니다.
  • Fix all pre-merge checks with AI
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch docs/request-header-admission-gap-v1

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.

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

Please review exact head dadbca5013c0d7db8377013d39cde35af2ade9c9 against base 0145c455f5010bcff2af96e2293530c4fdf35aa4, focusing on supplier-source accuracy, HTTP/1 versus HTTP/2 header-limit semantics, APA/TRACEABILITY correctness, and whether the #42 bounded-origin performance description overclaims production evidence.

@coderabbitai

coderabbitai Bot commented Sep 3, 2026

Copy link
Copy Markdown
🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

base='0145c455f5010bcff2af96e2293530c4fdf35aa4'
head='dadbca5013c0d7db8377013d39cde35af2ade9c9'

git cat-file -e "${base}^{commit}"
git cat-file -e "${head}^{commit}"

printf '%s\n' '=== Repository guidance ==='
fd -HI -t f '^(AGENTS|CONTRIBUTING|CODING|REVIEW).*|^\.coderabbit\.ya?ml$' . \
  -E .git -E node_modules -E target \
  | sort \
  | while IFS= read -r file; do
      echo "--- ${file}"
      sed -n '1,240p' "$file"
    done

printf '%s\n' '=== Exact changed files ==='
git diff --name-status "$base" "$head"

printf '%s\n' '=== Exact range diff ==='
git diff --find-renames --find-copies --check "$base" "$head"
git diff --find-renames --find-copies --unified=100 "$base" "$head" -- \
  TRD.md SECURITY.md docs/doctoring/TRACEABILITY.md

printf '%s\n' '=== Current document outlines and relevant terms ==='
for file in TRD.md SECURITY.md docs/doctoring/TRACEABILITY.md; do
  if [ -f "$file" ]; then
    echo "--- ${file}"
    rg -n -i -C 4 \
      'pingora|header|MAX_HEADERS|INIT_HEADER_BUF_SIZE|MAX_HEADER_SIZE|max_header_list_size|H2Options|ProxyHttp|request_filter|p95|16-VU|1600|four-worker|supplier|`#43`|`#993`|APA|reference' \
      "$file" || true
  fi
done

Length of output: 80340


🏁 Script executed:

#!/bin/bash
set -euo pipefail

sha='09696b51bc59315353d96686355861604d0bb48c'
repo='cloudflare/pingora'

printf '%s\n' '=== Dependency pin ==='
rg -n -C 3 'pingora|09696b51bc59315353d96686355861604d0bb48c' Cargo.toml Cargo.lock 2>/dev/null || true

printf '%s\n' '=== Supplier issue `#993` metadata ==='
gh api "repos/${repo}/issues/993" \
  --jq '{number, state, title, user: .user.login, created_at, updated_at, pull_request}' || true

printf '%s\n' '=== Pinned HTTP/1 common.rs constants ==='
gh api "repos/${repo}/contents/pingora-core/src/protocols/http/v1/common.rs?ref=${sha}" \
  --jq '.content' | base64 -d \
  | nl -ba \
  | grep -E -C 5 'MAX_HEADERS|INIT_HEADER_BUF_SIZE|MAX_HEADER_SIZE' || true

printf '%s\n' '=== Pinned HTTP/1 server.rs parse and request construction flow ==='
gh api "repos/${repo}/contents/pingora-core/src/protocols/http/v1/server.rs?ref=${sha}" \
  --jq '.content' | base64 -d \
  | nl -ba \
  | grep -E -C 12 'read_request|MAX_HEADER_SIZE|RequestHeader|parse' || true

printf '%s\n' '=== Pinned HTTP/2 server.rs options ==='
gh api "repos/${repo}/contents/pingora-core/src/protocols/http/v2/server.rs?ref=${sha}" \
  --jq '.content' | base64 -d \
  | nl -ba \
  | grep -E -C 10 'default_h2_options|max_header_list_size|max_concurrent_streams|H2Options' || true

printf '%s\n' '=== Pinned ProxyHttp request_filter declaration and invocation ==='
gh api "repos/${repo}/contents/pingora-proxy/src/proxy_trait.rs?ref=${sha}" \
  --jq '.content' | base64 -d \
  | nl -ba \
  | grep -E -C 8 'request_filter' || true
gh api "repos/${repo}/contents/pingora-proxy/src/lib.rs?ref=${sha}" \
  --jq '.content' | base64 -d \
  | nl -ba \
  | grep -E -C 12 'request_filter' || true

printf '%s\n' '=== Load-test and bounded-origin source candidates ==='
fd -HI -t f . -E .git -E node_modules -E target \
  | grep -Ei '(k6|load|performance|pg.*erd|migration|traffic|benchmark)' \
  | sort \
  | head -n 200

printf '%s\n' '=== Bounded-origin and performance contract references ==='
rg -n -i -C 5 \
  '1600|16\s*VU|four workers|4 workers|Connection:\s*close|service delay|150\s*ms|bounded accept|tagged.*p95|http_req_duration|k6' \
  -g '!target/**' -g '!node_modules/**' . || true

Length of output: 101848


🏁 Script executed:

#!/bin/bash
set -euo pipefail

sha='09696b51bc59315353d96686355861604d0bb48c'
repo='cloudflare/pingora'

fetch_source() {
  local path="$1"
  gh api "repos/${repo}/contents/${path}?ref=${sha}" --jq '.content' | base64 -d
}

numbered_matches() {
  local expression="$1"
  awk -v expression="$expression" '
    { lines[NR] = $0 }
    $0 ~ expression {
      start = NR - 10; if (start < 1) start = 1
      end = NR + 12
      for (line = start; line <= end; line++) {
        if (!shown[line]++) printf "%6d  %s\n", line, lines[line]
      }
      print "------"
    }
  '
}

printf '%s\n' '=== Pinned HTTP/1 constants ==='
fetch_source 'pingora-core/src/protocols/http/v1/common.rs' \
  | numbered_matches 'MAX_HEADERS|INIT_HEADER_BUF_SIZE|MAX_HEADER_SIZE'

printf '%s\n' '=== Pinned HTTP/1 parsing and RequestHeader construction ==='
fetch_source 'pingora-core/src/protocols/http/v1/server.rs' \
  | numbered_matches 'read_request|MAX_HEADER_SIZE|RequestHeader|parse'

printf '%s\n' '=== Pinned HTTP/2 options ==='
fetch_source 'pingora-core/src/protocols/http/v2/server.rs' \
  | numbered_matches 'default_h2_options|max_header_list_size|max_concurrent_streams|H2Options'

printf '%s\n' '=== Pinned ProxyHttp request_filter trait and call site ==='
fetch_source 'pingora-proxy/src/proxy_trait.rs' \
  | numbered_matches 'request_filter'
fetch_source 'pingora-proxy/src/lib.rs' \
  | numbered_matches 'request_filter'

printf '%s\n' '=== Capacity runner: fixture validation, origin start, gateway readiness, and k6 ==='
awk '
  NR >= 1 && NR <= 230 { printf "%6d  %s\n", NR, $0 }
' tests/load/run_pg_erd_capacity.sh

printf '%s\n' '=== Capacity k6 contract ==='
awk '
  NR >= 1 && NR <= 110 { printf "%6d  %s\n", NR, $0 }
' tests/load/pg_erd_gateway_capacity.js

printf '%s\n' '=== Capacity workflow invocation ==='
awk '
  NR >= 1 && NR <= 240 { printf "%6d  %s\n", NR, $0 }
' .github/workflows/pg-erd-capacity.yml

printf '%s\n' '=== GitHub issue `#993` author metadata ==='
gh api "repos/${repo}/issues/993" \
  --jq '{html_url, title, state, created_at, user: {login: .user.login, name: .user.name}}'

Length of output: 79258


🏁 Script executed:

#!/bin/bash
set -euo pipefail

sha='09696b51bc59315353d96686355861604d0bb48c'
repo='cloudflare/pingora'

fetch_source() {
  gh api "repos/${repo}/contents/$1?ref=${sha}" --jq '.content' | base64 -d
}

printf '%s\n' '=== HTTP/1 common.rs: all configured parser constants ==='
fetch_source 'pingora-core/src/protocols/http/v1/common.rs' \
  | awk '/MAX_HEADERS|INIT_HEADER_BUF_SIZE|MAX_HEADER_SIZE/ { printf "%6d  %s\n", NR, $0 }'

printf '%s\n' '=== HTTP/1 server.rs: read buffer initialization and read_request parse loop ==='
fetch_source 'pingora-core/src/protocols/http/v1/server.rs' \
  | awk 'NR >= 200 && NR <= 470 { printf "%6d  %s\n", NR, $0 }'

printf '%s\n' '=== HTTP/2 server.rs: default H2 options ==='
fetch_source 'pingora-core/src/protocols/http/v2/server.rs' \
  | awk 'NR >= 45 && NR <= 100 { printf "%6d  %s\n", NR, $0 }'

printf '%s\n' '=== HTTP/2 server.rs: default-options test values ==='
fetch_source 'pingora-core/src/protocols/http/v2/server.rs' \
  | awk 'NR >= 1248 && NR <= 1288 { printf "%6d  %s\n", NR, $0 }'

printf '%s\n' '=== Proxy request_filter invocation context ==='
fetch_source 'pingora-proxy/src/lib.rs' \
  | awk 'NR >= 1018 && NR <= 1105 { printf "%6d  %s\n", NR, $0 }'

printf '%s\n' '=== Pingora tree paths that call read_request and construct Session ==='
tree_json=$(gh api "repos/${repo}/git/trees/${sha}?recursive=1")
printf '%s\n' "$tree_json" \
  | jq -r '.tree[] | select(.path | test("(^|/)(server|proxy).*\\.rs$")) | .path' \
  | while IFS= read -r path; do
      content=$(fetch_source "$path" || true)
      if printf '%s\n' "$content" | grep -qE 'read_request\(\)|Session::'; then
        echo "--- ${path}"
        printf '%s\n' "$content" \
          | awk '/read_request\(\)|Session::/ { printf "%6d  %s\n", NR, $0 }'
      fi
    done

Length of output: 32119


@seonghobae Review complete for exact head dadbca5013c0d7db8377013d39cde35af2ade9c9 against base 0145c455f5010bcff2af96e2293530c4fdf35aa4.

I found no blocking issues in the requested scope.

  • The Pingora pin in Cargo.toml and Cargo.lock matches 09696b51bc59315353d96686355861604d0bb48c.
  • The HTTP/1 claim is accurate. The pinned source defines MAX_HEADERS = 256, INIT_HEADER_BUF_SIZE = 4096, and MAX_HEADER_SIZE = 1_048_575. HttpSession::read_request() buffers and parses the request, then constructs RequestHeader before ProxyHttp::request_filter() runs.
  • The HTTP/2 claim is accurate. The pinned source uses H2Options::max_header_list_size for a 64 KiB decoded header-list limit. This is distinct from HTTP/1 wire/parser-byte handling.
  • TRD.md and SECURITY.md correctly avoid treating a callback-only 431 response as parser-phase resource admission.
  • docs/doctoring/TRACEABILITY.md cites the relevant pinned HTTP/1 and HTTP/2 source files. The APA ledger entry for cloudflare/pingora#993 matches the open supplier issue metadata.
  • The #42 bounded-origin description matches the checked source contract: four workers per origin, bounded queue, Connection: close, 1 ms service delay, 16 VUs, 1600 requests, route-body checks, zero failures, aggregate p95, and tagged backend/frontend p95 thresholds.
  • The performance text does not overclaim production evidence. It labels the checks as controlled local regression bounds and keeps production-origin, TLS, network, deployment, and container/orchestrator evidence open.
⚠️ Action not completed

Head commit changed.

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

Please restart review on current exact head 924f5a7b8cf60712348beb11c846d4288c78177e (base remains 0145c455f5010bcff2af96e2293530c4fdf35aa4). The additional docs-only delta repairs DDD drift in ARCHITECTURE.md, CONTEXT_MAP.md, and UBIQUITOUS_LANGUAGE.md, and strengthens TRACEABILITY with the public HttpServerOptions source. Please treat the prior dadbca... request as superseded.

@coderabbitai

coderabbitai Bot commented Sep 3, 2026

Copy link
Copy Markdown
🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

base='0145c455f5010bcff2af96e2293530c4fdf35aa4'
head='924f5a7b8cf60712348beb11c846d4288c78177e'

git cat-file -e "${base}^{commit}"
git cat-file -e "${head}^{commit}"

printf '%s\n' '=== Repository guidance ==='
fd -HI -t f '^(AGENTS|CONTRIBUTING|CODING|REVIEW).*|^\.coderabbit\.ya?ml$' . \
  -E .git -E node_modules -E target \
  | sort \
  | while IFS= read -r file; do
      echo "--- ${file}"
      sed -n '1,260p' "$file"
    done

printf '%s\n' '=== Exact changed files ==='
git diff --name-status "$base" "$head"

printf '%s\n' '=== Diff validation ==='
git diff --check "$base" "$head"

printf '%s\n' '=== Targeted exact diff ==='
git diff --unified=80 "$base" "$head" -- \
  TRD.md SECURITY.md ARCHITECTURE.md CONTEXT_MAP.md UBIQUITOUS_LANGUAGE.md \
  docs/doctoring/TRACEABILITY.md

printf '%s\n' '=== Current relevant passages ==='
rg -n -i -C 5 \
  'pingora|httpserveroptions|max_header|max.*header|h2options|request_filter|read_request|\
MAX_HEADERS|INIT_HEADER_BUF_SIZE|MAX_HEADER_SIZE|response.body|response-body|progress|\
admin config|bounded.origin|16.vu|1600|four.worker|p95|production|tls|apa|`#43`|`#993`' \
  TRD.md SECURITY.md ARCHITECTURE.md CONTEXT_MAP.md UBIQUITOUS_LANGUAGE.md \
  docs/doctoring/TRACEABILITY.md || true

printf '%s\n' '=== Docs-only verification ==='
git diff --numstat "$base" "$head"

Length of output: 68566


🏁 Script executed:

#!/bin/bash
set -euo pipefail

sha='09696b51bc59315353d96686355861604d0bb48c'
repo='cloudflare/pingora'

fetch_source() {
  gh api "repos/${repo}/contents/$1?ref=${sha}" --jq '.content' | base64 -d
}

printf '%s\n' '=== Pin and supplier issue state ==='
rg -n -C 2 '09696b51bc59315353d96686355861604d0bb48c|pingora\s*=' Cargo.toml Cargo.lock
gh api "repos/${repo}/issues/993" \
  --jq '{number, state, title, html_url, user: .user.login, created_at, updated_at}'

printf '%s\n' '=== HTTP/1 parser constants ==='
fetch_source 'pingora-core/src/protocols/http/v1/common.rs' \
  | nl -ba | grep -E -C 4 'MAX_HEADERS|INIT_HEADER_BUF_SIZE|MAX_HEADER_SIZE'

printf '%s\n' '=== HTTP/1 parse order and RequestHeader construction ==='
fetch_source 'pingora-core/src/protocols/http/v1/server.rs' \
  | nl -ba | grep -E -C 16 'read_request|MAX_HEADER_SIZE|RequestHeader|INIT_HEADER_BUF_SIZE'

printf '%s\n' '=== Public server options ==='
fetch_source 'pingora-core/src/apps/mod.rs' \
  | nl -ba | grep -E -C 12 'struct HttpServerOptions|HttpServerOptions|header|max_'

printf '%s\n' '=== HTTP/2 header-list defaults ==='
fetch_source 'pingora-core/src/protocols/http/v2/server.rs' \
  | nl -ba | grep -E -C 12 'default_h2_options|max_header_list_size|max_concurrent_streams|H2Options'

printf '%s\n' '=== Proxy callback signature and invocation ==='
fetch_source 'pingora-proxy/src/proxy_trait.rs' \
  | nl -ba | grep -E -C 8 'request_filter'
fetch_source 'pingora-proxy/src/lib.rs' \
  | nl -ba | grep -E -C 12 'request_filter'

printf '%s\n' '=== Relevant repository source and load-contract files ==='
fd -HI -t f . -E .git -E node_modules -E target \
  | grep -E '(^|/)(runtime_isolation|migration_admin|migration_proxy|gateway_proxy)\.rs$|pg_erd|run_pg_erd_capacity|pg-erd-capacity' \
  | sort

printf '%s\n' '=== Response-lifetime and bounded-origin definitions ==='
rg -n -i -C 6 \
  'max_upstream_response_body_ms|upstream_response_filter|upstream_response_body_filter|\
response.body.*progress|bounded.accept|Connection: close|service.delay|1600|16.*VU|\
http_req_duration|backend.*p95|frontend.*p95' \
  -g '!target/**' -g '!node_modules/**' . || true

Length of output: 7864


🏁 Script executed:

#!/bin/bash
set -euo pipefail

sha='09696b51bc59315353d96686355861604d0bb48c'
repo='cloudflare/pingora'

fetch_source() {
  gh api "repos/${repo}/contents/$1?ref=${sha}" --jq '.content' | base64 -d
}

number_matches() {
  awk -v pattern="$1" '
    { line[NR] = $0 }
    $0 ~ pattern {
      first = NR - 12; if (first < 1) first = 1
      last = NR + 16
      for (i = first; i <= last; i++) {
        if (!printed[i]++) printf "%6d  %s\n", i, line[i]
      }
      print "------"
    }'
}

printf '%s\n' '=== HTTP/1 fixed parser values ==='
fetch_source 'pingora-core/src/protocols/http/v1/common.rs' \
  | number_matches 'MAX_HEADERS|INIT_HEADER_BUF_SIZE|MAX_HEADER_SIZE'

printf '%s\n' '=== HTTP/1 read and construction sequence ==='
fetch_source 'pingora-core/src/protocols/http/v1/server.rs' \
  | number_matches 'read_request|MAX_HEADER_SIZE|RequestHeader|INIT_HEADER_BUF_SIZE'

printf '%s\n' '=== HttpServerOptions fields ==='
fetch_source 'pingora-core/src/apps/mod.rs' \
  | number_matches 'struct HttpServerOptions|HttpServerOptions|max_|header'

printf '%s\n' '=== HTTP/2 defaults ==='
fetch_source 'pingora-core/src/protocols/http/v2/server.rs' \
  | number_matches 'default_h2_options|max_header_list_size|max_concurrent_streams|H2Options'

printf '%s\n' '=== request_filter order ==='
fetch_source 'pingora-proxy/src/proxy_trait.rs' | number_matches 'request_filter'
fetch_source 'pingora-proxy/src/lib.rs' | number_matches 'request_filter'

printf '%s\n' '=== Candidate response and capacity files ==='
fd -HI -t f . -E .git -E node_modules -E target \
  | grep -E '(^|/)(runtime_isolation|migration_admin|migration_proxy|gateway_proxy)\.rs$|pg_erd|run_pg_erd_capacity|pg-erd-capacity' \
  | sort

printf '%s\n' '=== Response lifetime and bounded-origin contract locations ==='
rg -n -i -C 6 -e 'max_upstream_response_body_ms' \
  -e 'upstream_response_filter' \
  -e 'upstream_response_body_filter' \
  -e 'Connection: close' \
  -e '1600' \
  -e 'http_req_duration' \
  -e 'backend.*p95' \
  -e 'frontend.*p95' \
  -g '!target/**' -g '!node_modules/**' . || true

Length of output: 228178


🏁 Script executed:

#!/bin/bash
set -euo pipefail

sha='09696b51bc59315353d96686355861604d0bb48c'
repo='cloudflare/pingora'

fetch_range() {
  local path="$1"
  local first="$2"
  local last="$3"
  gh api "repos/${repo}/contents/${path}?ref=${sha}" --jq '.content' \
    | base64 -d \
    | awk -v first="$first" -v last="$last" 'NR >= first && NR <= last { printf "%6d  %s\n", NR, $0 }'
}

printf '%s\n' '=== HTTP/1 constants ==='
fetch_range 'pingora-core/src/protocols/http/v1/common.rs' 20 55

printf '%s\n' '=== HTTP/1 read_request parser loop ==='
fetch_range 'pingora-core/src/protocols/http/v1/server.rs' 272 375

printf '%s\n' '=== Public HttpServerOptions definition ==='
fetch_range 'pingora-core/src/apps/mod.rs' 60 115

printf '%s\n' '=== HTTP/2 bounded defaults and handshake ==='
fetch_range 'pingora-core/src/protocols/http/v2/server.rs' 60 100
fetch_range 'pingora-core/src/protocols/http/v2/server.rs' 1250 1285

printf '%s\n' '=== Local response-lifetime callback bodies ==='
sed -n '200,250p' src/runtime_isolation.rs
sed -n '285,350p' src/migration_proxy.rs

printf '%s\n' '=== Capacity fixture and runner settings ==='
sed -n '1,210p' tests/load/run_pg_erd_capacity.sh
sed -n '1,100p' tests/load/pg_erd_gateway_capacity.js

Length of output: 26679


@seonghobae Review complete for exact head 924f5a7b8cf60712348beb11c846d4288c78177e against base 0145c455f5010bcff2af96e2293530c4fdf35aa4.

I found no blocking issues in the requested scope.

  • The diff is documentation-only and passes git diff --check.
  • The Pingora pin is consistent in Cargo.toml and Cargo.lock.
  • The HTTP/1 documentation is accurate. The pinned source has fixed MAX_HEADERS = 256, INIT_HEADER_BUF_SIZE = 4096, and MAX_HEADER_SIZE = 1_048_575. HttpSession::read_request() can accept an oversized first read after allocation. It constructs RequestHeader before the proxy callback phase.
  • The HttpServerOptions evidence supports the claimed gap. Its public fields do not provide an HTTP/1 request-header byte or count limit.
  • The HTTP/2 documentation is accurate. H2Options::max_header_list_size is separate decoded-header-list accounting. It is not an HTTP/1 wire or parser-byte limit.
  • TRD.md and SECURITY.md correctly reject a ProxyHttp::request_filter()-only 431 response as parser-phase resource admission.
  • cloudflare/pingora#993 is open. The documentation correctly retains it as a supplier dependency.
  • The Runtime Isolation, Admin Config, and Pingora Delivery descriptions match the version-2 response-body lifetime implementation. The text correctly states that the control is progress-driven and does not interrupt a pending read at an exact deadline.
  • The bounded-origin performance description matches the source contract. It uses four workers per origin, a bounded queue, Connection: close, 1 ms service delay, 16 VUs, 1600 requests, aggregate p95, and per-route p95 gates.
  • The performance text does not overclaim production evidence. It keeps production-origin, TLS, network, container/orchestrator, and deployment measurements open.
✅ 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

Please review current exact head 926253f4b72d764a74e8cb32c639e822234f61b6, including the later OPERABILITY.md, API_CONFIG_CONTRACT.md, docs/product-technical-gap-baseline.md, and CHANGELOG.md repairs. Prior review coverage stopped at 924f5a7b8cf60712348beb11c846d4288c78177e, so do not transfer that result to this head.

@coderabbitai

coderabbitai Bot commented Sep 3, 2026

Copy link
Copy Markdown
🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

base='0145c455f5010bcff2af96e2293530c4fdf35aa4'
previous='924f5a7b8cf60712348beb11c846d4288c78177e'
head='926253f4b72d764a74e8cb32c639e822234f61b6'

git cat-file -e "${base}^{commit}"
git cat-file -e "${previous}^{commit}"
git cat-file -e "${head}^{commit}"

printf '%s\n' '=== Repository guidance ==='
fd -HI -t f '^(AGENTS|CONTRIBUTING|CODING|REVIEW).*|^\.coderabbit\.ya?ml$' . \
  -E .git -E node_modules -E target \
  | sort \
  | while IFS= read -r file; do
      echo "--- ${file}"
      sed -n '1,260p' "$file"
    done

printf '%s\n' '=== Complete exact range ==='
git diff --name-status "$base" "$head"
git diff --check "$base" "$head"
git diff --stat "$base" "$head"

printf '%s\n' '=== Later delta after prior review head ==='
git diff --name-status "$previous" "$head"
git diff --check "$previous" "$head"
git diff --unified=100 "$previous" "$head" -- \
  OPERABILITY.md API_CONFIG_CONTRACT.md docs/product-technical-gap-baseline.md CHANGELOG.md

printf '%s\n' '=== Full relevant documentation diff ==='
git diff --unified=60 "$base" "$head" -- \
  ARCHITECTURE.md CONTEXT_MAP.md SECURITY.md TRD.md UBIQUITOUS_LANGUAGE.md \
  OPERABILITY.md API_CONFIG_CONTRACT.md docs/product-technical-gap-baseline.md \
  docs/doctoring/TRACEABILITY.md CHANGELOG.md

printf '%s\n' '=== Current documentation statements ==='
rg -n -i -C 5 \
  -e 'pingora' \
  -e 'HttpServerOptions' \
  -e 'MAX_HEADERS' \
  -e 'INIT_HEADER_BUF_SIZE' \
  -e 'MAX_HEADER_SIZE' \
  -e 'request_filter' \
  -e 'max_header_list_size' \
  -e 'HTTP/1|HTTP/2' \
  -e 'request-header parser admission' \
  -e 'max_upstream_response_body_ms' \
  -e 'response-body lifetime' \
  -e 'four workers|4 workers|16 VU|1600|Connection: close|1 ms|p95|production' \
  -e '`#43`|`#993`|APA|traceability' \
  ARCHITECTURE.md CONTEXT_MAP.md SECURITY.md TRD.md UBIQUITOUS_LANGUAGE.md \
  OPERABILITY.md API_CONFIG_CONTRACT.md docs/product-technical-gap-baseline.md \
  docs/doctoring/TRACEABILITY.md CHANGELOG.md || true

printf '%s\n' '=== Dependency pin and source candidates ==='
rg -n -C 3 'pingora|09696b51bc59315353d96686355861604d0bb48c' Cargo.toml Cargo.lock 2>/dev/null || true
fd -HI -t f . -E .git -E node_modules -E target \
  | grep -E '(^|/)(runtime_isolation|migration_admin|migration_proxy|gateway_proxy)\.rs$|pg_erd|run_pg_erd_capacity|pg-erd-capacity' \
  | sort

Length of output: 202858


🏁 Script executed:

#!/bin/bash
set -euo pipefail

sha='09696b51bc59315353d96686355861604d0bb48c'
repo='cloudflare/pingora'

fetch_source() {
  gh api "repos/${repo}/contents/$1?ref=${sha}" --jq '.content' | base64 -d
}

show_matches() {
  local pattern="$1"
  awk -v pattern="$pattern" '
    { lines[NR] = $0 }
    $0 ~ pattern {
      first = NR - 12; if (first < 1) first = 1
      last = NR + 18
      for (i = first; i <= last; i++) {
        if (!printed[i]++) printf "%6d  %s\n", i, lines[i]
      }
      print "------"
    }'
}

printf '%s\n' '=== Supplier issue status ==='
gh api "repos/${repo}/issues/993" \
  --jq '{number, state, title, html_url, created_at, updated_at, user: {login: .user.login, name: .user.name}}'

printf '%s\n' '=== Pinned HTTP/1 parser limits and parse sequence ==='
fetch_source 'pingora-core/src/protocols/http/v1/common.rs' \
  | show_matches 'MAX_HEADERS|INIT_HEADER_BUF_SIZE|MAX_HEADER_SIZE'
fetch_source 'pingora-core/src/protocols/http/v1/server.rs' \
  | show_matches 'read_request|MAX_HEADER_SIZE|RequestHeader|INIT_HEADER_BUF_SIZE'

printf '%s\n' '=== Pinned public server options and HTTP/2 defaults ==='
fetch_source 'pingora-core/src/apps/mod.rs' \
  | show_matches 'struct HttpServerOptions|HttpServerOptions|max_|header'
fetch_source 'pingora-core/src/protocols/http/v2/server.rs' \
  | show_matches 'default_h2_options|max_header_list_size|max_concurrent_streams|H2Options'

printf '%s\n' '=== Pinned proxy callback declaration and call context ==='
fetch_source 'pingora-proxy/src/proxy_trait.rs' | show_matches 'request_filter'
fetch_source 'pingora-proxy/src/lib.rs' | show_matches 'request_filter'

printf '%s\n' '=== Local source maps ==='
ast-grep outline src/migration_admin.rs --items all
ast-grep outline src/runtime_isolation.rs --items all
ast-grep outline src/migration_proxy.rs --items all

printf '%s\n' '=== Local configuration and response-lifetime implementation ==='
rg -n -C 10 \
  -e 'max_upstream_response_body_ms' \
  -e 'version' \
  -e 'build_proxy' \
  src/migration_admin.rs src/runtime_isolation.rs src/migration_proxy.rs

printf '%s\n' '=== Bounded-origin capacity contract ==='
sed -n '1,240p' tests/load/run_pg_erd_capacity.sh
sed -n '1,160p' tests/load/pg_erd_gateway_capacity.js
sed -n '1,260p' .github/workflows/pg-erd-capacity.yml

printf '%s\n' '=== Exact later changes with line numbers ==='
git diff --unified=30 924f5a7b8cf60712348beb11c846d4288c78177e 926253f4b72d764a74e8cb32c639e822234f61b6 -- \
  OPERABILITY.md API_CONFIG_CONTRACT.md docs/product-technical-gap-baseline.md CHANGELOG.md \
  | cat

Length of output: 185343


@seonghobae Review complete for exact head 926253f4b72d764a74e8cb32c639e822234f61b6 against base 0145c455f5010bcff2af96e2293530c4fdf35aa4.

I reviewed the delta after 924f5a7b8cf60712348beb11c846d4288c78177e independently.

I found no blocking issues in the requested scope.

  • The complete documentation diff and the later documentation delta pass git diff --check.
  • OPERABILITY.md and API_CONFIG_CONTRACT.md accurately state that generic v1 and pg-erd v1/v2 have no configurable HTTP/1 request-header parser-admission budget.
  • The documents correctly state that ProxyHttp::request_filter() occurs after request-header construction. A callback-only HTTP 431 response is not parser-phase resource admission.
  • The Pingora dependency remains pinned consistently to 09696b51bc59315353d96686355861604d0bb48c.
  • The referenced supplier issue cloudflare/pingora#993 is open and has the documented capability request.
  • The HTTP/1 and HTTP/2 distinction remains correct. HTTP/1 uses supplier parser ceilings. HTTP/2 uses separate decoded header-list accounting through H2Options::max_header_list_size.
  • The version-2 max_upstream_response_body_ms description matches the local configuration and Runtime Isolation behavior. The text correctly excludes an exact interrupt of a pending read.
  • The bounded-origin performance description matches the checked load contract. It includes four workers per origin, Connection: close, 1 ms service delay, 16 VUs, 1600 requests, and aggregate plus per-route p95 gates.
  • The new CHANGELOG.md and gap-baseline wording does not claim production evidence. It keeps production-origin, TLS, network, multi-hop, deployment, and orchestration measurements as open requirements.
✅ 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

CodeRabbit's current-head source/document review is clean, but the pre-merge Linked Issues warning was valid metadata feedback: this documentation-only projection must not imply that it implements or closes the runtime supplier gap. I removed the leading Refs #43 directive from the PR body and now state explicitly that pingora-gateway#43 and cloudflare/pingora#993 remain open implementation/supplier dependencies. No commit/head movement was needed for this metadata-only repair; exact head remains 926253f4b72d764a74e8cb32c639e822234f61b6. Please re-evaluate the linked-issue pre-merge check against the updated body when the review lane is next available.

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

Please review current exact head 56138812e7527fadc7264bb4792a0b782e9cf4e7, not predecessor 926253f4.... The new delta is documentation-only and separates three supplier-bound invariants without claiming implementation: downstream H1 parser byte/count admission (#43/#993), downstream H1 whole-request-header lifetime (#45/#447), and upstream response-header lifetime (#40/#992). Please verify TRD, THREAT_MODEL, TRACEABILITY, and docs/product-technical-gap-baseline.md for source accuracy, ownership boundaries, and contradictory release/closure claims. No predecessor review evidence transfers to this head.

@coderabbitai

coderabbitai Bot commented Sep 3, 2026

Copy link
Copy Markdown
🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

base='0145c455f5010bcff2af96e2293530c4fdf35aa4'
head='56138812e7527fadc7264bb4792a0b782e9cf4e7'
supplier_sha='09696b51bc59315353d96686355861604d0bb48c'
supplier_repo='cloudflare/pingora'

git cat-file -e "${base}^{commit}"
git cat-file -e "${head}^{commit}"

printf '%s\n' '=== Repository guidance ==='
fd -HI -t f '^(AGENTS|CONTRIBUTING|CODING|REVIEW).*|^\.coderabbit\.ya?ml$' . \
  -E .git -E node_modules -E target | sort | while IFS= read -r file; do
  echo "--- ${file}"
  sed -n '1,260p' "$file"
done

printf '%s\n' '=== Exact change range ==='
git diff --name-status "$base" "$head"
git diff --check "$base" "$head"
git diff --stat "$base" "$head"
git diff --unified=100 "$base" "$head" -- \
  TRD.md THREAT_MODEL.md docs/doctoring/TRACEABILITY.md \
  docs/product-technical-gap-baseline.md

printf '%s\n' '=== Current targeted documentation statements ==='
rg -n -i -C 7 \
  -e 'HTTP/1|HTTP/2|H1|H2' \
  -e 'parser|admission|byte|count|header lifetime|whole.request.header' \
  -e 'response.header|upstream.*header|header.*upstream' \
  -e 'Pingora|HttpServerOptions|read_request|request_filter' \
  -e 'MAX_HEADERS|INIT_HEADER_BUF_SIZE|MAX_HEADER_SIZE|max_header_list_size' \
  -e 'release|blocker|close[sd]?|implement|ship|production' \
  -e '`#43`|`#45`|`#40`|`#993`|`#447`|`#992`' \
  TRD.md THREAT_MODEL.md docs/doctoring/TRACEABILITY.md \
  docs/product-technical-gap-baseline.md || true

printf '%s\n' '=== Local dependency pin and related source map ==='
rg -n -C 3 'pingora|09696b51bc59315353d96686355861604d0bb48c' Cargo.toml Cargo.lock 2>/dev/null || true
fd -HI -t f -E .git -E node_modules -E target \
  | grep -E '(^|/)(runtime_isolation|migration_admin|migration_proxy|gateway_proxy)\.rs$' \
  | sort || true
rg -n -i -C 6 \
  -e 'header.*deadline|header.*timeout|max_.*header' \
  -e 'upstream.*header|response.*header' \
  -e 'request_filter|read_request' \
  -g '!target/**' -g '!node_modules/**' src tests 2>/dev/null || true

printf '%s\n' '=== Current PR metadata ==='
gh pr view 44 --json number,headRefOid,baseRefOid,isDraft,title,body,closingIssuesReferences \
  --jq '{number, headRefOid, baseRefOid, isDraft, title, body, closingIssuesReferences: [.closingIssuesReferences[] | {number, repository: .repository.nameWithOwner, state}]}'

printf '%s\n' '=== Project and supplier issue metadata ==='
for spec in \
  'ContextualWisdomLab/pingora-gateway 43' \
  'ContextualWisdomLab/pingora-gateway 45' \
  'ContextualWisdomLab/pingora-gateway 40' \
  'cloudflare/pingora 993' \
  'cloudflare/pingora 447' \
  'cloudflare/pingora 992'
do
  set -- $spec
  repo="$1"
  number="$2"
  gh api "repos/${repo}/issues/${number}" \
    --jq '{repository: "'"$repo"'", number, state, title, html_url, pull_request}'
done

fetch_source() {
  gh api "repos/${supplier_repo}/contents/$1?ref=${supplier_sha}" --jq '.content' | base64 -d
}

printf '%s\n' '=== Pinned HTTP/1 parser limits and parse flow ==='
fetch_source 'pingora-core/src/protocols/http/v1/common.rs' \
  | nl -ba | grep -E -C 6 'MAX_HEADERS|INIT_HEADER_BUF_SIZE|MAX_HEADER_SIZE' || true
fetch_source 'pingora-core/src/protocols/http/v1/server.rs' \
  | nl -ba | grep -E -C 14 'read_request|MAX_HEADER_SIZE|RequestHeader|parse' || true

printf '%s\n' '=== Pinned public server options and HTTP/2 options ==='
fetch_source 'pingora-core/src/apps/mod.rs' \
  | nl -ba | grep -E -C 10 'struct HttpServerOptions|HttpServerOptions|header|max_' || true
fetch_source 'pingora-core/src/protocols/http/v2/server.rs' \
  | nl -ba | grep -E -C 10 'max_header_list_size|H2Options|header' || true

printf '%s\n' '=== Pinned upstream response-header handling candidates ==='
for path in \
  pingora-proxy/src/proxy_trait.rs \
  pingora-proxy/src/lib.rs \
  pingora-core/src/protocols/http/v1/client.rs
do
  echo "--- ${path}"
  fetch_source "$path" | nl -ba \
    | grep -E -i -C 10 'response_filter|response.*header|read_response|header.*timeout' || true
done

Length of output: 204452


🏁 Script executed:

#!/bin/bash
set -euo pipefail

base='0145c455f5010bcff2af96e2293530c4fdf35aa4'
head='56138812e7527fadc7264bb4792a0b782e9cf4e7'
supplier_sha='09696b51bc59315353d96686355861604d0bb48c'
supplier_repo='cloudflare/pingora'

numbered() {
  awk '{ printf "%6d  %s\n", NR, $0 }'
}
fetch_source() {
  gh api "repos/${supplier_repo}/contents/$1?ref=${supplier_sha}" --jq '.content' | base64 -d
}

printf '%s\n' '=== Exact target diff with line numbers ==='
git diff --unified=50 "$base" "$head" -- \
  TRD.md THREAT_MODEL.md docs/doctoring/TRACEABILITY.md \
  docs/product-technical-gap-baseline.md \
  | numbered

printf '%s\n' '=== Exact changed-line locations ==='
git diff --unified=0 "$base" "$head" -- \
  TRD.md THREAT_MODEL.md docs/doctoring/TRACEABILITY.md \
  docs/product-technical-gap-baseline.md \
  | grep -E '^(\+\+\+|@@|\+[^+])' || true

printf '%s\n' '=== Pinned HTTP/1 constants and read loop ==='
fetch_source 'pingora-core/src/protocols/http/v1/common.rs' \
  | numbered | grep -E -C 8 'MAX_HEADERS|INIT_HEADER_BUF_SIZE|MAX_HEADER_SIZE' || true
fetch_source 'pingora-core/src/protocols/http/v1/server.rs' \
  | numbered | grep -E -C 16 'read_request|read_timeout|MAX_HEADER_SIZE|RequestHeader|parse' || true

printf '%s\n' '=== Pinned server default timeout configuration ==='
fetch_source 'pingora-core/src/server/configuration/mod.rs' \
  | numbered | grep -E -i -C 10 'read_timeout|timeout' || true
fetch_source 'pingora-core/src/apps/mod.rs' \
  | numbered | grep -E -i -C 12 'struct HttpServerOptions|read_timeout|header|timeout' || true

printf '%s\n' '=== Pinned proxy callback and response-header flow ==='
fetch_source 'pingora-proxy/src/lib.rs' \
  | numbered | grep -E -i -C 14 'read_response|response_filter|upstream_response_filter|request_filter' || true
fetch_source 'pingora-proxy/src/proxy_h1.rs' \
  | numbered | grep -E -i -C 14 'read_response|read_timeout|response.*header|header' || true
fetch_source 'pingora-core/src/protocols/http/v1/client.rs' \
  | numbered | grep -E -i -C 14 'read_response|read_timeout|response.*header|header' || true

printf '%s\n' '=== HTTP/2 distinction ==='
fetch_source 'pingora-core/src/protocols/http/v2/server.rs' \
  | numbered | grep -E -C 10 'default_h2_options|max_header_list_size|max_concurrent_streams|H2Options' || true

printf '%s\n' '=== Supplier issue descriptions ==='
for issue in 447 992 993; do
  gh api "repos/cloudflare/pingora/issues/${issue}" \
    --jq '{number, state, title, body}'
done

printf '%s\n' '=== Contradictory completion language in requested documents ==='
rg -n -i -C 3 \
  'close[sd]?|resolved|implemented|complete[sd]?|release.ready|release blocker|production SLO|parity' \
  TRD.md THREAT_MODEL.md docs/doctoring/TRACEABILITY.md \
  docs/product-technical-gap-baseline.md || true

Length of output: 174571


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '%s\n' '=== cloudflare/pingora#447 complete issue discussion ==='
gh api 'repos/cloudflare/pingora/issues/447/comments?per_page=100' \
  --paginate \
  --jq '.[] | {user: .user.login, created_at, updated_at, body}'

printf '%s\n' '=== cloudflare/pingora#447 timeline event summaries ==='
gh api 'repos/cloudflare/pingora/issues/447/timeline?per_page=100' \
  --paginate \
  -H 'Accept: application/vnd.github+json' \
  --jq '.[] | select(.event == "commented" or .event == "cross-referenced" or .event == "referenced") | {event, created_at, actor: .actor.login, source: (.source.issue.html_url // null)}' || true

Length of output: 9523


@seonghobae Review complete for exact head 56138812e7527fadc7264bb4792a0b782e9cf4e7 against base 0145c455f5010bcff2af96e2293530c4fdf35aa4.

I found no blocking issues in the requested scope.

⚠️ Action not completed

Head commit changed.

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

Fresh parent-authority check: current #42 has advanced to exact 789abb98d6ec58600a1533c0655a72a48b7fe4ea, while this Draft remains 504086addfddf48afdbf1190a448ce40e356e9d0 on historical #42 ancestry. Fresh compare against current #42 is diverged (merge base ecc9f900a27c810b82b84aba57ae3e90414c5cd9; child ahead 23 / behind 425), so mergeable=false is a repair finding, not a reason to close.

Do not replay the historical 23-commit tree or destructively rebase. Keep the 12-file documentation projection intact. After #42 reaches unchanged exact-head hosted + current-range technical closure, ordinary/non-force succession must start from final #42 and semantically reapply only this docs delta, then reacquire exact-head CI/Supply Chain/capacity/review evidence. No production source or product-domain authority is changed by this note.

@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.

Exact-current technical review for a5747c28310cb28703c99a1b02583ae2c0a2614e..c026e1c8f419c6c5035a36518c3d482dfe7ff8a8.

I re-read the effective 12-document diff and fresh-checked the pinned supplier source at cloudflare/pingora@09696b51bc59315353d96686355861604d0bb48c. The documented HTTP/1 constants are exact (MAX_HEADERS=256, INIT_HEADER_BUF_SIZE=4096, MAX_HEADER_SIZE=1048575); HttpSession::new() defaults H1 read_timeout to 60 s and read_request() can loop after successful partial reads; current HttpServerOptions has no H1 header byte/count or monotonic whole-header deadline; H2 separately defaults to a 64 KiB decoded header-list limit and 100 concurrent streams. Supplier #993, #447, and #992 remain open and correspond to the three distinct parser-admission/downstream-header-lifetime/upstream-header-lifetime paths described here.

The ordinary/non-force parent repair preserves the historical #44 child, adopts final #42 as an additional parent with the final #42 tree as the resolution tree, and semantically reapplies only the intended documentation delta. Fresh compare is behind=0 with merge base exactly final #42. No production Rust, workflow semantics, routing, retry, product auth/business logic, Keyverse, Wardnet, or EgressWeave authority moves in the effective diff.

No new actionable source/documentation/DDD finding in this exact changed range. This COMMENT is technical evidence only; it is not an independent governance APPROVED, and final #42 hosted receipts do not transfer to this changed head.

@seonghobae
seonghobae marked this pull request as ready for review September 9, 2026 00:19

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

Please review the exact current range a5747c28310cb28703c99a1b02583ae2c0a2614e..c026e1c8f419c6c5035a36518c3d482dfe7ff8a8. This is a documentation-only semantic restack onto final #42; predecessor review receipts must not transfer. Please surface only actionable correctness, DDD/authority-boundary, traceability, security, or evidence-integrity findings.

@coderabbitai

coderabbitai Bot commented Sep 9, 2026

Copy link
Copy Markdown

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

base='a5747c28310cb28703c99a1b02583ae2c0a2614e'
head='c026e1c8f419c6c5035a36518c3d482dfe7ff8a8'

git cat-file -e "${base}^{commit}"
git cat-file -e "${head}^{commit}"

printf '%s\n' '=== Repository guidance ==='
fd -HI -t f '^(AGENTS|CONTRIBUTING|CODING|REVIEW).*|^\.coderabbit\.ya?ml$' . \
  -E .git -E node_modules -E target | sort | while IFS= read -r file; do
  echo "--- ${file}"
  sed -n '1,260p' "$file"
done

printf '%s\n' '=== Exact range validation and files ==='
git diff --name-status "$base" "$head"
git diff --check "$base" "$head"
git diff --stat "$base" "$head"

printf '%s\n' '=== Exact documentation diff ==='
git diff --unified=80 "$base" "$head" -- \
  TRD.md THREAT_MODEL.md SECURITY.md OPERABILITY.md TEST_STRATEGY.md \
  docs/doctoring/TRACEABILITY.md docs/product-technical-gap-baseline.md \
  CHANGELOG.md API_CONFIG_CONTRACT.md ARCHITECTURE.md CONTEXT_MAP.md \
  UBIQUITOUS_LANGUAGE.md

printf '%s\n' '=== Current relevant documentation passages ==='
rg -n -i -C 6 \
  -e 'HTTP/1|HTTP/2|H1|H2' \
  -e 'parser.*admission|byte.*count|whole.request.header|request.header.*lifetime' \
  -e 'upstream.*response.header|response.header.*lifetime' \
  -e 'request_filter|early_request_filter|front.proxy|nginx|traefik|fork|GREEN|RED' \
  -e 'HttpServerOptions|MAX_HEADERS|INIT_HEADER_BUF_SIZE|MAX_HEADER_SIZE|max_header_list_size' \
  -e 'release|cutover|close[sd]?|resolv|implement|production|SLO' \
  -e '`#43`|`#45`|`#40`|`#993`|`#447`|`#992`' \
  TRD.md THREAT_MODEL.md SECURITY.md OPERABILITY.md TEST_STRATEGY.md \
  docs/doctoring/TRACEABILITY.md docs/product-technical-gap-baseline.md \
  CHANGELOG.md API_CONFIG_CONTRACT.md ARCHITECTURE.md CONTEXT_MAP.md \
  UBIQUITOUS_LANGUAGE.md || true

printf '%s\n' '=== Pin and local implementation references ==='
rg -n -C 3 'pingora|09696b51bc59315353d96686355861604d0bb48c' Cargo.toml Cargo.lock 2>/dev/null || true
rg -n -i -C 5 \
  -e 'request_filter|early_request_filter|read_request' \
  -e 'response.*header|header.*timeout|read_timeout' \
  -g '!target/**' -g '!node_modules/**' src tests 2>/dev/null || true

printf '%s\n' '=== PR metadata ==='
gh pr view 44 --json number,headRefOid,baseRefOid,isDraft,title,body,closingIssuesReferences \
  --jq '{number, headRefOid, baseRefOid, isDraft, title, body, closingIssuesReferences: [.closingIssuesReferences[] | {number, repository: .repository.nameWithOwner, state}]}'

Length of output: 202865


🏁 Script executed:

#!/bin/bash
set -euo pipefail

supplier_repo='cloudflare/pingora'
supplier_sha='09696b51bc59315353d96686355861604d0bb48c'

fetch_source() {
  gh api "repos/${supplier_repo}/contents/$1?ref=${supplier_sha}" --jq '.content' | base64 -d
}

show_matches() {
  awk -v expression="$1" '
    { lines[NR] = $0 }
    $0 ~ expression {
      first = NR - 14
      if (first < 1) first = 1
      last = NR + 18
      for (i = first; i <= last; i++) {
        if (!printed[i]++) printf "%6d  %s\n", i, lines[i]
      }
      print "------"
    }'
}

printf '%s\n' '=== Project and supplier issue metadata ==='
for item in \
  'ContextualWisdomLab/pingora-gateway 43' \
  'ContextualWisdomLab/pingora-gateway 45' \
  'ContextualWisdomLab/pingora-gateway 40' \
  'cloudflare/pingora 993' \
  'cloudflare/pingora 447' \
  'cloudflare/pingora 992'
do
  set -- $item
  gh api "repos/$1/issues/$2" \
    --jq '{repository: "'"$1"'", number, state, title, html_url, pull_request}'
done

printf '%s\n' '=== HTTP/1 parser constants and read flow ==='
fetch_source 'pingora-core/src/protocols/http/v1/common.rs' \
  | show_matches 'MAX_HEADERS|INIT_HEADER_BUF_SIZE|MAX_HEADER_SIZE'
fetch_source 'pingora-core/src/protocols/http/v1/server.rs' \
  | show_matches 'read_request|MAX_HEADER_SIZE|RequestHeader|read_timeout'

printf '%s\n' '=== Public HTTP server options ==='
fetch_source 'pingora-core/src/apps/mod.rs' \
  | show_matches 'struct HttpServerOptions|HttpServerOptions|header|max_|timeout'

printf '%s\n' '=== HTTP/2 accounting ==='
fetch_source 'pingora-core/src/protocols/http/v2/server.rs' \
  | show_matches 'default_h2_options|max_header_list_size|max_concurrent_streams|H2Options'

printf '%s\n' '=== Callback order and upstream response-header reads ==='
fetch_source 'pingora-proxy/src/proxy_trait.rs' \
  | show_matches 'early_request_filter|request_filter'
fetch_source 'pingora-proxy/src/lib.rs' \
  | show_matches 'early_request_filter|request_filter|read_response|response_filter'
fetch_source 'pingora-proxy/src/proxy_h1.rs' \
  | show_matches 'read_response|read_timeout|response.*header'
fetch_source 'pingora-core/src/protocols/http/v1/client.rs' \
  | show_matches 'read_response|read_timeout|response.*header'

printf '%s\n' '=== APA and traceability reference entries ==='
rg -n -C 4 \
  -e 'cloudflare/pingora#993' -e 'cloudflare/pingora#447' -e 'cloudflare/pingora#992' \
  -e 'HttpServerOptions' -e 'read_request' -e 'read_timeout' \
  docs/doctoring/TRACEABILITY.md || true

Length of output: 118365


@seonghobae Review complete for exact range a5747c28310cb28703c99a1b02583ae2c0a2614e..c026e1c8f419c6c5035a36518c3d482dfe7ff8a8.

I found one actionable evidence-integrity finding.

  • PR draft state conflicts with its evidence gate. GitHub currently reports PR #44 as isDraft: false. The PR body says that GitHub reports a Draft PR and requires the PR to remain Draft until exact-head checks and current-range technical review close. Mark the PR as Draft again, or update the body and gating claim. Until then, the metadata permits merge handling that the stated evidence policy prohibits.

I found no other actionable findings in the requested scope.

  • The exact documentation range passes git diff --check.
  • The documentation keeps #43/#993, #45/#447, and #40/#992 as separate supplier-bound controls.
  • It does not credit callback handling, a front proxy, timeout reinterpretation, a speculative Admin Config field, or a mutable supplier fork as closure.
  • cloudflare/pingora#993, cloudflare/pingora#447, cloudflare/pingora#992, and the related gateway issues remain open.
  • The pinned source supports the documented HTTP/1 parser limits, per-read timeout behavior, callback order, missing HttpServerOptions controls, and separate HTTP/2 decoded-header-list accounting.
  • The PR body has no closing issue references and does not claim release, cutover, or production evidence.

You are interacting with an AI system.

@seonghobae
seonghobae marked this pull request as draft September 9, 2026 00:23

Copy link
Copy Markdown
Contributor Author

CodeRabbit의 exact-range finding을 metadata repair로 반영했습니다. #44는 다시 Draft이며 exact head는 그대로 c026e1c8f419c6c5035a36518c3d482dfe7ff8a8, base도 final #42 a5747c28310cb28703c99a1b02583ae2c0a2614e 그대로입니다. Source/docs commit은 만들지 않았습니다. Exact CI/Supply Chain/capacity는 이미 terminal GREEN이고, 후속 #47도 이 unchanged final #44를 정확한 base/merge base로 사용하므로 premature merge handling을 허용하지 않습니다.

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: medium type: docs

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant