Skip to content

docs(configuration): consolidate child boundary - #926

Merged
moncher-dev merged 4 commits into
mainfrom
symphony/hojinzs-github-symphony-910
Sep 5, 2026
Merged

docs(configuration): consolidate child boundary#926
moncher-dev merged 4 commits into
mainfrom
symphony/hojinzs-github-symphony-910

Conversation

@moncher-dev

@moncher-dev moncher-dev commented Sep 5, 2026

Copy link
Copy Markdown
Collaborator

Issues

Summary

  • Consolidates the worker, hook, built-in runtime, custom runtime, and agent-visible environment descriptions under one authoritative child-boundary section.
  • Distinguishes Codex LC_* inheritance from Claude/default-custom portable allowlists and explicitly documents the custom compatibility-mode exception.
  • Removes retired broker configuration rows, eliminates duplicated denylist prose, preserves inbound anchors, and keeps unrelated tracker/workspace sections outside the environment boundary.

Change-point diagram

  • Project/process environment → worker host and approved hooks → explicit built-in/default-custom child contract
  • Custom compatibility mode → non-credential worker environment → reserved credentials still stripped, operator DOCKER_CONFIG may remain
  • Child boundary includes worker, agent-child, and workflow-hook context → tracker-transition extension and workspace-key migration remain independent top-level topics

Start here

  • docs/configuration.md:395 — authoritative worker and agent-child environment boundary
  • docs/configuration.md:523 — custom runtime authentication and compatibility exception
  • docs/configuration.md:639 — exact agent-visible Symphony context allowlist
  • docs/configuration.md:662 — workflow hook context within the consolidated boundary

User-Visible Behavior / Operational Impact

  • Documentation only. Runtime and CLI behavior are unchanged.

Validation

  • pnpm format — failed on pre-existing repository-wide formatting drift in 68 unrelated files; docs/configuration.md passes targeted formatting
  • pnpm exec prettier --write docs/configuration.md && pnpm exec prettier --check docs/configuration.md — pass
  • pnpm lint — pass
  • git diff --check — pass
  • Anchor reference and heading-tree audits with rg — pass
  • Tests, typecheck, build, and Docker E2E — not applicable: documentation-only change with no behavior modification

Changeset

  • Not needed because this is a documentation-only change without a release label.

Risks & rollback

  • Low risk: reviewer focus is whether the consolidated wording precisely matches each runtime path and whether all three environment boundaries remain inside the consolidated section. Revert commits 4ace807, 46bec3e, and a4eceec if the documentation organization is not accepted.

Changed files

  • docs/configuration.md — consolidates and corrects the child environment boundary while removing obsolete broker configuration entries

Post-merge / human validation

  • None

Security

  • No real tokens, private keys, .env files, or generated installation tokens are committed

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 5, 2026

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review Completed 2026-09-05T21:57:44.817310Z a4eceec Draft marked ready
ℹ️ 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" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@github-actions

github-actions Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

Coverage Report

Status Category Percentage Covered / Total
🔵 Lines 40.73% 42773 / 105003
🔵 Statements 40.73% 42773 / 105003
🔵 Functions 72.46% 2090 / 2884
🔵 Branches 79.26% 9831 / 12402
File CoverageNo changed files found.
Generated in workflow #1451 for commit 3e85f4a by the Vitest Coverage Report Action

@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: a4eceec0e3

ℹ️ 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 docs/configuration.md Outdated

@moncher-dev moncher-dev left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Review at head a4eceec0. Passing — requesting @hojinzs as the human reviewer. Docs-only, one file, +39/-40, no changeset needed.

I judged this the way the section it replaces should have been judged: by checking each surviving claim against the code that runs after #868/#869/#870/#877/#902/#903/#904, not by reading for coherence.

