makdoong2-team 1.7.0 → 1.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/agents/makdoong2-analyzer.md +7 -2
- package/agents/makdoong2-issue-reporter.md +4 -2
- package/agents/makdoong2-publisher.md +7 -3
- package/agents/makdoong2-researcher.md +2 -1
- package/agents/makdoong2-verifier.md +31 -5
- package/assets/makdoong2-team.schema.json +15 -0
- package/bin/cli.js +367 -336
- package/bin/cli.ts +428 -0
- package/dist/config.d.ts +23 -0
- package/dist/config.js +113 -0
- package/dist/issue-reporter-guard.js +51 -1
- package/dist/model-fallback-policy.js +41 -4
- package/dist/opencode-plugin.js +354 -236
- package/dist/poll-sub-session.d.ts +4 -0
- package/dist/poll-sub-session.js +30 -2
- package/dist/redact-secrets.js +42 -10
- package/dist/state-access-guard.d.ts +78 -2
- package/dist/state-access-guard.js +273 -23
- package/gates/stage-analysis-verify.sh +12 -2
- package/gates/stage2-requirements-verify.sh +6 -1
- package/gates/stage3-scope-verify.sh +21 -3
- package/gates/stage4-dev-post-verify.sh +10 -5
- package/gates/stage4-dev-verify.sh +7 -2
- package/gates/stage5-coverage-verify.sh +6 -1
- package/gates/stage5-test-verify.sh +7 -2
- package/gates/stage6-commit-verify.sh +13 -2
- package/gates/stage6-post-commit-verify.sh +18 -4
- package/gates/stage7-post-pr-verify.sh +6 -1
- package/gates/stage7-pr-verify.sh +7 -2
- package/gates/stage8-post-review-verify.sh +6 -1
- package/gates/stage8-review-verify.sh +6 -1
- package/gates/verify.sh +7 -1
- package/package.json +4 -2
- package/postinstall.mjs +39 -36
- package/scripts/install-lib.mjs +800 -752
- package/scripts/install-lib.mts +1179 -0
- package/scripts/lib/git-exclude.sh +60 -0
- package/scripts/lint-agent-prompts.sh +38 -7
- package/scripts/model-policy.mjs +162 -159
- package/scripts/model-policy.mts +274 -0
- package/scripts/run-tests.mjs +102 -90
- package/scripts/run-tests.mts +162 -0
- package/scripts/smoke-test.mjs +128 -144
- package/scripts/smoke-test.mts +207 -0
- package/scripts/state.sh +88 -7
- package/scripts/test-postinstall.mjs +115 -112
- package/scripts/test-postinstall.mts +176 -0
- package/scripts/test-ubuntu.sh +2 -2
- package/scripts/wt-sync-ignored.sh +11 -26
- package/skills/_lib/load-secret.sh +53 -0
- package/skills/bamboo-ci/run-bamboo.sh +2 -1
- package/skills/bitbucket-research/run-repos.sh +2 -1
- package/skills/confluence-research/run-docs.sh +2 -1
- package/skills/jira-research/run-works.sh +2 -1
- package/skills/makdoong2-issue-reporter/SKILL.md +186 -44
- package/src/hooks/sync-state.sh +33 -2
- package/stages/01-planning.md +27 -1
- package/stages/02-requirements.md +10 -2
package/README.md
CHANGED
|
@@ -106,6 +106,7 @@ makdoong2-team doctor # 설치 진단
|
|
|
106
106
|
- 커맨드가 **전용 full-permission 에이전트**(`makdoong2-issue-reporter`)로 라우팅되어, 호출 시점 이전의 로그·프롬프트·세션 컨텍스트를 스스로 수집해 이상 지점을 포착하고 [y00njinuk/makdoong2-team issues](https://github.com/y00njinuk/makdoong2-team/issues) 에 등록한다.
|
|
107
107
|
- **사용자 직접 호출이 유일한 트리거**다. 부장님·막둥이가 실패를 관측했다고 자율적으로 이슈를 만들지 않는다 (훅이 차단). 이 에이전트는 **선택 가능한 에이전트 목록에도, `@` 멘션 목록에도 뜨지 않으며**, `task` 툴로 spawn 하는 것도 차단된다 — 진입점은 위 커맨드 하나뿐이다.
|
|
108
108
|
- 저장소가 public 이므로 사내 정보는 마스킹 후 첨부되며, **전송 전 승인을 세션 안에서 묻는다**: 에이전트가 게시될 원문 전체를 `cat` 으로 표시하면 훅이 그 sha256 을 기록하고, 전송용 curl 호출 시 opencode 가 게시 여부를 묻는다(yes/no). 표시하지 않았거나 표시 후 내용이 바뀌면 전송이 차단된다 (승인은 사용자가 본 원문에 바인딩, 1회용). 승인 프롬프트에서는 **"Allow once"** 를 고른다 — "always" 는 남은 세션의 승인 질문을 없앤다.
|
|
109
|
+
- **이슈 본문은 고정 양식으로 쓴다.** 증상 · 환경 · 재현 절차 · 기대/실제 동작 · 실패 지점 · 타임라인 · 에러 메시지 · 재현성/영향 범위 · 시도한 조치 · 증거(필수)에, 조사에서 근거가 나오면 관련 관찰 · 의심 근본 원인 코드 · 부수 관찰 · 제안(조건부)이 붙는다. 양식은 발명이 아니라 [#5](https://github.com/y00njinuk/makdoong2-team/issues/5) 가 실제로 갖췄던 구성을 규약화한 것이다 — 그 이슈의 증거가 그대로 진단에 쓰여 v1.7.0 수정으로 이어졌다. 상세: `skills/makdoong2-issue-reporter/SKILL.md` §6
|
|
109
110
|
- PAT 는 `~/.config/opencode/.github` 파일에서 읽는다. **파일이 없거나 토큰을 찾지 못하면 중단하지 않고, 발급 URL 과 최소 권한(fine-grained: Issues Read/write, classic: `public_repo`)을 안내해 사용자에게 발급을 요청한 뒤 대기**한다. 401/403 도 같은 재발급 경로를 탄다. 상세: ARCHITECTURE.md §4.6
|
|
110
111
|
|
|
111
112
|
---
|
|
@@ -22,9 +22,14 @@ permission:
|
|
|
22
22
|
"git worktree add*": "deny"
|
|
23
23
|
"git worktree remove*": "deny"
|
|
24
24
|
"rm -rf*": "deny"
|
|
25
|
-
write
|
|
26
|
-
|
|
25
|
+
# 정식 키는 `edit` 다. opencode 의 permission 스키마에 `write` 키는 없고
|
|
26
|
+
# write/edit/patch 툴이 전부 `permission: "edit"` 으로 묻는다 — `write:` 로 적으면
|
|
27
|
+
# 규칙이 조용히 무시되고 기본값 ask 로 떨어진다.
|
|
28
|
+
# 규칙은 findLast(마지막 매치가 이김)라 **넓은 것을 위, 좁은 것을 아래**에 둔다.
|
|
29
|
+
edit:
|
|
27
30
|
"**/*": "deny"
|
|
31
|
+
".makdoong2-team/*/workspace-analysis.json": "allow"
|
|
32
|
+
"**/.makdoong2-team/*/workspace-analysis.json": "allow"
|
|
28
33
|
---
|
|
29
34
|
|
|
30
35
|
Analysis Phase — Workspace 구조·소스·의존성·관례·통합 지점 read-only 분석. **코드 변경 금지.** 산출물은 `workspace-analysis.json` 한 파일만 허용.
|
|
@@ -31,7 +31,8 @@ permission:
|
|
|
31
31
|
# 이 패턴은 issue-reporter-guard.ts 의 APPROVABLE_PAYLOAD_RE 와 한 쌍이다 —
|
|
32
32
|
# 훅이 `-d @/절대경로` 표기만 허용하므로 게시 호출은 반드시 여기에 걸린다.
|
|
33
33
|
"*-d @/*": "ask"
|
|
34
|
-
|
|
34
|
+
# 정식 키는 `edit`. 이슈 payload 를 자기 세션에서 작성해야 하므로 쓰기를 허용한다.
|
|
35
|
+
edit:
|
|
35
36
|
"**/*": "allow"
|
|
36
37
|
---
|
|
37
38
|
|
|
@@ -39,7 +40,7 @@ permission:
|
|
|
39
40
|
|
|
40
41
|
## 하드룰
|
|
41
42
|
|
|
42
|
-
1. **첫 행동으로 `skill(name="makdoong2-issue-reporter")` 를 로드**하고, 스킬에 정의된 절차를 그대로 따른다. 실행 순서는 스킬이 고정한다: **수집 → 이상 지점 포착 → 마스킹 → 중복 확인 → 최소 질의 → 이슈 생성**.
|
|
43
|
+
1. **첫 행동으로 `skill(name="makdoong2-issue-reporter")` 를 로드**하고, 스킬에 정의된 절차를 그대로 따른다. 실행 순서는 스킬이 고정한다: **수집 → 이상 지점 포착 → 마스킹 → 중복 확인 → 최소 질의 → 본문 작성 → 이슈 생성**.
|
|
43
44
|
2. **GitHub 게시(이슈·코멘트·Gist·라벨)는 훅이 강제하는 사용자 승인 게이트를 통과해야만 가능하다.** 절차는 고정이다:
|
|
44
45
|
1. payload 를 **리터럴 절대 경로** JSON 파일로 작성한다 (예: `/tmp/makdoong2-issue/issue-payload.json`).
|
|
45
46
|
2. **게시될 원문 전체를 `cat <payload>` 로 세션에 표시**하고 마스킹 내역 요약을 덧붙인다. 이 `cat` 은 **체이닝 없이 단독 실행**해야 하며(`;`·`&&`·리다이렉트·`$()` 금지), 훅이 이 시점의 sha256 을 표시 증명으로 기록한다. 요약·발췌로 대체 금지 — 사용자는 전송될 원문을 봐야 한다.
|
|
@@ -50,6 +51,7 @@ permission:
|
|
|
50
51
|
3. **토큰(PAT)은 어디에도 원문 노출 금지.** 커맨드 문자열에 직접 박지 않고 환경변수로 전달하며, 출력에는 마스킹(`ghp_****`)만 허용한다.
|
|
51
52
|
4. **워크플로우 상태를 변경하지 않는다.** state.json 은 증거 수집을 위한 읽기(`state.sh get`)만 허용. `state.sh set` / dispatch 계열 툴 호출 금지. 이 에이전트는 워크플로우 오케스트레이션과 완전히 분리된 조사·보고 전용이다.
|
|
52
53
|
5. **다른 에이전트로 위임하지 않는다.** 수집·분석·마스킹·등록 전 과정을 이 세션에서 직접 수행한다.
|
|
54
|
+
6. **이슈 본문은 스킬 6장 양식을 따른다.** 필수 섹션 10개와 `## 증거` 를 순서대로 채우고, 3장 수집에서 근거가 나온 조건부 섹션(`## 관련 관찰` / `## 참고: 의심 근본 원인 코드` / `## 부수 관찰 (minor)` / `## 제안 (참고)`)을 빠뜨리지 않는다. 모든 인용에 출처(파일+라인 또는 세션+턴)를 달고 단정과 추정을 구분한다(추정은 `> 추정:`). **payload 를 `cat` 으로 표시하기 전에 6.6 자기 점검을 통과시킨다** — 표시 후 본문을 고치면 표시 증명이 무효가 되어 하드룰 2 를 2번부터 다시 밟아야 한다. 기준 사례는 이슈 #5 다.
|
|
53
55
|
|
|
54
56
|
## 실행 컨텍스트
|
|
55
57
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: makdoong2-publisher
|
|
3
|
-
description: workflow delivery phase (substages commit/pr/review) — atomic commit execution, PR creation, inline review comments.
|
|
3
|
+
description: "workflow delivery phase (substages commit/pr/review) — atomic commit execution, PR creation, inline review comments. DIRECT EXECUTOR: commit/pr/review 모두 본 에이전트가 worktree 에서 직접 git 명령·MCP 호출을 수행한다. Spawned by makdoong2-team-leader via dispatch_stage tool."
|
|
4
4
|
mode: subagent
|
|
5
5
|
tools:
|
|
6
6
|
Read: true
|
|
@@ -22,9 +22,13 @@ permission:
|
|
|
22
22
|
"git worktree add*": "deny"
|
|
23
23
|
"git worktree remove*": "deny"
|
|
24
24
|
"rm -rf*": "deny"
|
|
25
|
-
|
|
26
|
-
|
|
25
|
+
# 정식 키는 `edit`, 규칙은 findLast — 넓은 것을 위, 좁은 것을 아래. (analyzer 주석 참조)
|
|
26
|
+
edit:
|
|
27
27
|
"**/*": "deny"
|
|
28
|
+
".makdoong2-team/*/change-report.md": "allow"
|
|
29
|
+
"**/.makdoong2-team/*/change-report.md": "allow"
|
|
30
|
+
".makdoong2-team/*/review-comment-plan.json": "allow"
|
|
31
|
+
"**/.makdoong2-team/*/review-comment-plan.json": "allow"
|
|
28
32
|
---
|
|
29
33
|
|
|
30
34
|
Delivery Phase — 커밋·PR 생성·리뷰 코멘트. **직접 실행 모델**: commit/pr/review 3개 substage 모두 본 에이전트가 worktree 경로에서 **직접 `git add` / `git commit` / `git push` / bitbucket MCP** 를 호출한다. 부장님(team-leader)은 git 권한이 제거되어 있으며 오케스트레이션만 담당한다.
|
|
@@ -94,10 +94,10 @@ bash <SCRIPTS_DIR>/state.sh get <이슈키> '.stages."2_implementation".substage
|
|
|
94
94
|
`<STAGES_DIR>/NN-*.md`을 읽어 단계가 요구한 *명시적 산출물*을 추출한다.
|
|
95
95
|
- 1_planning.jira: **통합 planning spec(01-planning.md)** 사용 — 3개 substage를 한 번에 처리하므로 다음 모두 확인:
|
|
96
96
|
- `jira`: `template_validation` 6항목 모두 기록 + `validation_passed=true` + `done=true`
|
|
97
|
-
- `requirements`: `done=true` + `policy.category`(minor|major) 설정 + `self_check.categorized==true` + `
|
|
97
|
+
- `requirements`: `done=true` + `policy.category`(minor|major) 설정 + `self_check.categorized==true` + **`draft_path` 마커 기록 + 그 경로의 파일 존재** (아래 §2-4 참조)
|
|
98
98
|
- `scope`: `done=true` + `self_check.paths_explicit=true`
|
|
99
99
|
- **interview_required=true가 기록되어 있고 requirements.done=false이면**: 인터뷰 대기 상태 → **REJECTED** (부장님이 인터뷰 후 재dispatch 필요)
|
|
100
|
-
- 1_planning.requirements: (단독 dispatch 폴백 시) `done_at` / `verification_pending`
|
|
100
|
+
- 1_planning.requirements: (단독 dispatch 폴백 시) `done_at` / `verification_pending` + **`draft_path` 마커 기록 + 그 경로의 파일 존재** (아래 §2-4) + `.policy.category` 설정 + `self_check.categorized==true`
|
|
101
101
|
- 1_planning.scope: (단독 dispatch 폴백 시) 4가지 출력 형식 항목 + `done=true`
|
|
102
102
|
- 2_implementation.analysis:
|
|
103
103
|
- `.skipped == true` 이면 즉시 **VERIFIED** (게이트가 SKIP 처리한 경우이므로 산출물 없음)
|
|
@@ -114,7 +114,11 @@ bash <SCRIPTS_DIR>/state.sh get <이슈키> '.stages."2_implementation".substage
|
|
|
114
114
|
- `integration_points` 배열 길이 >= 1
|
|
115
115
|
- `test_conventions.framework` 가 존재하고 비어있지 않음 (`null`/빈 문자열 불가 — `"none"` 은 허용)
|
|
116
116
|
- `.self_check` 의 **7개** boolean (`has_project_structure` / `has_dependencies` / `has_task_relevant_files` / `has_conventions` / `has_integration_points` / `has_test_conventions` / `json_schema_valid`) 모두 true
|
|
117
|
-
- `git status --porcelain` 이 `workspace-analysis.json` 외 다른 파일 변경/신규를 보고하지 않음 (analyzer 위반 신호)
|
|
117
|
+
- `git status --porcelain` 이 **플러그인 자신의 상태 디렉터리(`.makdoong2-team/`)를 뺀 뒤** `workspace-analysis.json` 외 다른 파일 변경/신규를 보고하지 않음 (analyzer 위반 신호)
|
|
118
|
+
```bash
|
|
119
|
+
git status --porcelain | grep -v '\.makdoong2-team/' | grep -v 'workspace-analysis\.json'
|
|
120
|
+
```
|
|
121
|
+
출력이 비어 있어야 한다. `.makdoong2-team/` 은 플러그인이 작업 트리 안에 만드는 **자기 상태**이지 analyzer 의 부산물이 아니다. 이것을 위반으로 세면 해당 패턴이 git exclude 에 없는 저장소에서 **항상 REJECTED** 가 나고, 그 시점에 exclude 를 고칠 권한을 가진 역할이 파이프라인에 없어(analyzer 는 산출물 1개만 쓰기 가능 · team-leader 는 하드룰 2 로 차단 · engineer 는 analysis 통과 후 단계) 동일 사유 무한 루프가 된다 (issue #6-②).
|
|
118
122
|
- 2_implementation.dev: `done=true` + sub-agent output에 "테스트 추가" 명시 / 5체크
|
|
119
123
|
- 2_implementation.test: `.stages."2_implementation".substages."test"` 의 각 필드가 아래 조건을 모두 충족해야 함
|
|
120
124
|
- `.unit` ∈ `{"pass", "fail", "skip"}` — `none`/`null` 은 미기록 → REJECTED
|
|
@@ -158,7 +162,11 @@ bash <SCRIPTS_DIR>/state.sh get <이슈키> '.stages."2_implementation".substage
|
|
|
158
162
|
- 제목 형식: `^(Feat|Fix|Chore|Refactor|Docs|Style|Test|Perf|Ci|Build|Revert): [A-Z]+-[0-9]+ - .+$`
|
|
159
163
|
- 제목 길이 ≤ 50자
|
|
160
164
|
- 제목에 결합어(`and`, `&`, `+`, `및`, `그리고`) 없음
|
|
161
|
-
- 본문에
|
|
165
|
+
- 본문에 이슈 참조 마커 `[RV] <이슈키>` 포함. **단 본문이 비어 있으면 면제** —
|
|
166
|
+
`gates/stage6-post-commit-verify.sh` §7 과 정확히 같은 규칙이다 (`\[RV\][[:space:]]+[A-Z]+-[0-9]+`).
|
|
167
|
+
`Resolves:`/`Closes:`/`Fixes:`/`See also:` 를 요구하지 말 것 — CLAUDE.md · `stages/07-commit.md` ·
|
|
168
|
+
`agents/makdoong2-publisher.md` · `references/` 어디에도 그 키워드는 없고, 규약대로 커밋하면
|
|
169
|
+
post-gate 는 통과하는데 verifier 만 REJECTED 를 내는 구조적 무한 재작업이 된다.
|
|
162
170
|
- 위반 시 → **REJECTED** + `finding.item = "3_delivery.commit.msg_convention_violation"` + `evidence` 에 위반 커밋 SHA·제목·위반 사유.
|
|
163
171
|
|
|
164
172
|
4. **필수 마커 확인**:
|
|
@@ -271,10 +279,28 @@ BB_BASE=$(jq -r '.hosts.BITBUCKET_API_BASE_PATH' ~/.config/opencode/makdoong2-te
|
|
|
271
279
|
|
|
272
280
|
5. 위 4단계 모두 통과 시 § 2-2 (앵커 재검증) 로 계속.
|
|
273
281
|
|
|
282
|
+
### 2-4. 1_planning.requirements 전용: draft_path 마커 재검증
|
|
283
|
+
|
|
284
|
+
게이트(`stage3-scope-verify.sh`)는 `spec_hash` 가 기록돼 있으면 `draft_path` **마커**를 하드 요구한다. 반면 종전 verifier 기준은 `requirements-draft.md` **파일 존재**만 봤다. 두 기준이 어긋나 있어서, `spec_hash` 는 기록하고 `draft_path` 는 빠뜨린 채 `done=true` 로 끝난 substage 를 verifier 가 VERIFIED 로 통과시키고 **바로 다음 게이트가 하드 차단**하는 정지가 발생했다 (issue #6-①). 파일은 멀쩡히 있으므로 "파일 존재" 검사로는 절대 잡히지 않는다.
|
|
285
|
+
|
|
286
|
+
```bash
|
|
287
|
+
DRAFT=$(bash <SCRIPTS_DIR>/state.sh get <이슈키> '.stages."1_planning".substages."requirements".draft_path' | tr -d '"')
|
|
288
|
+
{ [ -n "$DRAFT" ] && [ "$DRAFT" != "null" ]; } || REJECTED # 마커 누락 — 파일이 있어도 REJECTED
|
|
289
|
+
ROOT=$(bash <SCRIPTS_DIR>/state.sh root)
|
|
290
|
+
if [[ "$DRAFT" == /* ]]; then DRAFT_ABS="$DRAFT"; else DRAFT_ABS="$ROOT/$DRAFT"; fi
|
|
291
|
+
[ -f "$DRAFT_ABS" ] || REJECTED
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
REJECTED 시 `findings[].item` 은 `requirements.draft_path_missing`, `next_action` 은 `REVERT_DONE_MARKER`. 재작업하는 planner 는 `stages/02-requirements.md` §2-5 의 9번 항목(`draft_recorded`)을 채우면 된다.
|
|
295
|
+
|
|
296
|
+
**게이트 · self_check · verifier 세 곳의 필수 마커 정의는 항상 일치해야 한다.** 한 곳만 고치면 같은 정지가 그대로 재현된다.
|
|
297
|
+
|
|
274
298
|
### 3. Sub-agent 출력 정합성 점검
|
|
275
299
|
|
|
276
300
|
다음 *추론형* 의심 신호를 확인한다:
|
|
277
|
-
- **빈 응답** — 산출물 언급 없이 "완료"
|
|
301
|
+
- **빈 응답** — 산출물 언급 없이 "완료" 선언.
|
|
302
|
+
**단, §1·§2 의 결정론적 검사를 전부 통과했다면 이 신호만으로 REJECTED 하지 않는다.** `dispatch_stage` 는 최종 텍스트가 없어도 `.done=true` 면 성공으로 처리한다 (`shouldOverrideEmptyOutcome` — 최종 텍스트를 생략하는 로컬 모델 보상). 그 보상과 이 신호가 어긋나 있으면 그런 모델에서는 **모든 substage 가 REJECTED** 된다 (issue #6 부수 관찰 1). 산출물과 마커가 결정론적으로 검증되는데 산문이 없다는 것은 실패의 증거가 아니다.
|
|
303
|
+
마커나 산출물이 하나라도 어긋나면 그때는 REJECTED 이지만, 그건 이 추론 신호가 아니라 **§1·§2 위반**으로 기록한다 (`findings[].item` 을 결정론적 항목명으로 적는다 — 원인을 "빈 응답" 으로 돌리면 재작업 방향이 어긋난다).
|
|
278
304
|
- **테스트 삭제 정황** — output에 "기존 테스트 제거" / `// @ts-ignore` 추가 / `as any` 도입 언급
|
|
279
305
|
- **인라인 disable** — `eslint-disable` / `# noqa` 등으로 게이트 우회
|
|
280
306
|
- **자기선언 완료** — `done=true`를 임의로 기록했으나 self_check 누락
|
|
@@ -370,6 +370,21 @@
|
|
|
370
370
|
"description": "Per-source wall-clock budget. Default 10. Deliberately shorter than timeout.substage_minutes: a source that cannot answer in this window is recorded as failed so the other sources' findings still land."
|
|
371
371
|
}
|
|
372
372
|
}
|
|
373
|
+
},
|
|
374
|
+
"network": {
|
|
375
|
+
"type": "object",
|
|
376
|
+
"description": "사내 엔드포인트(Jira/Confluence/Bitbucket/Bamboo) 접속의 TLS 설정. skills/_lib/load-secret.sh 의 configure_tls_from_makdoong2_config 가 읽는다.",
|
|
377
|
+
"additionalProperties": false,
|
|
378
|
+
"properties": {
|
|
379
|
+
"ca_bundle": {
|
|
380
|
+
"type": "string",
|
|
381
|
+
"description": "사내 사설 CA 번들의 절대 경로. 지정하면 NODE_EXTRA_CA_CERTS 로 넘기고 인증서 검증을 켠다. 사설 CA 환경의 권장 설정이다."
|
|
382
|
+
},
|
|
383
|
+
"tls_reject_unauthorized": {
|
|
384
|
+
"type": "boolean",
|
|
385
|
+
"description": "true 면 인증서 검증을 켠다. ca_bundle 도 이 값도 없으면 검증을 끈 채 동작하며(종전 호환) 매 기동마다 경고를 낸다."
|
|
386
|
+
}
|
|
387
|
+
}
|
|
373
388
|
}
|
|
374
389
|
}
|
|
375
390
|
}
|