Claims verified against code

  • GIT_CONFIG_* row. "GIT_CONFIG_COUNT must be a non-negative safe integer or the transport fails" is exact — packages/worker/src/git-transport.ts:250-262 throws on both the regex and the Number.isSafeInteger check. "Symphony appends its credential.helper entry after the caller-supplied indexed Git configuration" is also exact: it writes GIT_CONFIG_KEY_${gitConfigCount} and sets GIT_CONFIG_COUNT to count + 1 (:263-271).
  • GITHUB_GIT_HOST / GITHUB_GIT_USERNAME rows. Defaults github.com and x-access-token match packages/runtime-codex/src/git-credential-helper.ts:3-4, and both are read at :95-96; the host path reaches them through buildHostGitEnvironment (git-transport.ts:228-237).
  • GITHUB_GRAPHQL_TOKEN as the direct host Git credential source. buildHostGitEnvironment keys the whole credential helper off env.GITHUB_GRAPHQL_TOKEN — post-#923/#924 this is the only token in that path, so "worker host tools and Git transport" is right.
  • The three deleted broker rows. Nothing reads them for behavior. GITHUB_TOKEN_BROKER_URL/SECRET/CACHE_PATH survive only in packages/core/src/runtime/custom-child-env.ts:66,67,84 (child strip lists) and packages/tracker-github/src/orchestrator-adapter.ts:50-52 (secretEnvironmentNames, consumed only by custom-child-env stripping and mcp-compose redaction). Deleting the rows is correct — they were describing a configuration surface that no longer exists.
  • "Every built-in and custom runtime constructs its child environment separately." Both packages/runtime-claude/src/adapter.ts and packages/runtime-codex/src/runtime.ts build from core's agent-child-env, so the generalization holds for both built-ins, not just Codex.
  • No leftover contradiction. GITHUB_TOKEN_BROKER* and "Credential Brokers" now appear in no other doc — the removed rows were the last occurrence outside code.

Anchors

Only two documents link into this file, both from README.md: #auth-and-api-endpoints (heading text unchanged, only demoted #####, so the anchor is unaffected) and #environment-loading-order (heading renamed, but an explicit <a id="environment-loading-order"> was added — resolves). The single in-file link, #agent-visible-symphony-context, is likewise preserved by an explicit anchor above the retitled heading. The four other retitles (Agent Runtime Credentials, Custom Runtime Environment Contract, Worker Context Variables, Hook Variables) do change their anchors, but nothing in the repository references them. prettier --check clean on the new file.

Non-blocking

  1. One claim is a shade stronger than the code. "they are not configuration inputs" — packages/runtime-codex/src/launcher.ts:41-43 still reads all three broker variables into githubTokenBrokerUrl / githubTokenBrokerSecret / githubTokenCachePath (declared at runtime.ts:75-77). Nothing consumes those fields, so the behavioral claim is true and the doc is not misleading — but the code still has dead broker reads worth a follow-up sweep, and until they go the sentence is describing intent rather than the literal code.
  2. The ## section now spans lines 395-695 and so nests ### GitHub Tracker Transition Extension and ### Workspace-Key Migration under "Worker And Agent-Child Environment Boundary", which is not what either is about. This is inherited — they were already ### under ## Worker Context Variables on main — so it is not a regression, but the consolidation is a natural moment to lift them back out to ##.

Neither blocks. The consolidation does what #910 asked: the child boundary is stated once, and what remains is true of the code as merged.

@moncher-dev
moncher-dev requested a review from hojinzs September 5, 2026 22:28

@hojinzs hojinzs left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

리뷰 1/6 — head a4eceec

문서 전용, 1파일, +39/-40. CI 녹색(Test, Container Smoke). changeset 불필요 판단 동의.

문서를 읽고 일관성을 판단하는 대신, 살아남은 서술을 각각 머지된 코드에 대조하고 자식 환경 빌더를 실제로 실행해서 확인했습니다.

스모크 테스트 (문서 전용 PR이므로 API/화면 대신 문서가 기술하는 계약을 직접 실행)

buildCustomRuntimeChildEnvironment / buildAgentChildEnvironmentAssignments를 실제 호출한 결과:

문서 서술 실행 결과
custom 기본 자식은 portable 변수 + private HOME/GH_CONFIG_DIR COLORTERM, LANG, PATH, SHELL, TERM, HOME, USERPROFILE, GH_CONFIG_DIR
GIT_TERMINAL_PROMPT=0
"Codex and Claude also receive a private DOCKER_CONFIG" (custom은 아님) ✅ built-in 경로에만 존재
트래커 토큰은 자식에 도달하지 않음 GITHUB_GRAPHQL_TOKEN 제거됨
agent-visible 허용목록 9개 AGENT_VISIBLE_SYMPHONY_CONTEXT_ENVIRONMENT_NAMES와 정확히 일치
"LC_* locale variables are also preserved" LC_ALL 제거됨 — 아래 P2

pnpm exec prettier --check docs/configuration.md 통과. packages/core/src/runtime/ 테스트 30개 통과.

#910 수용 조건 대조

조건 판정
자식 경계가 한 절에서 한 번만 설명된다 ⚠️ 구조적으로는 달성 — 4개 절이 ###으로 접혔고 권위 있는 표가 :411에 하나 있음. 다만 :522가 여전히 같은 목록을 자기 낱말로 반복 (P3)
남은 서술이 머지된 코드와 일치한다 LC_* 한 문장 (P2)
GITHUB_TOKEN_BROKER_SECRET 행 정리 ✅ 3개 행 삭제 + denylist 사실 문장으로 대체. 코드 확인: GITHUB_TOKEN_BROKER_URL/CACHE_PATHAGENT_CHILD_CREDENTIAL_ENVIRONMENT_NAMES, ..._SECRETCUSTOM_RUNTIME_RESERVED_AUTH_ENVIRONMENT_NAMES에만 생존 — "not configuration inputs"는 동작상 정확
앵커 링크 미파손 ✅ 아래 참조
코드 변경 없음

앵커 감사

리포지토리 전체에서 이 파일로 들어오는 링크는 3개뿐입니다.

  • README.md:100, README.md:820#environment-loading-order — 제목이 바뀌었지만 :393에 명시적 <a id> 추가로 해결 ✅
  • README.md:427#auth-and-api-endpoints — 제목 문자열 불변(##### 강등만), 앵커 영향 없음 ✅
  • docs/configuration.md:414#agent-visible-symphony-context:634 명시적 앵커로 보존 ✅

앵커가 바뀐 나머지 4개(Agent Runtime Credentials, Custom Runtime Environment Contract, Worker Context Variables, Hook Variables)는 참조하는 곳이 없습니다. GitHub tracker transition extension / Workspace-key migration은 대소문자만 바뀌어 앵커 동일 ✅

오버엔지니어링 / 임의 결정

없다고 봅니다. Title Case 통일은 파일의 기존 관례를 따른 것이고, <a id> 방식은 앵커 보존이라는 수용 조건을 만족시키는 최소 수단입니다. 범위 밖(docs/architecture.md, 동작 변경)으로 새지 않았습니다.

이번 라운드 지적

  • P2 :413LC_* 서술이 Codex에만 참. Claude/custom에서는 실제로 탈락 (실행 확인)
  • P2 :659, :669GitHub Tracker Transition Extension / Workspace-Key Migration이 환경 경계 ## 절 아래로 들어감
  • P3 :521 — custom 절이 strip 목록을 세 번째로 재서술
  • nit :494CODEX_HOME은 Codex SAFE_RUNTIME_ENV_KEYS에 실제로 포함됨

후속 (이 PR 범위 아님)

packages/runtime-codex/src/launcher.ts:41-43이 broker 변수 3개를 여전히 읽어 runtime.ts:75-77 필드에 넣습니다. 소비자는 테스트 픽스처뿐이라 동작은 없지만, 이 문서가 "설정 입력이 아니다"라고 단언한 이상 죽은 읽기는 정리 대상입니다. 별도 이슈를 권합니다.


변경 요청은 P2 두 건에 대한 것입니다. 둘 다 한두 줄 수정이며, 특히 LC_*는 "이 경계에 대한 단일 진실"을 자처하는 절 안에 남은 유일한 사실 오류라 통합 PR에서 함께 고치는 것이 맞다고 봅니다. P3와 nit은 판단에 맡기며, 미반영 사유를 스레드에 남겨주시면 그대로 수용하겠습니다.


Generated by Claude Code

Comment thread docs/configuration.md
Comment thread docs/configuration.md Outdated
Comment thread docs/configuration.md
Comment thread docs/configuration.md Outdated
@moncher-dev
moncher-dev requested a review from hojinzs September 5, 2026 22:53

@hojinzs hojinzs left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

리뷰 2/6 — head 46bec3e

라운드 1의 지적 4건 전부 반영 확인. 남은 블로커는 P2 한 건이며, 그 P2는 라운드 1 수정의 2차 효과로 새로 생긴 것입니다. 한 블록 이동으로 끝나며 그것만 고쳐지면 승인합니다.

CI 녹색 (Test, Container Smoke — 46bec3e). prettier --check docs/configuration.md 통과.

라운드 1 지적 대조

지적 상태 검증
P2 :413 LC_* 서술이 Codex에만 참 아래 실행 확인
P2 tracker/workspace 절이 경계 ## 아래 ✅ 부분 둘은 ##으로 올라갔으나 훅 절이 남겨짐 → 새 P2
P3 :521 strip 목록 3회 재서술 denylist 문단 삭제, custom 고유 차이만 잔존
nit :494 CODEX_HOME "provider credentials are not part of…"로 축소

미반영 없이 전부 코드로 반영되었고, 각 스레드에 근거 답변도 달렸습니다.

스모크 테스트 — 46bec3e가 새로 단언한 3개 명제 실행 검증

문서 전용 PR이므로 API/화면 대신 문서가 기술하는 계약을 직접 호출했습니다. buildCustomRuntimeChildEnvironment / buildAgentChildEnvironmentAssignments에 operator DOCKER_CONFIG, LC_ALL, 트래커 토큰, broker secret, GITHUB_GIT_HOST를 주입한 결과:

문서 서술 위치 실행 결과
Codex는 LC_* 보존, Claude/기본 custom은 LANG :414 ✅ 기본 custom 자식에 LANG 있고 LC_ALL 없음. runtime-codex/src/runtime.ts:561startsWith("LC_"), runtime-claude/src/adapter.ts:620-631DEFAULT_INHERITED_ENV_KEYScustom-child-env.ts:3-14PORTABLE_ENVIRONMENT_NAMES에는 LC_ 규칙 없음
custom은 runtime-managed DOCKER_CONFIG를 받지 않음 :525 ✅ 기본 custom 결과에 DOCKER_CONFIG 부재. built-in 경로는 /w/home/.docker 반환
호환 모드는 private DOCKER_CONFIG를 설치하지 않아 operator 값이 상속될 수 있음 :552 inheritEnvironment: true에서 DOCKER_CONFIG=/home/operator/.docker 그대로 통과. 동시에 GITHUB_GRAPHQL_TOKEN/GITHUB_TOKEN_BROKER_SECRET/GITHUB_GIT_HOSTundefined, HOME·GH_CONFIG_DIR은 오버라이드, GIT_TERMINAL_PROMPT=0 — "removes tracker credentials, broker/authentication controls, and host Git credential-helper settings"와 정확히 일치

가장 민감한 문장(호환 모드 Docker 상속)이 코드와 정확히 맞습니다. Codex 리뷰가 제기한 "false security guarantee" 우려는 실제로 해소되었습니다.

#910 수용 조건 대조

조건 판정
자식 경계가 한 절에서 한 번만 설명된다 ❌ 표의 7개 절 중 6개는 접혔으나 Hook Variables가 경계 절 밖으로 밀려남 (아래 P2)
남은 서술이 머지된 코드와 일치한다 ✅ 위 스모크로 확인
GITHUB_TOKEN_BROKER_SECRET 행 정리 ✅ 3행 삭제 + denylist 사실 문장. custom-child-env.ts:66,67,84에만 생존
앵커 링크 미파손 ✅ 인바운드 3개(README.md:100,427,820) 전부 해석됨. 개명된 나머지 앵커는 리포지토리 내 참조 없음
코드 변경 없음 ✅ 1파일, +51/-49

오버엔지니어링 / 임의 결정

없습니다. 46bec3e의 4개 변경 전부 라운드 1 지적에 1:1 대응하며, 범위를 넘어 docs/architecture.md나 동작 자체로 새지 않았습니다. launcher.ts:41-43의 죽은 broker 읽기는 별도 이슈 권고를 유지하며 이 PR에서 손대지 않은 판단에 동의합니다.

이번 라운드 지적

  • P2 :683### Workflow Hook Context## Workspace-Key Migration 하위로 고아가 됨. 인라인 참조
  • nit :408separately from the following contract가 의도와 반대로 읽힘. 인라인 참조

변경 요청은 P2 한 건입니다. :683-697 블록을 :660 뒤로 옮기는 것이 전부이고, 그러면 :406의 "three distinct environment boundaries" 선언과 실제 제목 구조가 일치하며 #910의 첫 수용 조건이 충족됩니다. 이것만 반영되면 다음 라운드에서 승인합니다. nit은 판단에 맡깁니다.


Generated by Claude Code

Comment thread docs/configuration.md Outdated
Comment thread docs/configuration.md Outdated
@moncher-dev
moncher-dev requested a review from hojinzs September 5, 2026 23:23

@hojinzs hojinzs left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

리뷰 3/6 — head 4ace807Approve

라운드 2의 블로커 P2와 nit 모두 반영 확인. #910의 수용 조건 5개 전부 충족. CI 녹색(Test, Container Smoke — 4ace807). 승인합니다.

라운드 2 지적 대조

지적 상태 검증
P2 :683 ### Workflow Hook Context## Workspace-Key Migration 하위로 고아 블록 이동만. 아래 제목 트리 참조
nit :408 separately from the following contract 오독 separately, according to the following contract로 수정

4ace807+18/-18 한 파일이고, 그 전부가 위 두 건에 1:1 대응합니다. 요구하지 않은 변경이 섞여 들어오지 않았습니다.

제목 트리 — 요청한 구조와 일치

:395  ## Worker And Agent-Child Environment Boundary
:456    ### Auth And API Endpoints
:470    ### Git Access
:491    ### Agent Runtime Authentication
:521    ### Custom Runtime Authentication And Compatibility
:565    ### CLI And Project Runtime
:583    ### Tuning Knobs
:602    ### Worker Host Context
:639    ### Agent-Visible Symphony Context
:662    ### Workflow Hook Context          ← 경계 절 안으로 복귀
:678  ## GitHub Tracker Transition Extension
:688  ## Workspace-Key Migration
:699  ## Recovery And Resume Context

경계 ## 절이 :395-677로 닫히고, :406의 "three distinct environment boundaries" 선언(워커 호스트 / 에이전트 자식 / 훅)과 실제 제목 구조가 이제 정확히 대응합니다. 무관한 두 절은 최상위로 복귀했습니다.

스모크 테스트 — 4ace807에서 재실행

문서 전용 PR이므로 API/화면 대신 문서가 기술하는 계약을 직접 호출했습니다. operator DOCKER_CONFIG, LC_ALL, 트래커 토큰, broker secret, Git 자격증명 배관을 주입한 결과:

문서 서술 위치 실행 결과
Claude/기본 custom은 LANG만, LC_* 없음 :414 LANG 있고 LC_ALL/LC_CTYPE 부재
custom은 runtime-managed DOCKER_CONFIG를 받지 않음 :526 ✅ 기본 custom 결과에 부재
private HOME/GH_CONFIG_DIR, GIT_TERMINAL_PROMPT=0 :524 HOME=/w/home, GH_CONFIG_DIR=/w/home/gh, GIT_TERMINAL_PROMPT=0
트래커 토큰·broker·Git/SSH 배관 스트립 :417 GITHUB_GRAPHQL_TOKEN, LINEAR_API_KEY, GITHUB_TOKEN_BROKER_*, GITHUB_GIT_HOST, GIT_CONFIG_COUNT, SSH_AUTH_SOCK, XDG_CONFIG_HOME 전부 부재
호환 모드는 private DOCKER_CONFIG를 설치하지 않아 operator 값 상속 가능 :551 DOCKER_CONFIG=/home/operator/.docker 통과, 동시에 위 자격증명은 전부 부재

가장 민감한 문장(호환 모드 Docker 상속)이 코드와 정확히 일치합니다.

pnpm exec prettier --check docs/configuration.md 통과. 작업 트리 깨끗(임시 테스트 파일 제거).

#910 수용 조건 대조

조건 판정
자식 경계가 한 절에서 한 번만 설명된다 ✅ 이슈 표의 7개 절이 전부 처리됨 — 6개는 :395 절 하위 ###으로 접힘, Credential Brokers And Git Access는 삭제
남은 서술이 머지된 코드와 일치한다 ✅ 위 스모크. 인라인 P2 한 건은 이번 diff가 건드리지 않은 상속 행
GITHUB_TOKEN_BROKER_SECRET 행 정리 ✅ 3행 삭제 + denylist 사실 문장. 코드상 custom-child-env.ts의 strip 목록에만 생존
앵커 링크 미파손 ✅ 인바운드 전수 확인 — README.md:100,820#environment-loading-order(:393 명시적 <a id>), README.md:427#auth-and-api-endpoints(제목 문자열 불변), 파일 내부 :415#agent-visible-symphony-context(:637 명시적 <a id>). 리포지토리 전체에서 이 파일로 들어오는 링크는 이 3개뿐
코드 변경 없음 / changeset 불필요 docs/configuration.md 1파일

오버엔지니어링 / 임의 결정

없습니다. 3개 커밋 전부 이슈 또는 리뷰 지적에 대응하며, 범위 밖(docs/architecture.md, 동작 자체)으로 새지 않았습니다. launcher.ts:41-43의 죽은 broker 읽기를 이 PR에서 손대지 않은 판단에도 동의합니다.

이번 라운드 지적

  • P2 (비블로킹) :415Symphony run context 행이 코드보다 좁습니다. Codex 자식은 허용목록 외에 SYMPHONY_ORCHESTRATOR_URL / SYMPHONY_RUN_ID / SYMPHONY_ORCHESTRATOR_TOKEN을 추가로 받습니다(실행 확인). 설계 의도대로이며(skills/templates/gh-project.ts, push.ts가 이 토큰 사용을 지시), 이번 diff가 건드리지 않은 상속 행입니다. 인라인에 정정안을 남겼으니 별도 이슈로 처리해 주세요.

라운드 2에서 "P2 한 건만 반영되면 승인한다"고 약속했고 그것은 정확히 반영되었습니다. 새로 발견한 P2는 이 diff의 산물이 아니고 한 줄 정정이므로, 무한 핑퐁을 피해 승인하고 후속 이슈로 넘깁니다. 머지 가능합니다.


Generated by Claude Code

Comment thread docs/configuration.md
| ---------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Portable runtime variables | Codex and Claude copy their runtime-safe process allowlist; default custom runtimes copy their portable allowlist. `LC_*` locale variables are also preserved. |
| Portable runtime variables | Codex copies its runtime-safe process allowlist, including `LC_*` locale variables. Claude and default custom runtimes copy fixed portable allowlists that include `LANG` but not `LC_*`. |
| Symphony run context | Only the non-secret names in the [agent-visible Symphony context](#agent-visible-symphony-context) are copied. |

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

P2 (비블로킹, 후속 이슈 권장) — Symphony run context 행이 코드보다 좁습니다.

Only the non-secret names in the agent-visible Symphony context are copied.

Codex 자식은 이 허용목록 외에 3개를 더 받습니다. 그중 하나는 시크릿입니다.

packages/runtime-codex/src/runtime.ts:604-614orchestratorRunEnvplan.env에 직접 병합합니다.

const orchestratorRunEnv = {
  ...(config.orchestratorUrl   ? { SYMPHONY_ORCHESTRATOR_URL: ... }   : {}),
  ...(config.orchestratorRunId ? { SYMPHONY_RUN_ID: ... }             : {}),
  ...(config.orchestratorToken ? { SYMPHONY_ORCHESTRATOR_TOKEN: ... } : {}),
};

이후 제거 경로 어디에도 걸리지 않습니다 — removedEnvironmentNames(:631-635)는 secretEnvironmentNames + CUSTOM_RUNTIME_RESERVED_AUTH_ENVIRONMENT_NAMES + LINEAR_GRAPHQL_URL이고, stripCredentialEnvironmentForAgentChildAGENT_CHILD_CREDENTIAL_ENVIRONMENT_NAMES뿐입니다. 셋 다 SYMPHONY_ORCHESTRATOR_TOKEN을 포함하지 않습니다.

buildCodexRuntimePlan을 실제로 호출해 확인했습니다:

CODEX_CHILD_ENV {
 "SYMPHONY_ORCHESTRATOR_URL": "http://127.0.0.1:4681",
 "SYMPHONY_ORCHESTRATOR_TOKEN": "SECRET-ORCH-TOKEN",
 "SYMPHONY_RUN_ID": "run-abc",
 "SYMPHONY_ISSUE_ID": "I_1",
 "DOCKER_CONFIG": "/w/rt/child-home/.docker",
 "HOME": "/w/rt/child-home"
}

SYMPHONY_ORCHESTRATOR_URL / SYMPHONY_RUN_ID / SYMPHONY_ORCHESTRATOR_TOKEN 셋 다 AGENT_VISIBLE_SYMPHONY_CONTEXT_ENVIRONMENT_NAMES(custom-child-env.ts:17-27)에 없습니다. custom 호환 모드에서도 SYMPHONY_ORCHESTRATOR_TOKEN이 자식에 그대로 도달합니다(같은 스모크에서 확인).

이것은 버그가 아니라 의도된 설계입니다. packages/cli/src/skills/templates/gh-project.ts:23,43,73push.ts:21이 에이전트에게 $SYMPHONY_ORCHESTRATOR_TOKEN으로 오케스트레이터 API를 호출하라고 지시합니다. 자식이 이 토큰을 가지는 것이 전제입니다. :619 행의 Read by: Worker도 같은 이유로 좁습니다.

문제는 서술입니다. #910의 전제가 "이 문서를 워커가 읽는다"인데, 권위를 자처하는 표가 "허용목록만 온다"고 단언하면 그 워커는 자기가 실행하도록 지시받은 스킬이 참조하는 변수가 없다고 판단하게 됩니다. 정확히 #910이 없애려던 종류의 오독입니다.

그런데 이 행은 이번 diff가 건드리지 않았고(#886에서 들어온 그대로), 라운드 2에서 "P2 하나만 반영되면 승인한다"고 약속했으며 그것은 정확히 반영되었습니다. 무한 핑퐁을 막는 것이 이 리뷰의 목적이므로 블로킹하지 않고 승인합니다. 다만 별도 이슈로 다음 정도의 정정을 권합니다.

| Symphony run context | The non-secret names in the agent-visible Symphony context are
copied to every child. Built-in runtimes additionally pass the run's
`SYMPHONY_ORCHESTRATOR_URL`, `SYMPHONY_RUN_ID`, and `SYMPHONY_ORCHESTRATOR_TOKEN`
so the agent can call the worker-scoped orchestrator API that the shipped
`/gh-project` and `push` skills use. |

Generated by Claude Code

@moncher-dev
moncher-dev merged commit 49a6f1b into main Sep 5, 2026
2 checks passed
@moncher-dev
moncher-dev deleted the symphony/hojinzs-github-symphony-910 branch September 5, 2026 23:52
@moncher-dev
moncher-dev restored the symphony/hojinzs-github-symphony-910 branch September 5, 2026 23:53
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.

docs(configuration): consolidate the four disagreeing sections into one child-boundary section

2 participants