From 5722aa56276a556d2fe591233aef9ebbea6de796 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EA=B8=B0=EB=AF=BC?= Date: Sun, 18 Oct 2026 15:11:32 +0900 Subject: [PATCH 01/10] =?UTF-8?q?chore:=20=EB=8F=85=EB=A6=BD=20=EC=8B=A4?= =?UTF-8?q?=ED=96=89=EA=B8=B0=EC=9D=98=20=EC=8B=A4=EC=A0=9C=20=EB=AA=A8?= =?UTF-8?q?=EB=8D=B8=20=EC=8B=9C=EC=97=B0=20=EA=B2=80=EC=A6=9D=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20(#557)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/demo-reproducibility.yml | 48 +++++ scripts/demo/browser_smoke.cjs | 57 ++++++ scripts/demo/reproduce_fresh.py | 216 +++++++++++++++++++++ 3 files changed, 321 insertions(+) create mode 100644 .github/workflows/demo-reproducibility.yml create mode 100644 scripts/demo/browser_smoke.cjs create mode 100644 scripts/demo/reproduce_fresh.py diff --git a/.github/workflows/demo-reproducibility.yml b/.github/workflows/demo-reproducibility.yml new file mode 100644 index 00000000..07d4c7f7 --- /dev/null +++ b/.github/workflows/demo-reproducibility.yml @@ -0,0 +1,48 @@ +name: Local demo reproducibility + +on: + pull_request: + paths: + - .github/workflows/demo-reproducibility.yml + - scripts/demo/reproduce_fresh.py + - scripts/demo/browser_smoke.cjs + workflow_dispatch: + +permissions: + contents: read + +concurrency: + group: demo-reproduction-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: false + +jobs: + fresh-search-demo: + runs-on: ubuntu-24.04 + timeout-minutes: 45 + env: + EMBEDDING_CONTAINER_CPUS: "2.0" + DEMO_BROWSER_MODULE: ${{ runner.temp }}/docgrid-demo-browser/node_modules/playwright + steps: + - uses: actions/checkout@v7 + with: + persist-credentials: false + - uses: actions/setup-java@v6 + with: + distribution: temurin + java-version: "17" + - uses: actions/setup-node@v7 + with: + node-version: "22" + - name: Prepare isolated Chromium dependency + run: | + npm install --prefix "$RUNNER_TEMP/docgrid-demo-browser" --no-save --package-lock=false playwright@1.64.1 + node "$DEMO_BROWSER_MODULE/cli.js" install --with-deps chromium + - name: Reproduce start, verify, browser and stop with real BGE-M3 + run: python3 scripts/demo/reproduce_fresh.py + - name: Preserve redacted per-purpose evidence + if: always() + uses: actions/upload-artifact@v7 + with: + name: local-demo-reproduction-${{ github.run_id }}-${{ github.run_attempt }} + path: .demo/reproduction/ + if-no-files-found: warn diff --git a/scripts/demo/browser_smoke.cjs b/scripts/demo/browser_smoke.cjs new file mode 100644 index 00000000..43e29156 --- /dev/null +++ b/scripts/demo/browser_smoke.cjs @@ -0,0 +1,57 @@ +// 독립 실행기의 실제 Chromium으로 로그인·검색·다운로드를 검증한다. 인증정보·원문 답변은 기록하지 않는다. +const fs = require('node:fs/promises'); +const path = require('node:path'); +const crypto = require('node:crypto'); +const { chromium } = require(process.env.DEMO_BROWSER_MODULE); + +(async () => { + const directory = process.argv[2]; + await fs.mkdir(directory, { recursive: false }); + const query = JSON.parse(await fs.readFile('examples/demo-corpus/checks.json')).queries[0]; + const original = await fs.readFile(path.join('examples/demo-corpus', query.expectedFile)); + const sha = (bytes) => crypto.createHash('sha256').update(bytes).digest('hex'); + const previous = JSON.parse(await fs.readFile('.demo/launcher/last-report.json')); + const report = JSON.parse(await fs.readFile(previous.report)); + const documentId = report.documents[sha(original)]; + const browser = await chromium.launch(); + const page = await browser.newPage({ acceptDownloads: true }); + page.setDefaultTimeout(45000); + let stage = 'login'; + try { + await page.goto('http://127.0.0.1:3000/login?returnTo=%2Fsearch'); + await page.getByLabel('이메일', { exact: true }).fill('demo@docgrid.local'); + await page.getByLabel('비밀번호', { exact: true }).fill(process.env.DOCGRID_DEMO_PASSWORD); + await page.getByRole('button', { name: '로그인', exact: true }).click(); + await page.waitForURL('**/search'); + stage = 'search'; + await page.getByRole('textbox', { name: '문서 검색', exact: true }).fill(query.query); + const response = page.waitForResponse(r => r.request().method() === 'POST' && new URL(r.url()).pathname.endsWith('/search')); + await page.getByRole('button', { name: '검색', exact: true }).click(); + const result = await response; + const body = await result.json(); + if (result.status() !== 200 || !body.data.results.some(item => item.documentId === documentId)) throw new Error('search verdict'); + const link = page.locator(`a.source-card[href="/documents/${documentId}"]`).first(); + await link.waitFor(); + await page.screenshot({ path: path.join(directory, 'search.png'), fullPage: true, + mask: [page.getByText('demo@docgrid.local', { exact: true })] }); + await link.click(); + await page.waitForURL(`**/documents/${documentId}`); + stage = 'download'; + const downloaded = page.waitForEvent('download'); + await page.getByRole('button', { name: '↓ 다운로드', exact: true }).click(); + const download = await downloaded; + const bytes = await fs.readFile(await download.path()); + if (sha(bytes) !== sha(original)) throw new Error('download hash'); + await fs.writeFile(path.join(directory, 'summary.json'), JSON.stringify({ verdict: 'PASS', + timestamp: new Date().toISOString(), browser: browser.version(), login: 'PASS', search: 'PASS', + download: 'PASS', documentId, bytes: bytes.length, sha256: sha(bytes) }, null, 2)); + console.log(JSON.stringify({ login: 'PASS', search: 'PASS', download: 'PASS', downloadedBytes: bytes.length })); + } catch (error) { + // Playwright 오류 본문에는 입력값이 포함될 수 있으므로 유형과 단계만 보존한다. + await fs.writeFile(path.join(directory, 'summary.json'), JSON.stringify({ verdict: 'FAIL', stage, errorType: error.name })); + console.log(JSON.stringify({ verdict: 'FAIL', stage, errorType: error.name })); + process.exitCode = 1; + } finally { + await browser.close(); + } +})(); diff --git a/scripts/demo/reproduce_fresh.py b/scripts/demo/reproduce_fresh.py new file mode 100644 index 00000000..b3e22f92 --- /dev/null +++ b/scripts/demo/reproduce_fresh.py @@ -0,0 +1,216 @@ +#!/usr/bin/env python3 +"""빈 GitHub hosted 실행기에서 실제 로컬 시연과 생명주기를 재현하고 목적별 근거를 남긴다.""" +from __future__ import annotations + +import hashlib +import importlib.util +import json +import os +import secrets +import shutil +import signal +import socket +import subprocess +import sys +import threading +import time +from pathlib import Path + +ROOT = Path(__file__).resolve().parents[2] +spec = importlib.util.spec_from_file_location("demo_runtime", ROOT / "scripts/demo.py") +demo = importlib.util.module_from_spec(spec) +spec.loader.exec_module(demo) + + +class Reproduction: + """개인 환경에서는 실행을 거부하며 임시 실행기의 자원·정제 근거만 관리한다.""" + + def __init__(self): + self.run_id = os.environ["GITHUB_RUN_ID"] + "-" + os.environ["GITHUB_RUN_ATTEMPT"] + self.directory = ROOT / ".demo/reproduction" / self.run_id + self.directory.mkdir(parents=True, exist_ok=False) + self.password = secrets.token_urlsafe(24) + demo.seed.SECRET_VALUES.append(self.password) + self.environment = {**os.environ, "DOCGRID_DEMO_PASSWORD": self.password} + self.results = [] + self.stage = "preflight" + + def save(self): + demo.write_json(self.directory / "summary.json", {"runId": self.run_id, + "revision": subprocess.check_output(["git", "rev-parse", "HEAD"], text=True).strip(), + "environment": "GitHub hosted Ubuntu 24.04 · actual PostgreSQL/Valkey/BGE-M3 · no Ollama", + "results": self.results}) + + def record(self, name, purpose, verdict, **values): + item = {"id": name, "purpose": purpose, "timestamp": demo.now(), "verdict": verdict, **values} + self.results.append(item) + self.save() + print(json.dumps(item, ensure_ascii=False), flush=True) + + def execute(self, name, purpose, command, expected=0, timeout=1200, probe=None, extra_env=None): + self.stage = name + started = time.monotonic() + path = self.directory / (name + ".log") + with path.open("x", encoding="utf-8") as output: + output.write(f"실행 ID: {self.run_id}/{name}\n목적: {purpose}\n시작: {demo.now()}\n") + output.write(f"장소: 독립 GitHub hosted 실행기\n기대 종료 코드: {expected}\n") + output.write("절차: " + " ".join(command) + "\n") + proc = subprocess.Popen(command, cwd=ROOT, env={**self.environment, **(extra_env or {})}, + stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True, errors="replace", start_new_session=True) + def collect(): + for line in proc.stdout: + safe = demo.seed.safe_text(line.replace(str(ROOT), "<작업공간>").replace(str(Path.home()), "<사용자 홈>")) + output.write(demo.now() + " " + safe) + output.flush() + reader = threading.Thread(target=collect) + reader.start() + try: + if probe: + probe(proc) + code = proc.wait(timeout=timeout) + except BaseException: + if proc.poll() is None: + proc.terminate() + try: + proc.wait(timeout=90) + except subprocess.TimeoutExpired: + os.killpg(proc.pid, signal.SIGKILL) + proc.wait(timeout=10) + raise + finally: + reader.join(timeout=5) + elapsed = round(time.monotonic() - started, 3) + output.write(f"종료: {demo.now()}\n실제 종료 코드: {code}\n소요 시간: {elapsed}초\n") + self.record(name, purpose, "PASS" if code == expected else "FAIL", exitCode=code, + expectedExitCode=expected, elapsedSeconds=elapsed, log=path.name) + if code != expected: + raise RuntimeError("expected exit code mismatch") + + def state(self): + runtime = demo.DemoRuntime(ROOT) + return runtime.load() + + def wait_state(self, predicate, timeout=60): + deadline = time.monotonic() + timeout + while time.monotonic() < deadline: + state = self.state() + if state and predicate(state): + return state + time.sleep(0.1) + raise RuntimeError("state wait timeout") + + def concurrent_probe(self, proc): + self.wait_state(lambda state: state["status"] == "STARTING") + self.execute("concurrent-start", "진행 중 start의 잠금으로 두 번째 start 거부", ["./scripts/demo.py", "start"], expected=1, timeout=30) + + def interruption_probe(self, proc): + self.wait_state(lambda state: state["status"] == "STARTING" and "backend" in state["processes"]) + proc.send_signal(signal.SIGTERM) + + def assert_stopped(self, name): + state = self.state() + passed = bool(state and state["status"] == "STOPPED" and + not any(demo.port_open(port) for port in [8080, 8081, 3000, 8000, 6379, 55432])) + owned = 0 + if state: + for service, item in state["containers"].items(): + raw = subprocess.check_output(["docker", "inspect", "--format", "{{.State.Running}}", item["id"]], text=True) + passed = passed and raw.strip() == "false" + owned += int(item["owned"]) + self.record(name, "종료 뒤 실제 서버 포트·컨테이너 실행 상태 확인", "PASS" if passed else "FAIL", ownedContainers=owned) + if not passed: + raise RuntimeError("cleanup incomplete") + + def report(self, name, replay=False): + current = demo.read_json(ROOT / ".demo/launcher/last-report.json") + summary_path = ROOT / current["report"] + value = demo.read_json(summary_path) + required = {"upload": 15, "indexing": 15, "search": 3, "download": 15} + if replay: + required["replay"] = 15 + passed = value["exitCode"] == 0 and all(value["stages"][stage] == + {"status": "PASS", "passed": count, "expected": count} for stage, count in required.items()) + target = self.directory / name + target.mkdir() + for path in summary_path.parent.iterdir(): + if path.name in {"summary.json", "events.jsonl"}: + shutil.copyfile(path, target / path.name) + self.record(name, "예제 필수 단계 수와 이전 원장 문서 ID 검사", "PASS" if passed else "FAIL", + counts=required, rag=value["stages"]["rag"]["status"]) + if not passed: + raise RuntimeError("demo verdict incomplete") + + def run(self): + if (ROOT / ".env").exists() or (ROOT / "frontend/.env.local").exists(): + raise RuntimeError("fresh environment files already exist") + existing = subprocess.check_output(["docker", "ps", "-aq"], text=True).strip() + images = subprocess.check_output(["docker", "image", "ls", "-q"], text=True).split() + volumes = subprocess.check_output(["docker", "volume", "ls", "-q"], text=True).split() + if existing or volumes: + raise RuntimeError("fresh Docker environment required") + self.record("preflight", "독립 실행기의 새 환경 확인", "PASS", existingContainers=0, + existingImageCount=len(set(images)), existingVolumes=0, environmentFilesInitiallyPresent=0, + workload={"documents": 15, "searchQuestions": 3, "browserSessions": 1}) + command = ["./scripts/demo.py"] + self.execute("cold-start", "모델·의존성 최초 준비를 포함한 전체 기동", command + ["start", "--timeout", "1200"], probe=self.concurrent_probe, timeout=1800) + paths = [ROOT / ".env", ROOT / "frontend/.env.local"] + before = [(hashlib.sha256(p.read_bytes()).digest(), p.stat().st_mtime_ns) for p in paths] + self.execute("verify-first", "실제 모델 인덱싱·검색·프록시·원본 대조", command + ["verify", "--timeout", "900"]) + self.report("first-result") + self.execute("verify-replay", "같은 계정 재실행과 문서 ID 재사용", command + ["verify", "--timeout", "900"]) + self.report("replay-result", replay=True) + self.execute("browser", "실제 Chromium 로그인·질문 전송·원본 다운로드 해시", ["node", "scripts/demo/browser_smoke.cjs", str(self.directory / "browser")], timeout=180) + self.execute("ready-status", "기록이 아닌 실제 서버·프록시·DB 준비 재확인", command + ["status"], timeout=60) + self.execute("reuse-start", "동일 활성 세션 중복 기동 없이 재사용", command + ["start"], timeout=60) + self.execute("stop-first", "소유 자원 종료와 데이터·캐시 보존", command + ["stop"], timeout=120) + self.assert_stopped("stop-observation") + self.execute("stop-replay", "이미 종료된 세션 재종료", command + ["stop"], timeout=30) + self.execute("missing-provider", "잘못 지정된 임베딩 주소는 준비 실패로 판정", command + ["start", "--timeout", "5"], expected=1, timeout=120, + extra_env={"EMBEDDING_SERVER_URL": "http://127.0.0.1:17999"}) + self.assert_stopped("missing-provider-cleanup") + self.execute("interrupted-start", "실제 백엔드 기동 중 부모 SIGTERM 뒤 소유 자원 정리", command + ["start"], expected=130, timeout=180, probe=self.interruption_probe) + self.assert_stopped("interrupted-cleanup") + self.execute("warm-start", "보존된 의존성·모델 캐시로 재기동", command + ["start"], timeout=240) + self.execute("verify-warm", "재기동 뒤 데이터 보존과 문서 ID 재확인", command + ["verify"], timeout=240) + self.report("warm-result", replay=True) + self.execute("stop-final", "최종 소유 자원 정리", command + ["stop"], timeout=120) + self.assert_stopped("final-cleanup") + unchanged = before == [(hashlib.sha256(p.read_bytes()).digest(), p.stat().st_mtime_ns) for p in paths] + self.record("environment-preserved", "생성 이후 환경 파일 bytes·mtime 보존", "PASS" if unchanged else "FAIL", unchangedFiles=2 if unchanged else 0) + if not unchanged: + raise RuntimeError("environment file changed") + + def collect(self): + source = ROOT / ".demo/launcher/sessions" + if source.exists(): + for directory in source.iterdir(): + target = self.directory / "runtime" / directory.name + target.mkdir(parents=True, exist_ok=True) + for path in directory.iterdir(): + if path.suffix == ".log" or path.name == "events.jsonl": + shutil.copyfile(path, target / path.name) + + +def main(): + # 개인 컴퓨터나 자체 운영 runner에서는 기존 자원 보호를 위해 실행 자체를 거부한다. + if os.environ.get("GITHUB_ACTIONS") != "true" or os.environ.get("RUNNER_ENVIRONMENT") != "github-hosted": + print("이 시험은 별도 GitHub hosted 임시 실행기 전용입니다.") + return 2 + run = Reproduction() + code = 0 + try: + run.run() + except Exception as error: + run.record("incomplete", "현재 회차의 완료 여부", "FAIL", at=run.stage, errorType=type(error).__name__) + code = 1 + finally: + try: + run.execute("always-cleanup", "시험 중단·완료 후 소유 자원 종료", ["./scripts/demo.py", "stop"], timeout=120) + except Exception: + code = 1 + run.collect() + return code + + +if __name__ == "__main__": + raise SystemExit(main()) From 58862ecd83f40550e08f36d750acd4b601dd91f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EA=B8=B0=EB=AF=BC?= Date: Sun, 18 Oct 2026 15:12:56 +0900 Subject: [PATCH 02/10] =?UTF-8?q?fix:=20=EC=8B=A4=ED=96=89=EA=B8=B0=20?= =?UTF-8?q?=EA=B2=BD=EB=A1=9C=EB=A5=BC=20step=20=EC=BB=A8=ED=85=8D?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=EC=97=90=EC=84=9C=20=ED=95=B4=EC=84=9D=20(#5?= =?UTF-8?q?57)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/demo-reproducibility.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/demo-reproducibility.yml b/.github/workflows/demo-reproducibility.yml index 07d4c7f7..789b05e4 100644 --- a/.github/workflows/demo-reproducibility.yml +++ b/.github/workflows/demo-reproducibility.yml @@ -21,7 +21,6 @@ jobs: timeout-minutes: 45 env: EMBEDDING_CONTAINER_CPUS: "2.0" - DEMO_BROWSER_MODULE: ${{ runner.temp }}/docgrid-demo-browser/node_modules/playwright steps: - uses: actions/checkout@v7 with: @@ -34,10 +33,14 @@ jobs: with: node-version: "22" - name: Prepare isolated Chromium dependency + env: + DEMO_BROWSER_MODULE: ${{ runner.temp }}/docgrid-demo-browser/node_modules/playwright run: | npm install --prefix "$RUNNER_TEMP/docgrid-demo-browser" --no-save --package-lock=false playwright@1.64.1 node "$DEMO_BROWSER_MODULE/cli.js" install --with-deps chromium - name: Reproduce start, verify, browser and stop with real BGE-M3 + env: + DEMO_BROWSER_MODULE: ${{ runner.temp }}/docgrid-demo-browser/node_modules/playwright run: python3 scripts/demo/reproduce_fresh.py - name: Preserve redacted per-purpose evidence if: always() From fa6fc5a7fa255ba8d22027f2490a4d1f90d39098 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EA=B8=B0=EB=AF=BC?= Date: Sun, 18 Oct 2026 15:28:03 +0900 Subject: [PATCH 03/10] =?UTF-8?q?fix:=20=EB=B6=84=EB=A6=AC=EB=90=9C=20Grad?= =?UTF-8?q?le=20=EC=9E=90=EC=8B=9D=20JVM=EC=9D=98=20=EC=86=8C=EC=9C=A0?= =?UTF-8?q?=EA=B6=8C=EA=B3=BC=20=EC=A2=85=EB=A3=8C=20=ED=99=95=EC=9D=B8=20?= =?UTF-8?q?(#557)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/demo.py | 93 +++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 79 insertions(+), 14 deletions(-) diff --git a/scripts/demo.py b/scripts/demo.py index 87c07f81..a4aa0572 100755 --- a/scripts/demo.py +++ b/scripts/demo.py @@ -15,6 +15,7 @@ import socket import subprocess import sys +import threading import time import urllib.error import urllib.request @@ -92,14 +93,43 @@ def port_open(port): return False -def listener_owned(port, record): +def listener_owned(port, record, children=()): """HTTP 성공 외에 실제 수신 프로세스가 소유 그룹에 속하는지도 확인한다.""" result = subprocess.run(["lsof", "-nP", "-a", f"-iTCP:{port}", "-sTCP:LISTEN", "-t"], capture_output=True, text=True) pids = set(result.stdout.split()) if result.returncode or not pids: return False - return all(p.isdigit() and (item := identity(int(p))) and item["pgid"] == record["pgid"] for p in pids) + return all(p.isdigit() and (item := identity(int(p))) and + (item["pgid"] == record["pgid"] or item in children) for p in pids) + + +def children_snapshot(owner, previous): + """확인된 현재 부모에서만 자식을 확장하고 PID 재사용으로 달라진 기록은 버린다.""" + rows = subprocess.run(["ps", "-eo", "pid=,ppid="], capture_output=True, text=True) + if rows.returncode: + raise DemoError("자식 프로세스 계보를 확인할 수 없습니다.") + pairs = [tuple(map(int, line.split())) for line in rows.stdout.splitlines() if len(line.split()) == 2] + live = {item["pid"]: item for item in [owner, *previous] if identity(item["pid"]) == item} + pending = True + while pending: + pending = False + for pid, parent in pairs: + if parent in live and pid not in live: + item = identity(pid) + if item: + live[pid] = item + pending = True + return [item for pid, item in live.items() if pid != owner["pid"]] + + +def track_children(owner, stopped, path): + """Gradle처럼 그룹을 분리하는 자식도 확인한 계보와 식별정보로만 기록한다.""" + known = [] + while not stopped.is_set(): + known = children_snapshot(owner, known) + write_json(path, {"owner": owner, "children": known}) + stopped.wait(0.25) def http_bytes(url): @@ -325,11 +355,12 @@ def backend_ready(self): record = self.state["processes"].get("backend", {}) body = http_json(f"http://127.0.0.1:{self.config.values['MANAGEMENT_PORT']}/actuator/health/readiness") return (body and body.get("status") == "UP" and identity(record.get("pid")) == record and - listener_owned(8080, record) and listener_owned(int(self.config.values["MANAGEMENT_PORT"]), record)) + listener_owned(8080, record, self.owned_children("backend")) and + listener_owned(int(self.config.values["MANAGEMENT_PORT"]), record, self.owned_children("backend"))) def frontend_ready(self): record = self.state["processes"].get("frontend", {}) - if identity(record.get("pid")) != record or not listener_owned(3000, record): + if identity(record.get("pid")) != record or not listener_owned(3000, record, self.owned_children("frontend")): return False direct = http_json("http://127.0.0.1:8080/departments") proxied = http_json("http://127.0.0.1:3000/api/backend/departments") @@ -445,6 +476,20 @@ def verify(self, timeout): self.event(f"[검증 통과] 업로드·인덱싱·검색·원본 검사 완료. 기록: {report}/summary.json") return 0 + def owned_children(self, name): + path = self.component_path(name, ".children.json") + if not path.exists(): + return [] + tree = read_json(path) + if tree.get("owner") != self.state.get("processes", {}).get(name): + raise DemoError("자식 프로세스 기록의 실행 소유자가 다릅니다.") + children = tree.get("children") + if not isinstance(children, list) or any(not isinstance(item, dict) or + type(item.get("pid")) is not int or item["pid"] <= 1 or not item.get("started") or + not item.get("commandHash") for item in children): + raise DemoError("자식 프로세스 식별정보가 잘못됐습니다.") + return children + def stop_process(self, name): record = self.state.get("processes", {}).get(name) if name == "verify" and not self.state.get("verification"): @@ -460,18 +505,28 @@ def stop_process(self, name): record.get("pgid") != record["pid"] or not record.get("started") or not record.get("commandHash")): return False current = identity(record.get("pid")) - if current is None: - handle = self.handles.get(name) - if handle and handle.poll() is not None: - handle.wait() - return not group_members(record.get("pgid")) - if current != record or record["pgid"] != record["pid"]: + if current is not None and (current != record or record["pgid"] != record["pid"]): self.event(f"[조치 필요] 식별정보가 달라 자동 종료하지 않습니다: {name}") return False + children = children_snapshot(record, self.owned_children(name)) + # 3. 분리된 JVM은 계보에서 확인한 PID·시작 시각·명령이 같은 경우에만 개별 종료한다. + for item in reversed(children): + if identity(item["pid"]) == item: + with contextlib.suppress(ProcessLookupError): + os.kill(item["pid"], signal.SIGTERM) members = {pid: identity(pid) for pid in group_members(record["pgid"])} - os.killpg(record["pgid"], signal.SIGTERM) + if identity(record["pid"]) == record: + try: + os.killpg(record["pgid"], signal.SIGTERM) + except ProcessLookupError: + pass + except PermissionError: + # 자식 종료로 부모도 끝나 그룹이 사라진 경우만 이미 정리된 것으로 판단한다. + if group_members(record["pgid"]): + raise deadline = time.monotonic() + 10 - while time.monotonic() < deadline and group_members(record["pgid"]): + while time.monotonic() < deadline and (group_members(record["pgid"]) or + any(identity(item["pid"]) == item for item in children)): time.sleep(0.2) remaining = group_members(record["pgid"]) if remaining: @@ -479,7 +534,11 @@ def stop_process(self, name): return False os.killpg(record["pgid"], signal.SIGKILL) time.sleep(0.2) - released = not group_members(record["pgid"]) + for item in children: + if identity(item["pid"]) == item: + with contextlib.suppress(ProcessLookupError): + os.kill(item["pid"], signal.SIGKILL) + released = not group_members(record["pgid"]) and not any(identity(item["pid"]) == item for item in children) handle = self.handles.get(name) if released and handle: handle.wait(timeout=2) @@ -595,7 +654,11 @@ def supervise(runtime, session_id, component): if (state.get("id") != session_id or state.get("status") not in {"STARTING", "READY"} or component not in {"install", "services", "backend", "frontend", "verify"}): raise DemoError("소유 세션과 실행 구성요소가 일치하지 않습니다.") - write_json(runtime.component_path(component, ".pid.json"), identity(os.getpid())) + owner = identity(os.getpid()) + write_json(runtime.component_path(component, ".pid.json"), owner) + stopped = threading.Event() + tracker = threading.Thread(target=track_children, args=(owner, stopped, runtime.component_path(component, ".children.json")), daemon=True) + tracker.start() code = 2 with runtime.component_path(component, ".log").open("x", encoding="utf-8") as output: try: @@ -637,6 +700,8 @@ def supervise(runtime, session_id, component): code = child.wait() except Exception as error: output.write(now() + " 하위 실행 오류: " + type(error).__name__ + "\n") + stopped.set() + tracker.join(timeout=2) write_json(runtime.component_path(component, ".exit.json"), {"code": code, "finishedAt": now()}) return code From 936ec285a3051ee55b1fdcdd9143185340579b48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EA=B8=B0=EB=AF=BC?= Date: Sun, 18 Oct 2026 15:28:03 +0900 Subject: [PATCH 04/10] =?UTF-8?q?chore:=20=EB=B6=84=EB=A6=AC=20=EC=9E=90?= =?UTF-8?q?=EC=8B=9D=20=ED=9A=8C=EA=B7=80=EC=99=80=20=EC=B7=A8=EC=86=8C=20?= =?UTF-8?q?=EC=8B=9C=20=EC=A7=84=ED=96=89=20=EB=A1=9C=EA=B7=B8=20=EB=B3=B4?= =?UTF-8?q?=EC=A1=B4=20(#557)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/demo/reproduce_fresh.py | 14 ++++++++++++++ scripts/demo/test_demo_runtime.py | 26 +++++++++++++++++++++++++- 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/scripts/demo/reproduce_fresh.py b/scripts/demo/reproduce_fresh.py index b3e22f92..bba8a4c9 100644 --- a/scripts/demo/reproduce_fresh.py +++ b/scripts/demo/reproduce_fresh.py @@ -34,6 +34,17 @@ def __init__(self): self.environment = {**os.environ, "DOCGRID_DEMO_PASSWORD": self.password} self.results = [] self.stage = "preflight" + self.collect_stopped = threading.Event() + self.collector = threading.Thread(target=self.collect_live, daemon=True) + self.collector.start() + + def collect_live(self): + """취소로 최종 정리가 중단돼도 이미 정제된 구성요소 로그의 최근 사본을 보존한다.""" + while not self.collect_stopped.wait(2): + try: + self.collect() + except OSError: + pass def save(self): demo.write_json(self.directory / "summary.json", {"runId": self.run_id, @@ -69,6 +80,7 @@ def collect(): probe(proc) code = proc.wait(timeout=timeout) except BaseException: + self.collect() if proc.poll() is None: proc.terminate() try: @@ -208,6 +220,8 @@ def main(): run.execute("always-cleanup", "시험 중단·완료 후 소유 자원 종료", ["./scripts/demo.py", "stop"], timeout=120) except Exception: code = 1 + run.collect_stopped.set() + run.collector.join(timeout=5) run.collect() return code diff --git a/scripts/demo/test_demo_runtime.py b/scripts/demo/test_demo_runtime.py index 7cf225d2..89e22fa2 100644 --- a/scripts/demo/test_demo_runtime.py +++ b/scripts/demo/test_demo_runtime.py @@ -54,12 +54,13 @@ def setUp(self): 'engineHash': demo.digest('controlled-engine')} self.runtime.save() - def start_controlled_backend(self): + def start_controlled_backend(self, detached=False): script = self.root / 'backend/gradlew' script.write_text('''#!/usr/bin/env python3 import os, subprocess, sys, time from http.server import HTTPServer, BaseHTTPRequestHandler from pathlib import Path +if os.environ.get('CONTROLLED_DETACH') == 'true': os.setsid() child = subprocess.Popen([sys.executable, '-c', 'import time; time.sleep(120)']) server = HTTPServer(('127.0.0.1', 0), BaseHTTPRequestHandler) Path(os.environ['CONTROLLED_PORT_FILE']).write_text(str(server.server_port)) @@ -67,6 +68,8 @@ def start_controlled_backend(self): server.serve_forever() ''') script.chmod(0o755) + if detached: + self.runtime.config.values['CONTROLLED_DETACH'] = 'true' record = self.runtime.spawn('backend') def cleanup(): if demo.identity(record['pid']) == record: @@ -94,6 +97,27 @@ def test_stop_releases_children_and_actual_server_port(self): self.assertFalse(demo.port_open(port)) self.assertEqual([], demo.group_members(record['pgid'])) + def test_detached_child_is_identified_and_stopped_by_registered_identity(self): + record, port = self.start_controlled_backend(detached=True) + deadline = time.monotonic() + 5 + children = [] + while time.monotonic() < deadline: + children = self.runtime.owned_children('backend') + if demo.listener_owned(port, record, children): + break + time.sleep(0.05) + self.assertFalse(demo.listener_owned(port, record)) + self.assertTrue(demo.listener_owned(port, record, children)) + self.assertTrue(self.runtime.stop_process('backend')) + self.assertFalse(demo.port_open(port)) + self.assertFalse(any(demo.identity(item['pid']) == item for item in children)) + + def test_child_record_from_another_owner_is_refused(self): + self.start_controlled_backend() + self.runtime.stop_process('backend') + demo.write_json(self.runtime.component_path('backend', '.children.json'), {'owner': {}, 'children': []}) + with self.assertRaises(demo.DemoError): self.runtime.owned_children('backend') + def test_changed_identity_never_kills_live_process(self): record, port = self.start_controlled_backend() changed = {**record, 'started': 'controlled-stale-start'} From 9c66549f8a6b04a0f4f4e887438dbed347d66f61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EA=B8=B0=EB=AF=BC?= Date: Sun, 18 Oct 2026 15:34:36 +0900 Subject: [PATCH 05/10] =?UTF-8?q?fix:=20=EC=8B=9C=EC=97=B0=20=ED=94=84?= =?UTF-8?q?=EB=9F=B0=ED=8A=B8=EC=97=94=EB=93=9C=EC=9D=98=20IPv4=20?= =?UTF-8?q?=EC=A3=BC=EC=86=8C=20=EB=AA=85=EC=8B=9C=20(#557)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/demo.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/demo.py b/scripts/demo.py index a4aa0572..9921a91a 100755 --- a/scripts/demo.py +++ b/scripts/demo.py @@ -671,7 +671,7 @@ def supervise(runtime, session_id, component): "install": ["npm", "--prefix", "frontend", "ci"], "services": ["bash", "scripts/local-services.sh", "start", "--scope", state["scope"]], "backend": [str(runtime.root / "backend/gradlew"), "-p", "backend", "--no-daemon", "bootRun"], - "frontend": ["npm", "--prefix", "frontend", "run", "dev"], + "frontend": ["npm", "--prefix", "frontend", "run", "dev", "--", "--hostname", "127.0.0.1"], } if component == "verify": check = state["verification"] From 19056305060759cc50b37757c040d1894708662c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EA=B8=B0=EB=AF=BC?= Date: Sun, 18 Oct 2026 15:42:37 +0900 Subject: [PATCH 06/10] =?UTF-8?q?chore:=20=EB=B8=8C=EB=9D=BC=EC=9A=B0?= =?UTF-8?q?=EC=A0=80=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=EC=98=A4=EB=A5=98?= =?UTF-8?q?=EC=9D=98=20=EC=A0=95=EC=A0=9C=20=EC=A7=84=EB=8B=A8=20=EB=B3=B4?= =?UTF-8?q?=EA=B0=95=20(#557)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/demo/browser_smoke.cjs | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/scripts/demo/browser_smoke.cjs b/scripts/demo/browser_smoke.cjs index 43e29156..0b86f943 100644 --- a/scripts/demo/browser_smoke.cjs +++ b/scripts/demo/browser_smoke.cjs @@ -16,12 +16,21 @@ const { chromium } = require(process.env.DEMO_BROWSER_MODULE); const browser = await chromium.launch(); const page = await browser.newPage({ acceptDownloads: true }); page.setDefaultTimeout(45000); - let stage = 'login'; + const clean = value => String(value).replaceAll(process.env.DOCGRID_DEMO_PASSWORD, '<비밀값 생략>') + .replaceAll(process.cwd(), '<작업공간>') + .replace(/eyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+/g, '<토큰 생략>') + .replace(/[\w.+%-]+@[\w.-]+\.[\w.-]+/g, '<이메일 생략>'); + const pageErrors = []; + page.on('pageerror', error => pageErrors.push(clean(error.message))); + let stage = 'login-page'; try { await page.goto('http://127.0.0.1:3000/login?returnTo=%2Fsearch'); + stage = 'login-form'; await page.getByLabel('이메일', { exact: true }).fill('demo@docgrid.local'); await page.getByLabel('비밀번호', { exact: true }).fill(process.env.DOCGRID_DEMO_PASSWORD); + stage = 'login-submit'; await page.getByRole('button', { name: '로그인', exact: true }).click(); + stage = 'login-navigation'; await page.waitForURL('**/search'); stage = 'search'; await page.getByRole('textbox', { name: '문서 검색', exact: true }).fill(query.query); @@ -47,8 +56,13 @@ const { chromium } = require(process.env.DEMO_BROWSER_MODULE); download: 'PASS', documentId, bytes: bytes.length, sha256: sha(bytes) }, null, 2)); console.log(JSON.stringify({ login: 'PASS', search: 'PASS', download: 'PASS', downloadedBytes: bytes.length })); } catch (error) { - // Playwright 오류 본문에는 입력값이 포함될 수 있으므로 유형과 단계만 보존한다. - await fs.writeFile(path.join(directory, 'summary.json'), JSON.stringify({ verdict: 'FAIL', stage, errorType: error.name })); + // 입력값·토큰을 제거한 뒤에만 실패 원인과 화면을 보존한다. + await fs.writeFile(path.join(directory, 'summary.json'), JSON.stringify({ verdict: 'FAIL', stage, + errorType: error.name, message: clean(error.message), pageErrors, + pagePath: new URL(page.url()).pathname, + alerts: (await page.getByRole('alert').allTextContents()).map(clean) }, null, 2)); + await page.screenshot({ path: path.join(directory, 'failure.png'), fullPage: true, + mask: [page.locator('input'), page.getByText('demo@docgrid.local', { exact: true })] }); console.log(JSON.stringify({ verdict: 'FAIL', stage, errorType: error.name })); process.exitCode = 1; } finally { From 6884be9f5d20136124ed740272631c33a2a9020b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EA=B8=B0=EB=AF=BC?= Date: Sun, 18 Oct 2026 15:52:06 +0900 Subject: [PATCH 07/10] =?UTF-8?q?fix:=20=ED=99=94=EB=A9=B4=20=EC=A4=80?= =?UTF-8?q?=EB=B9=84=20=EC=A0=84=20=EC=9D=B8=EC=A6=9D=EC=A0=95=EB=B3=B4?= =?UTF-8?q?=EC=9D=98=20=EA=B8=B0=EB=B3=B8=20GET=20=EC=A0=9C=EC=B6=9C=20?= =?UTF-8?q?=EB=B0=A9=EC=A7=80=20(#557)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/app/components/AuthPage.tsx | 11 +++++++++-- scripts/demo/seed_demo_corpus.py | 2 ++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/frontend/app/components/AuthPage.tsx b/frontend/app/components/AuthPage.tsx index 41ccc6d5..1251e2fa 100644 --- a/frontend/app/components/AuthPage.tsx +++ b/frontend/app/components/AuthPage.tsx @@ -15,8 +15,15 @@ export function AuthPage({ mode }: { mode: "login" | "signup" }) { const [departmentError, setDepartmentError] = useState(""); const [departmentRequest, setDepartmentRequest] = useState(0); const [submitting, setSubmitting] = useState(false); + const [ready, setReady] = useState(false); const [error, setError] = useState(""); + useEffect(() => { + // 1. SSR 폼이 기본 GET으로 먼저 제출되지 않도록 클라이언트 이벤트 연결 후 활성화한다. + const timer = window.setTimeout(() => setReady(true), 0); + return () => window.clearTimeout(timer); + }, []); + useEffect(() => { if (user) window.location.replace(returnPath()); }, [user]); @@ -94,7 +101,7 @@ export function AuthPage({ mode }: { mode: "login" | "signup" }) {
  • 문서 업로드부터 임베딩·색인까지 자동화
  • 권한 사전 필터와 실시간 접근 검증
  • MCP 토큰으로 AI 클라이언트 연동
-
+
DocGrid
{signup ? "CREATE ACCOUNT" : "WELCOME BACK"}

{signup ? "회원가입" : "로그인"}

@@ -108,7 +115,7 @@ export function AuthPage({ mode }: { mode: "login" | "signup" }) { {departmentsLoading ? "가입 가능한 부서 목록을 불러오는 중입니다." : departmentError ? "목록을 다시 불러온 후 가입할 수 있습니다." : departmentId ? "선택한 부서로 계정이 생성됩니다." : "부서를 선택하면 가입 버튼이 활성화됩니다."} : null} - + {signup ? "이미 계정이 있나요?" : "계정이 없으신가요?"} {signup ? "로그인" : "회원가입"}
diff --git a/scripts/demo/seed_demo_corpus.py b/scripts/demo/seed_demo_corpus.py index a373c4b7..24d4b177 100644 --- a/scripts/demo/seed_demo_corpus.py +++ b/scripts/demo/seed_demo_corpus.py @@ -61,6 +61,8 @@ def redirect_request(self, request, fp, code, message, headers, new_url): def safe_text(message: str) -> str: """터미널·파일에 기록하기 전에 자격증명·이메일·서버 주소를 제거한다.""" + message = re.sub(r"(?i)([?&](?:password|passwordConfirmation|token|access_token|accessToken|refresh_token|secret|email)=)[^&#\s\"']+", + r"\1<비밀값 생략>", message) for value in SECRET_VALUES: if value: message = message.replace(value, "<비밀값 생략>") From dbf782c2f47011a32cd12de6a5e4e3059cfdc261 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EA=B8=B0=EB=AF=BC?= Date: Sun, 18 Oct 2026 15:52:06 +0900 Subject: [PATCH 08/10] =?UTF-8?q?chore:=20=EC=9D=B8=EC=A6=9D=20=ED=8F=BC?= =?UTF-8?q?=20SSR=20=EA=B2=BD=EA=B3=84=EC=99=80=20=EC=8B=A4=EC=A0=9C=20?= =?UTF-8?q?=EB=B8=8C=EB=9D=BC=EC=9A=B0=EC=A0=80=20=ED=9A=8C=EA=B7=80=20?= =?UTF-8?q?=EB=B3=B4=EA=B0=95=20(#557)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/tests/rendered-html.test.mjs | 4 ++++ scripts/demo/browser_smoke.cjs | 19 ++++++++++++++++++- scripts/demo/test_demo_verdict.py | 6 ++++++ 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/frontend/tests/rendered-html.test.mjs b/frontend/tests/rendered-html.test.mjs index 13189120..aa1e33a0 100644 --- a/frontend/tests/rendered-html.test.mjs +++ b/frontend/tests/rendered-html.test.mjs @@ -64,6 +64,10 @@ test("renders DocGrid auth and protected loading boundaries", async () => { assert.match(homeHtml, /DocGrid — 팀의 지식에서 정확한 답을<\/title>/i); assert.match(homeHtml, /세션을 확인하는 중입니다/); assert.match(loginHtml, /DocGrid 이메일과 비밀번호/); + // 클라이언트 이벤트가 연결되기 전 기본 GET 제출로 인증정보가 URL에 붙으면 안 된다. + assert.match(loginHtml, /<form[^>]*method="post"/); + assert.match(signupHtml, /<form[^>]*method="post"/); + assert.match(loginHtml, /<button class="primary-button auth-submit" disabled="">로그인<\/button>/); assert.match(loginHtml, /<a href="\/signup" target="_top">회원가입<\/a>/); assert.match(signupHtml, /가입 가능한 부서 목록을 불러오는 중입니다/); assert.match(signupHtml, /<button class="primary-button auth-submit" disabled="">부서 목록 불러오는 중…<\/button>/); diff --git a/scripts/demo/browser_smoke.cjs b/scripts/demo/browser_smoke.cjs index 0b86f943..03cf4419 100644 --- a/scripts/demo/browser_smoke.cjs +++ b/scripts/demo/browser_smoke.cjs @@ -14,14 +14,31 @@ const { chromium } = require(process.env.DEMO_BROWSER_MODULE); const report = JSON.parse(await fs.readFile(previous.report)); const documentId = report.documents[sha(original)]; const browser = await chromium.launch(); + // SSR 경계는 별도 무스크립트 화면에서 검증하며, 인증정보를 입력하지 않는다. + const noScriptContext = await browser.newContext({ javaScriptEnabled: false }); + const noScriptPage = await noScriptContext.newPage(); + await noScriptPage.goto('http://127.0.0.1:3000/login'); + const postFallback = (await noScriptPage.locator('form').getAttribute('method')) === 'post'; + const initiallyDisabled = !(await noScriptPage.getByRole('button', { name: '로그인', exact: true }).isEnabled()); + await fs.writeFile(path.join(directory, 'ssr-auth.json'), JSON.stringify({ purpose: 'hydration 이전 인증정보 URL 제출 방지', + timestamp: new Date().toISOString(), postFallback, initiallyDisabled, + verdict: postFallback && initiallyDisabled ? 'PASS' : 'FAIL' }, null, 2)); + await noScriptContext.close(); + if (!postFallback || !initiallyDisabled) { await browser.close(); throw new Error('SSR auth boundary'); } const page = await browser.newPage({ acceptDownloads: true }); page.setDefaultTimeout(45000); const clean = value => String(value).replaceAll(process.env.DOCGRID_DEMO_PASSWORD, '<비밀값 생략>') + .replace(/([?&](?:password|token|email)=)[^&#\s"']+/gi, '$1<비밀값 생략>') .replaceAll(process.cwd(), '<작업공간>') .replace(/eyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+/g, '<토큰 생략>') .replace(/[\w.+%-]+@[\w.-]+\.[\w.-]+/g, '<이메일 생략>'); const pageErrors = []; + const consoleErrors = []; + const failedResources = []; page.on('pageerror', error => pageErrors.push(clean(error.message))); + page.on('console', message => { if (message.type() === 'error') consoleErrors.push(clean(message.text())); }); + page.on('requestfailed', request => failedResources.push({ path: clean(new URL(request.url()).pathname), + error: clean(request.failure()?.errorText ?? 'unknown') })); let stage = 'login-page'; try { await page.goto('http://127.0.0.1:3000/login?returnTo=%2Fsearch'); @@ -58,7 +75,7 @@ const { chromium } = require(process.env.DEMO_BROWSER_MODULE); } catch (error) { // 입력값·토큰을 제거한 뒤에만 실패 원인과 화면을 보존한다. await fs.writeFile(path.join(directory, 'summary.json'), JSON.stringify({ verdict: 'FAIL', stage, - errorType: error.name, message: clean(error.message), pageErrors, + errorType: error.name, message: clean(error.message), pageErrors, consoleErrors, failedResources, pagePath: new URL(page.url()).pathname, alerts: (await page.getByRole('alert').allTextContents()).map(clean) }, null, 2)); await page.screenshot({ path: path.join(directory, 'failure.png'), fullPage: true, diff --git a/scripts/demo/test_demo_verdict.py b/scripts/demo/test_demo_verdict.py index e511dd2a..1db64276 100644 --- a/scripts/demo/test_demo_verdict.py +++ b/scripts/demo/test_demo_verdict.py @@ -196,6 +196,12 @@ def test_event_redaction_happens_before_storage(self): self.assertNotIn("user@example.invalid", events) self.assertNotIn("server.invalid", events) + def test_query_credentials_are_redacted_without_knowing_the_password(self): + text = seed.safe_text('/login?email=fixture%40example.invalid&password=synthetic-unregistered-password&token=opaque-fixture-token') + self.assertNotIn('fixture%40example.invalid', text) + self.assertNotIn('synthetic-unregistered-password', text) + self.assertNotIn('opaque-fixture-token', text) + class HttpBoundaryTest(unittest.TestCase): """HTTP 오류 코드 해석과 원본 응답 크기 제한의 실제 클라이언트 경계를 확인한다.""" From cf9ebe8e3b2a800d5d23b6dedb017d23ed794f3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EA=B8=B0=EB=AF=BC?= <gimin1463@naver.com> Date: Sun, 18 Oct 2026 16:01:06 +0900 Subject: [PATCH 09/10] =?UTF-8?q?chore:=20=EC=8B=A4=EC=A0=9C=20=EB=B8=8C?= =?UTF-8?q?=EB=9D=BC=EC=9A=B0=EC=A0=80=20=EA=B2=80=EC=A6=9D=20=EC=BB=A8?= =?UTF-8?q?=ED=85=8D=EC=8A=A4=ED=8A=B8=20=EC=88=98=20=EB=AA=85=EC=8B=9C=20?= =?UTF-8?q?(#557)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/demo/reproduce_fresh.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/demo/reproduce_fresh.py b/scripts/demo/reproduce_fresh.py index bba8a4c9..d28dc40e 100644 --- a/scripts/demo/reproduce_fresh.py +++ b/scripts/demo/reproduce_fresh.py @@ -162,7 +162,8 @@ def run(self): raise RuntimeError("fresh Docker environment required") self.record("preflight", "독립 실행기의 새 환경 확인", "PASS", existingContainers=0, existingImageCount=len(set(images)), existingVolumes=0, environmentFilesInitiallyPresent=0, - workload={"documents": 15, "searchQuestions": 3, "browserSessions": 1}) + workload={"documents": 15, "searchQuestions": 3, "interactiveBrowserSessions": 1, + "noScriptBoundarySessions": 1}) command = ["./scripts/demo.py"] self.execute("cold-start", "모델·의존성 최초 준비를 포함한 전체 기동", command + ["start", "--timeout", "1200"], probe=self.concurrent_probe, timeout=1800) paths = [ROOT / ".env", ROOT / "frontend/.env.local"] From 86aaf7c3a972bc78725561f761b4e4fb86786e0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EA=B8=B0=EB=AF=BC?= <gimin1463@naver.com> Date: Sun, 18 Oct 2026 16:01:07 +0900 Subject: [PATCH 10/10] =?UTF-8?q?docs:=20=EC=8B=A4=EC=A0=9C=20=EB=AA=A8?= =?UTF-8?q?=EB=8D=B8=C2=B7=EB=B8=8C=EB=9D=BC=EC=9A=B0=EC=A0=80=20=EC=8B=9C?= =?UTF-8?q?=EC=97=B0=EA=B3=BC=20=EC=9E=AC=EC=8B=9C=EB=8F=84=20=EC=9B=90?= =?UTF-8?q?=EC=9E=A5=20=ED=99=95=EC=A0=95=20(#557)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 39 +- docs/design/local-demo-lifecycle.md | 6 +- .../demo-fresh-20261018/README.md | 132 ++++ .../demo-gradle-process-01.log | 31 + .../demo-gradle-process-02.log | 31 + .../demo-runtime-contract-03.log | 99 +++ .../demo-runtime-contract-04.log | 97 +++ .../demo-runtime-contract-05.log | 89 +++ .../demo-runtime-contract-06.log | 90 +++ .../demo-fresh-20261018/probe_gradle_group.py | 16 + .../probe_gradle_registered.py | 21 + .../runs/39103254726-1/cold-start.log | 7 + .../runs/39103254726-1/concurrent-start.log | 10 + .../runs/39103254726-1/summary.json | 32 + .../runs/39104137120-1/cold-start.log | 7 + .../runs/39104137120-1/concurrent-start.log | 10 + .../backend.log | 208 ++++++ .../events.jsonl | 1 + .../frontend.log | 10 + .../install.log | 17 + .../services.log | 599 +++++++++++++++++ .../runs/39104137120-1/summary.json | 32 + .../runs/39104533807-1/always-cleanup.log | 10 + .../runs/39104533807-1/browser.log | 10 + .../runs/39104533807-1/browser/summary.json | 1 + .../runs/39104533807-1/cold-start.log | 11 + .../runs/39104533807-1/concurrent-start.log | 10 + .../39104533807-1/first-result/events.jsonl | 58 ++ .../39104533807-1/first-result/summary.json | 86 +++ .../39104533807-1/replay-result/events.jsonl | 49 ++ .../39104533807-1/replay-result/summary.json | 86 +++ .../backend.log | 290 +++++++++ .../events.jsonl | 5 + .../frontend.log | 209 ++++++ .../install.log | 17 + .../services.log | 607 ++++++++++++++++++ ...erify-9a71bc5be2594dfba7dc3ffd99833f81.log | 49 ++ ...erify-a54e5866f909483fb8c9fbf6a08fa754.log | 58 ++ .../runs/39104533807-1/summary.json | 117 ++++ .../runs/39104533807-1/verify-first.log | 10 + .../runs/39104533807-1/verify-replay.log | 10 + .../runs/39105008958-1/always-cleanup.log | 10 + .../runs/39105008958-1/browser.log | 10 + .../runs/39105008958-1/browser/failure.png | Bin 0 -> 281292 bytes .../runs/39105008958-1/browser/summary.json | 9 + .../runs/39105008958-1/cold-start.log | 11 + .../runs/39105008958-1/concurrent-start.log | 10 + .../39105008958-1/first-result/events.jsonl | 56 ++ .../39105008958-1/first-result/summary.json | 86 +++ .../39105008958-1/replay-result/events.jsonl | 49 ++ .../39105008958-1/replay-result/summary.json | 86 +++ .../backend.log | 289 +++++++++ .../events.jsonl | 5 + .../frontend.log | 214 ++++++ .../install.log | 17 + .../services.log | 595 +++++++++++++++++ ...erify-0b06ffdd53a143428056bc1468713ab9.log | 56 ++ ...erify-fd93b3d25ddc4936bf237fe2d4fa6e42.log | 49 ++ .../runs/39105008958-1/summary.json | 117 ++++ .../runs/39105008958-1/verify-first.log | 10 + .../runs/39105008958-1/verify-replay.log | 10 + .../runs/39105569049-1/always-cleanup.log | 10 + .../runs/39105569049-1/browser.log | 10 + .../runs/39105569049-1/browser/search.png | Bin 0 -> 162566 bytes .../runs/39105569049-1/browser/ssr-auth.json | 7 + .../runs/39105569049-1/browser/summary.json | 11 + .../runs/39105569049-1/cold-start.log | 11 + .../runs/39105569049-1/concurrent-start.log | 10 + .../39105569049-1/first-result/events.jsonl | 56 ++ .../39105569049-1/first-result/summary.json | 86 +++ .../runs/39105569049-1/interrupted-start.log | 13 + .../runs/39105569049-1/missing-provider.log | 13 + .../runs/39105569049-1/ready-status.log | 14 + .../39105569049-1/replay-result/events.jsonl | 49 ++ .../39105569049-1/replay-result/summary.json | 86 +++ .../runs/39105569049-1/reuse-start.log | 10 + .../backend.log | 143 +++++ .../events.jsonl | 5 + .../frontend.log | 65 ++ .../services.log | 14 + ...erify-9bb4bd37d577445d9fa5344f8a9476fa.log | 49 ++ .../backend.log | 293 +++++++++ .../events.jsonl | 7 + .../frontend.log | 198 ++++++ .../install.log | 17 + .../services.log | 598 +++++++++++++++++ ...erify-0775c0c6ef524d8fb95fca711451f360.log | 49 ++ ...erify-bd3f7021beb74a68aa22b623ef67065e.log | 56 ++ .../events.jsonl | 3 + .../services.log | 8 + .../backend.log | 1 + .../events.jsonl | 3 + .../services.log | 14 + .../runs/39105569049-1/stop-final.log | 10 + .../runs/39105569049-1/stop-first.log | 10 + .../runs/39105569049-1/stop-replay.log | 10 + .../runs/39105569049-1/summary.json | 248 +++++++ .../runs/39105569049-1/verify-first.log | 10 + .../runs/39105569049-1/verify-replay.log | 10 + .../runs/39105569049-1/verify-warm.log | 10 + .../39105569049-1/warm-result/events.jsonl | 49 ++ .../39105569049-1/warm-result/summary.json | 86 +++ .../runs/39105569049-1/warm-start.log | 11 + .../workflow-preparation-01.json | 9 + 104 files changed, 7312 insertions(+), 26 deletions(-) create mode 100644 docs/test-results/demo-fresh-20261018/README.md create mode 100644 docs/test-results/demo-fresh-20261018/demo-gradle-process-01.log create mode 100644 docs/test-results/demo-fresh-20261018/demo-gradle-process-02.log create mode 100644 docs/test-results/demo-fresh-20261018/demo-runtime-contract-03.log create mode 100644 docs/test-results/demo-fresh-20261018/demo-runtime-contract-04.log create mode 100644 docs/test-results/demo-fresh-20261018/demo-runtime-contract-05.log create mode 100644 docs/test-results/demo-fresh-20261018/demo-runtime-contract-06.log create mode 100644 docs/test-results/demo-fresh-20261018/probe_gradle_group.py create mode 100644 docs/test-results/demo-fresh-20261018/probe_gradle_registered.py create mode 100644 docs/test-results/demo-fresh-20261018/runs/39103254726-1/cold-start.log create mode 100644 docs/test-results/demo-fresh-20261018/runs/39103254726-1/concurrent-start.log create mode 100644 docs/test-results/demo-fresh-20261018/runs/39103254726-1/summary.json create mode 100644 docs/test-results/demo-fresh-20261018/runs/39104137120-1/cold-start.log create mode 100644 docs/test-results/demo-fresh-20261018/runs/39104137120-1/concurrent-start.log create mode 100644 docs/test-results/demo-fresh-20261018/runs/39104137120-1/runtime/73ca94307e5f46518da77b6017cb991f/backend.log create mode 100644 docs/test-results/demo-fresh-20261018/runs/39104137120-1/runtime/73ca94307e5f46518da77b6017cb991f/events.jsonl create mode 100644 docs/test-results/demo-fresh-20261018/runs/39104137120-1/runtime/73ca94307e5f46518da77b6017cb991f/frontend.log create mode 100644 docs/test-results/demo-fresh-20261018/runs/39104137120-1/runtime/73ca94307e5f46518da77b6017cb991f/install.log create mode 100644 docs/test-results/demo-fresh-20261018/runs/39104137120-1/runtime/73ca94307e5f46518da77b6017cb991f/services.log create mode 100644 docs/test-results/demo-fresh-20261018/runs/39104137120-1/summary.json create mode 100644 docs/test-results/demo-fresh-20261018/runs/39104533807-1/always-cleanup.log create mode 100644 docs/test-results/demo-fresh-20261018/runs/39104533807-1/browser.log create mode 100644 docs/test-results/demo-fresh-20261018/runs/39104533807-1/browser/summary.json create mode 100644 docs/test-results/demo-fresh-20261018/runs/39104533807-1/cold-start.log create mode 100644 docs/test-results/demo-fresh-20261018/runs/39104533807-1/concurrent-start.log create mode 100644 docs/test-results/demo-fresh-20261018/runs/39104533807-1/first-result/events.jsonl create mode 100644 docs/test-results/demo-fresh-20261018/runs/39104533807-1/first-result/summary.json create mode 100644 docs/test-results/demo-fresh-20261018/runs/39104533807-1/replay-result/events.jsonl create mode 100644 docs/test-results/demo-fresh-20261018/runs/39104533807-1/replay-result/summary.json create mode 100644 docs/test-results/demo-fresh-20261018/runs/39104533807-1/runtime/a7dc894111e946d9aac3f16b6080ce7f/backend.log create mode 100644 docs/test-results/demo-fresh-20261018/runs/39104533807-1/runtime/a7dc894111e946d9aac3f16b6080ce7f/events.jsonl create mode 100644 docs/test-results/demo-fresh-20261018/runs/39104533807-1/runtime/a7dc894111e946d9aac3f16b6080ce7f/frontend.log create mode 100644 docs/test-results/demo-fresh-20261018/runs/39104533807-1/runtime/a7dc894111e946d9aac3f16b6080ce7f/install.log create mode 100644 docs/test-results/demo-fresh-20261018/runs/39104533807-1/runtime/a7dc894111e946d9aac3f16b6080ce7f/services.log create mode 100644 docs/test-results/demo-fresh-20261018/runs/39104533807-1/runtime/a7dc894111e946d9aac3f16b6080ce7f/verify-9a71bc5be2594dfba7dc3ffd99833f81.log create mode 100644 docs/test-results/demo-fresh-20261018/runs/39104533807-1/runtime/a7dc894111e946d9aac3f16b6080ce7f/verify-a54e5866f909483fb8c9fbf6a08fa754.log create mode 100644 docs/test-results/demo-fresh-20261018/runs/39104533807-1/summary.json create mode 100644 docs/test-results/demo-fresh-20261018/runs/39104533807-1/verify-first.log create mode 100644 docs/test-results/demo-fresh-20261018/runs/39104533807-1/verify-replay.log create mode 100644 docs/test-results/demo-fresh-20261018/runs/39105008958-1/always-cleanup.log create mode 100644 docs/test-results/demo-fresh-20261018/runs/39105008958-1/browser.log create mode 100644 docs/test-results/demo-fresh-20261018/runs/39105008958-1/browser/failure.png create mode 100644 docs/test-results/demo-fresh-20261018/runs/39105008958-1/browser/summary.json create mode 100644 docs/test-results/demo-fresh-20261018/runs/39105008958-1/cold-start.log create mode 100644 docs/test-results/demo-fresh-20261018/runs/39105008958-1/concurrent-start.log create mode 100644 docs/test-results/demo-fresh-20261018/runs/39105008958-1/first-result/events.jsonl create mode 100644 docs/test-results/demo-fresh-20261018/runs/39105008958-1/first-result/summary.json create mode 100644 docs/test-results/demo-fresh-20261018/runs/39105008958-1/replay-result/events.jsonl create mode 100644 docs/test-results/demo-fresh-20261018/runs/39105008958-1/replay-result/summary.json create mode 100644 docs/test-results/demo-fresh-20261018/runs/39105008958-1/runtime/0b33fe3a31414ff28fc8f089dbf5c65c/backend.log create mode 100644 docs/test-results/demo-fresh-20261018/runs/39105008958-1/runtime/0b33fe3a31414ff28fc8f089dbf5c65c/events.jsonl create mode 100644 docs/test-results/demo-fresh-20261018/runs/39105008958-1/runtime/0b33fe3a31414ff28fc8f089dbf5c65c/frontend.log create mode 100644 docs/test-results/demo-fresh-20261018/runs/39105008958-1/runtime/0b33fe3a31414ff28fc8f089dbf5c65c/install.log create mode 100644 docs/test-results/demo-fresh-20261018/runs/39105008958-1/runtime/0b33fe3a31414ff28fc8f089dbf5c65c/services.log create mode 100644 docs/test-results/demo-fresh-20261018/runs/39105008958-1/runtime/0b33fe3a31414ff28fc8f089dbf5c65c/verify-0b06ffdd53a143428056bc1468713ab9.log create mode 100644 docs/test-results/demo-fresh-20261018/runs/39105008958-1/runtime/0b33fe3a31414ff28fc8f089dbf5c65c/verify-fd93b3d25ddc4936bf237fe2d4fa6e42.log create mode 100644 docs/test-results/demo-fresh-20261018/runs/39105008958-1/summary.json create mode 100644 docs/test-results/demo-fresh-20261018/runs/39105008958-1/verify-first.log create mode 100644 docs/test-results/demo-fresh-20261018/runs/39105008958-1/verify-replay.log create mode 100644 docs/test-results/demo-fresh-20261018/runs/39105569049-1/always-cleanup.log create mode 100644 docs/test-results/demo-fresh-20261018/runs/39105569049-1/browser.log create mode 100644 docs/test-results/demo-fresh-20261018/runs/39105569049-1/browser/search.png create mode 100644 docs/test-results/demo-fresh-20261018/runs/39105569049-1/browser/ssr-auth.json create mode 100644 docs/test-results/demo-fresh-20261018/runs/39105569049-1/browser/summary.json create mode 100644 docs/test-results/demo-fresh-20261018/runs/39105569049-1/cold-start.log create mode 100644 docs/test-results/demo-fresh-20261018/runs/39105569049-1/concurrent-start.log create mode 100644 docs/test-results/demo-fresh-20261018/runs/39105569049-1/first-result/events.jsonl create mode 100644 docs/test-results/demo-fresh-20261018/runs/39105569049-1/first-result/summary.json create mode 100644 docs/test-results/demo-fresh-20261018/runs/39105569049-1/interrupted-start.log create mode 100644 docs/test-results/demo-fresh-20261018/runs/39105569049-1/missing-provider.log create mode 100644 docs/test-results/demo-fresh-20261018/runs/39105569049-1/ready-status.log create mode 100644 docs/test-results/demo-fresh-20261018/runs/39105569049-1/replay-result/events.jsonl create mode 100644 docs/test-results/demo-fresh-20261018/runs/39105569049-1/replay-result/summary.json create mode 100644 docs/test-results/demo-fresh-20261018/runs/39105569049-1/reuse-start.log create mode 100644 docs/test-results/demo-fresh-20261018/runs/39105569049-1/runtime/0806f0385fd940dc8968a8446fafb9c2/backend.log create mode 100644 docs/test-results/demo-fresh-20261018/runs/39105569049-1/runtime/0806f0385fd940dc8968a8446fafb9c2/events.jsonl create mode 100644 docs/test-results/demo-fresh-20261018/runs/39105569049-1/runtime/0806f0385fd940dc8968a8446fafb9c2/frontend.log create mode 100644 docs/test-results/demo-fresh-20261018/runs/39105569049-1/runtime/0806f0385fd940dc8968a8446fafb9c2/services.log create mode 100644 docs/test-results/demo-fresh-20261018/runs/39105569049-1/runtime/0806f0385fd940dc8968a8446fafb9c2/verify-9bb4bd37d577445d9fa5344f8a9476fa.log create mode 100644 docs/test-results/demo-fresh-20261018/runs/39105569049-1/runtime/1bd07e5ccd714d77a817b67f1d272a0f/backend.log create mode 100644 docs/test-results/demo-fresh-20261018/runs/39105569049-1/runtime/1bd07e5ccd714d77a817b67f1d272a0f/events.jsonl create mode 100644 docs/test-results/demo-fresh-20261018/runs/39105569049-1/runtime/1bd07e5ccd714d77a817b67f1d272a0f/frontend.log create mode 100644 docs/test-results/demo-fresh-20261018/runs/39105569049-1/runtime/1bd07e5ccd714d77a817b67f1d272a0f/install.log create mode 100644 docs/test-results/demo-fresh-20261018/runs/39105569049-1/runtime/1bd07e5ccd714d77a817b67f1d272a0f/services.log create mode 100644 docs/test-results/demo-fresh-20261018/runs/39105569049-1/runtime/1bd07e5ccd714d77a817b67f1d272a0f/verify-0775c0c6ef524d8fb95fca711451f360.log create mode 100644 docs/test-results/demo-fresh-20261018/runs/39105569049-1/runtime/1bd07e5ccd714d77a817b67f1d272a0f/verify-bd3f7021beb74a68aa22b623ef67065e.log create mode 100644 docs/test-results/demo-fresh-20261018/runs/39105569049-1/runtime/2cac5af2e629447fb41c291abe0e8feb/events.jsonl create mode 100644 docs/test-results/demo-fresh-20261018/runs/39105569049-1/runtime/2cac5af2e629447fb41c291abe0e8feb/services.log create mode 100644 docs/test-results/demo-fresh-20261018/runs/39105569049-1/runtime/ea791ff132274affb11ed6d134b127ba/backend.log create mode 100644 docs/test-results/demo-fresh-20261018/runs/39105569049-1/runtime/ea791ff132274affb11ed6d134b127ba/events.jsonl create mode 100644 docs/test-results/demo-fresh-20261018/runs/39105569049-1/runtime/ea791ff132274affb11ed6d134b127ba/services.log create mode 100644 docs/test-results/demo-fresh-20261018/runs/39105569049-1/stop-final.log create mode 100644 docs/test-results/demo-fresh-20261018/runs/39105569049-1/stop-first.log create mode 100644 docs/test-results/demo-fresh-20261018/runs/39105569049-1/stop-replay.log create mode 100644 docs/test-results/demo-fresh-20261018/runs/39105569049-1/summary.json create mode 100644 docs/test-results/demo-fresh-20261018/runs/39105569049-1/verify-first.log create mode 100644 docs/test-results/demo-fresh-20261018/runs/39105569049-1/verify-replay.log create mode 100644 docs/test-results/demo-fresh-20261018/runs/39105569049-1/verify-warm.log create mode 100644 docs/test-results/demo-fresh-20261018/runs/39105569049-1/warm-result/events.jsonl create mode 100644 docs/test-results/demo-fresh-20261018/runs/39105569049-1/warm-result/summary.json create mode 100644 docs/test-results/demo-fresh-20261018/runs/39105569049-1/warm-start.log create mode 100644 docs/test-results/demo-fresh-20261018/workflow-preparation-01.json diff --git a/README.md b/README.md index 7403f7c6..5f2a5605 100644 --- a/README.md +++ b/README.md @@ -336,31 +336,20 @@ python3 scripts/demo/seed_demo_corpus.py 실패 종료합니다. 실제 생성 답변·인용까지 검사하려면 `--scope rag`를 지정합니다. 실행별 원장은 `.demo/reports/<run-id>/`에 저장하며, 자세한 판정은 [예제 검증 안내](examples/demo-corpus/README.md)를 참고하세요. -아래는 판정 개선 전인 2026-10-16 새 DB에서 실행한 당시 출력입니다(MacBook Pro M5, BGE-M3 준비 완료, -Ollama 미실행). 현재 출력 형식과 다르며, `…`는 생략한 부분입니다. - -```text -[계정] demo@docgrid.local 회원가입 완료 -[계정] demo@docgrid.local 로그인 완료 -[업로드] 1/15 01-remote-work-policy.pdf → 문서 3 -… -[업로드] 15/15 15-club-support.hwpx → 문서 17 -[인덱싱] INDEXED 0/15 · 처리 중 0 · 대기 15 · 실패 0 (0.1초) -… -[인덱싱] INDEXED 15/15 · 처리 중 0 · 대기 0 · 실패 0 (22.4초) - -== 요약 == -업로드: 15/15건 성공 (실패 0건, 이미 INDEXED였던 기존 문서 0건) -INDEXED: 15건 · 인덱싱 실패: 0건 · 시간 안에 끝나지 않음: 0건 -소요 시간: 업로드 1.2초 · 전체 23.6초 - -== 예시 검색 == -질문: 재택근무는 일주일에 며칠까지 할 수 있고 언제까지 신청해야 하나요? - 1. 재택근무 운영 규정 (유사도 74.8%) 재택근무 운영 규정 데모랩 주식회사(가상 회사) 시연용 예제 문서 · 시행일 2026년 1월 1일 제1조(목적) 이 규정은 데… - 2. 유연근무제 운영 지침 (유사도 62.6%) 유연근무제 운영 지침 데모랩 주식회사(가상 회사) 시연용 예제 문서 · 시행일 2026년 1월 1일 1. 시차출퇴근제 출근 시… - 3. 연차휴가 사용 지침 (유사도 52.4%) 연차휴가 사용 지침 데모랩 주식회사(가상 회사) 시연용 예제 문서 · 시행일 2026년 1월 1일 1. 연차 발생 연차휴가는 … -[RAG] LLM 답변 생성 실패 → 대체 답변 표시(2.0초 대기): AI 답변 생성이 지연되고 있습니다. 가장 관련도 높은 문서에서 다음 내용을 찾았습니다: "재택근무 운영 규정 … 제3조(재택근무 횟수) 1. 재택근무는 주 2일까지 허용한다. … -``` +2026-10-18 독립 GitHub hosted 환경의 실제 PostgreSQL·Valkey·BGE-M3·백엔드·프런트엔드 회차에서 +업로드·INDEXED **15/15**, 기대 검색 **3/3**, 다운로드 해시 **15/15**가 통과했습니다. 같은 계정 재실행과 +종료 후 재기동에서도 문서 ID **15/15**가 유지됐으며, Chromium 로그인·검색·다운로드도 통과했습니다. + +| 같은 실행기의 명령 | 관측 소요 시간 | +| --- | --- | +| 첫 start: 의존성·이미지·모델 준비 포함 | 196.632초 | +| 첫 verify | 24.135초 | +| 같은 계정 verify 재실행 | 3.072초 | +| 데이터·모델 캐시를 보존한 start | 26.061초 | + +이 수치는 해당 실행기의 개발 시연 기동·검증 시간이며 운영 복구 시간이나 성능 우위를 뜻하지 않습니다. +실제 Ollama 생성 답변은 실행하지 않았습니다. 준비 오류·중단·브라우저 진단 회차와 최종 통과 근거는 +[독립 환경 검증 기록](docs/test-results/demo-fresh-20261018/README.md)에 분리해 두었습니다. `--scope rag`에서 Ollama와 `qwen2.5:7b`가 준비되어 있으면 실제 답변·인용 검사 결과를 확인할 수 있습니다. 같은 계정이나 새로 가입한 계정으로 웹(`http://localhost:3000`)에 로그인해 다음 질문을 검색해 봅니다. diff --git a/docs/design/local-demo-lifecycle.md b/docs/design/local-demo-lifecycle.md index b1370fdf..0f33fae9 100644 --- a/docs/design/local-demo-lifecycle.md +++ b/docs/design/local-demo-lifecycle.md @@ -49,7 +49,8 @@ Ollama가 없으면 생성 답변은 실패 대체 경로를 사용한다. searc ```text stop 또는 start 도중 취소 → PID + 시작 시각 + 명령 fingerprint + 프로세스 그룹 대조 - → 소유 그룹 TERM → 확인된 잔존 자식만 필요시 KILL + → 부모 계보로 등록한 분리 자식 JVM의 현재 식별정보 재조회 + → 등록된 자식 PID와 소유 그룹 TERM → 확인된 잔존 자식만 필요시 KILL → 저장된 Docker endpoint·Engine·컨테이너 ID·Compose 작업공간 대조 → 이번 실행이 시작한 서비스만 stop → API·관리·Web 포트 해제 확인 @@ -62,6 +63,9 @@ DB 볼륨·원본·모델 캐시·이전 실행 기록 → 보존 ``` 자식 supervisor가 먼저 PID 파일을 기록해 부모 상태 저장 중단에도 회수할 수 있게 한다. +Gradle의 단발성 Daemon은 별도 프로세스 그룹을 만들 수 있다. 따라서 supervisor는 살아 있는 부모 계보에서 +확인한 자식의 PID·시작 시각·명령 fingerprint를 주기적으로 기록한다. 실제 listener가 이 기록과 일치하는지도 +확인하며, 분리된 그룹 전체를 임의로 소유한다고 간주하지 않는다. 종료 직전에도 계보를 재조회한다. 기동 중 중단된 세션은 컨테이너 전후 상태도 다시 대조한다. 같은 PID만으로 종료하지 않는다. READY 기록이 있어도 status는 실제 준비 상태를 다시 검사하며, 검증 실패 후에는 서버를 남겨 원인을 확인할 수 있다. diff --git a/docs/test-results/demo-fresh-20261018/README.md b/docs/test-results/demo-fresh-20261018/README.md new file mode 100644 index 00000000..9fc18adf --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/README.md @@ -0,0 +1,132 @@ +# 독립 환경 로컬 시연 재현 + +## 목적 + +새 사용자가 통합 명령으로 시작·검증·종료를 재현할 수 있는지 실제 서비스에서 확인한다. +시연 성공 판정과 종료 소유권을 함께 확인하며, 로컬 PostgreSQL 결과를 OpenSQL HA 검증으로 확대하지 않는다. + +## 테스트 환경 + +- GitHub hosted Ubuntu 24.04 임시 실행기, Java 17·Node 22·Python 3. +- PostgreSQL 17·pgvector 0.8.1, Valkey, 실제 BAAI/bge-m3 CPU 모델, Gradle 백엔드, 프런트엔드, Chromium. +- Embedding 컨테이너 CPU 상한 2.0, 기본 메모리 상한 4 GiB. 이는 호스트 전체 사양이나 처리량 벤치마크 수치가 아니다. +- 예제 15건: PDF 5·DOCX 5·HWPX 5. 기대 검색 질문 3개. 실제 Ollama는 기동하지 않는다. +- 개인 컴퓨터의 기존 Docker 자원이나 GCP 공개 서비스는 사용하지 않는다. +- 별도 macOS 점검은 실제 Gradle 도움말·제어 프로세스 계약 검사다. macOS 전체 서비스 E2E와 구분한다. + +## 테스트 방법 + +```bash +python3 scripts/demo/reproduce_fresh.py +``` + +이 harness는 GitHub hosted 실행기에서만 실행한다. 일반 사용자는 README의 `scripts/demo.py`를 사용한다. + +```text +그림 1 — 실제 서비스와 검증 경로 + +빈 컨테이너·볼륨 확인 → start + ├─ PostgreSQL·Valkey·BGE-M3 준비 + ├─ Gradle 백엔드 → 실제 readiness·listener 확인 + └─ 프런트엔드 → API 프록시 대조 + │ +verify → 프런트엔드 프록시 ─┴→ 가입·업로드·인덱싱·검색·원본 다운로드 + └─ 같은 계정 재실행 → 이전 원장과 문서 ID 비교 +Chromium → 로그인 UI → 질문 전송 → 근거 문서 → 다운로드 해시 +``` + +검증기는 실제 HTTP 프록시와 모델을 사용한다. search 범위의 생성 답변은 미실행이며, 제어 모델로 대신 성공시키지 않는다. + +```text +그림 2 — 분리 JVM의 소유권 점검 + +통합 명령 → supervisor 전용 그룹 → Gradle launcher + └─ 단발성 JVM: 별도 그룹 가능 + └─ Spring Boot JVM·실제 API 포트 + +관측된 부모 계보 → PID·시작 시각·명령 fingerprint 등록 +준비 판정 → 실제 listener가 소유 그룹 또는 등록된 PID인가? +종료 → 계보 재조회 → 일치하는 자식 PID만 종료 → 그룹·포트 해제 확인 +``` + +그룹 ID 하나에 의존하던 가정은 실제 Gradle 점검에서 성립하지 않았다. 확인된 계보와 개별 식별정보를 사용하도록 보완했다. + +## 관측 결과 + +전체 회차 [39105569049](https://github.com/DocGrid/docgrid/actions/runs/39105569049)가 통과했다. +실행 소스 head는 `dbf782c`, 실행기가 체크아웃한 PR 병합 미리보기는 `a62175ee3e4621c6411feb3af5f4ed3663802b6c`다. +정상 브라우저 컨텍스트 1개와 JavaScript 비활성 SSR 경계 컨텍스트 1개를 사용했다. + +| 목적 | 명령·방법 | 실제 결과 | 근거 | +| --- | --- | --- | --- | +| 최초 기동 | `scripts/demo.py start --timeout 1200` | 196.632초, 코드 0 | [로그](runs/39105569049-1/cold-start.log) | +| 첫 시연 | `scripts/demo.py verify --timeout 900` | 24.135초, 업로드·INDEXED 15/15, 검색 3/3, 해시 15/15 | [원장](runs/39105569049-1/first-result/summary.json) | +| 같은 계정 재실행 | 같은 verify | 3.072초, 문서 ID 15/15 일치, 필수 단계 통과 | [원장](runs/39105569049-1/replay-result/summary.json) | +| SSR 인증 경계 | 실제 Chromium, JavaScript 비활성 | POST fallback·초기 제출 비활성 모두 확인 | [별도 판정](runs/39105569049-1/browser/ssr-auth.json) | +| 사용자 경로 | 실제 Chromium 로그인→질문→문서→다운로드 | 3.782초, 세 기능 통과, 원본 52,683 bytes SHA-256 일치 | [판정](runs/39105569049-1/browser/summary.json), [화면](runs/39105569049-1/browser/search.png) | +| 실제 준비·중복 기동 | status·활성 세션 start | 모두 코드 0, 기존 세션 재사용 | [상태](runs/39105569049-1/ready-status.log), [재사용](runs/39105569049-1/reuse-start.log) | +| 중복 start | 첫 기동 중 두 번째 start | 코드 1, 기대한 거부 | [로그](runs/39105569049-1/concurrent-start.log) | +| 준비 부족 | 닫힌 임베딩 주소로 start | 코드 1, 정리 뒤 포트·컨테이너 중지 확인 | [로그](runs/39105569049-1/missing-provider.log) | +| 기동 도중 중단 | backend 프로세스 등록 직후 부모에 SIGTERM | 코드 130, 정리 확인 | [로그](runs/39105569049-1/interrupted-start.log) | +| 캐시 재기동 | stop 뒤 start | 26.061초, 코드 0 | [로그](runs/39105569049-1/warm-start.log) | +| 데이터 보존 | 재기동 뒤 verify | 3.626초, 필수 단계·문서 ID 15/15 통과 | [원장](runs/39105569049-1/warm-result/summary.json) | +| 종료·환경 보존 | stop·재실행·최종 상태 조회 | 소유 컨테이너 3개 중지, 포트 6개 해제, 환경 파일 2개 bytes·mtime 유지 | [전체 원장](runs/39105569049-1/summary.json) | + +전체 원장 판정은 24/24 PASS다. 이는 서로 독립인 장애 시험 24회라는 뜻이 아니라, 한 실행기의 여러 명령·관측 항목이다. +준비 부족 코드 1과 취소 코드 130은 각각 기대값과 일치해 시험 판정이 PASS이며, 제품 명령 자체가 성공 코드 0을 반환했다는 뜻은 아니다. +시간은 이 실행기의 명령 wall time이다. 모델 다운로드 단독 시간·운영 RTO·서로 다른 환경의 성능 우위로 해석하지 않는다. +생성 답변·인용 단계는 모든 search 원장에서 NOT_RUN이다. + +```text +그림 3 — 이번 회차의 상태와 보존 확인 + +빈 컨테이너·볼륨 → 첫 start 196.632초 → READY + → 첫 verify: INDEXED 15 / 기대 검색 3 / 해시 15 통과 + → 같은 계정 verify: 기존 문서 ID 15개 유지 + → Chromium: 로그인·검색·원본 해시 확인 + → stop: 컨테이너 3개 중지·포트 6개 해제 + → 준비 부족 start: 코드 1 → 정리 확인 + → 중단 start: 코드 130 → 정리 확인 + → 캐시 start 26.061초 → verify: 문서 ID·해시 유지 + → 최종 stop → 환경 파일 2개 bytes·mtime 유지 +``` + +아래는 준비·진단 회차이며, 최종 통과 회차와 합쳐 성공으로 계산하지 않는다. + +| 실행 ID | 목적·장소 | 실제 관측 | 판정 | +| --- | --- | --- | --- | +| 39103167964 | GitHub workflow 준비 | job 시작 전 설정 오류, 서비스 시험 0회 | 미실행 | +| [39103254726-1](runs/39103254726-1/summary.json) | 첫 독립 환경 회차 | 컨테이너 0·볼륨 0·환경 파일 0, 기존 이미지 6개. 동시 start는 기대한 코드 1로 거부 | 수동 중단, 전체 E2E 미완료 | +| [39104137120-1](runs/39104137120-1/summary.json) | Gradle 보완 뒤 실제 기동 | PostgreSQL·Valkey·BGE-M3 준비와 백엔드·프런트엔드 기동 로그 보존. 프런트엔드 준비 판정 대기 | 주소 바인딩 검토를 위해 수동 중단 | +| [39104533807-1](runs/39104533807-1/summary.json) | IPv4 명시 뒤 실제 모델·브라우저 회차 | 기동 265.870초, 첫 verify 35.680초, 재실행 3.527초. 인덱싱 15/15·검색 3/3·해시 15/15·문서 ID 15/15. Chromium 로그인 단계 timeout | 기능 API 검사 통과, 전체 회차 미완료 | +| [39105008958-1](runs/39105008958-1/summary.json) | 브라우저 세부 진단 | 기동 203.438초·verify 29.690초·재실행 2.475초. 로그인 버튼 클릭 뒤 기본 GET 경로로 이동해 search 이동을 45초 동안 확인하지 못함 | API 단계 통과, 브라우저 불통과 | +| [demo-gradle-process-01](demo-gradle-process-01.log) | macOS 실제 Gradle | 도움말 빌드 코드 0, 직접 자식 JVM의 그룹이 분리됨 | 기존 그룹 가정 검사 불통과 | +| [demo-gradle-process-02](demo-gradle-process-02.log) | macOS 실제 Gradle | 도움말 빌드 코드 0, 분리 자식 1개 등록 | 보완 동작 통과 | +| [demo-runtime-contract-03](demo-runtime-contract-03.log) | macOS 제어 프로세스 회귀 | 75개 중 74개 통과·1개 오류 | 부모 자연 종료 경합 확인 | +| [demo-runtime-contract-04](demo-runtime-contract-04.log) | 같은 회귀 재실행 | 75개 중 74개 통과·1개 불통과 | 종료 시점의 오래된 그룹 snapshot 확인 | +| [demo-runtime-contract-05](demo-runtime-contract-05.log) | 종료 직전 계보 재조회 반영 | 75/75, 7.293초 | 통과 | +| [demo-runtime-contract-06](demo-runtime-contract-06.log) | 미등록 쿼리 비밀값 마스킹 회귀 | 76/76, 9.168초 | 통과 | + +## 검증 과정에서 확인된 사항 + +- job 수준 env에는 runner 컨텍스트를 사용할 수 없다. step env로 이동 후 실제 job 시작을 확인했다. + [GitHub 컨텍스트 범위](https://docs.github.com/en/actions/reference/workflows-and-actions/contexts#context-availability). +- 첫 실제 회차는 별도 Gradle 점검의 발견에 따라 중단했다. 성공한 E2E로 계산하지 않는다. + 취소 전 요약·동시 기동 로그는 보존됐지만 구성요소 전체 로그와 최종 정리 원장은 수집되지 않았다. + 이후 실행은 이미 정제된 구성요소 로그를 2초 주기로 artifact 경로에도 복사해 취소 시 손실을 줄인다. +- 분리 자식을 종료하면 부모도 곧바로 종료될 수 있다. 이전 snapshot에만 의존하지 않고 현재 계보와 그룹 해제를 확인한다. +- 프런트엔드 기본 localhost 바인딩은 IPv4 검증 주소와 다를 수 있어 `--hostname 127.0.0.1`을 명시했다. + 원래 회차의 실제 소켓 주소는 수집하지 않았으므로 IPv6가 유일한 원인이었다고 단정하지 않는다. +- 첫 완료된 API 검사 회차는 브라우저 로그인 단계에서 48.381초 뒤 timeout으로 끝났다. 로그인 세부 동작이 + 나뉘지 않은 기존 진단으로는 원인을 확정하지 못했다. 이후 입력값·토큰을 제거한 오류와 마스킹 화면을 수집한다. +- 세부 진단에서는 React onSubmit 연결 전 기본 GET 제출로 로그인 URL에 필드가 붙는 것을 확인했다. + AuthPage는 method=post를 명시하고, 클라이언트 준비 전에는 제출 버튼을 비활성화하도록 보완했다. + 실제 SSR HTML 회귀와 JavaScript 비활성 Chromium 화면에서 이 경계를 별도 검사한다. + 기존 수집 파일에서는 원문 비밀번호 쿼리 파일 0개를 확인했다. 진단 메시지의 비밀번호는 기록 전에 제거됐으며, + 이후 출력 주체가 비밀번호를 모르는 경우에도 password/token/email 쿼리를 일반 마스킹한다. +- npm ci는 종료 코드 0이었지만 기존 의존성 감사 경고 30건(low 1·moderate 6·high 23)을 출력했다. + 이번 변경에서 프런트엔드 package.json·lock 파일을 수정하지 않았다. 감사 경고 해소를 검증했다고 주장하지 않는다. +- 최초 기동 시간에는 npm·Gradle·이미지·모델 준비를 포함한다. 모델 다운로드 시간만 별도 측정했다고 표현하지 않는다. +- 같은 실행기의 캐시 재기동은 최초 실행과 구분한다. 컨테이너·볼륨이 이미 존재한 환경을 새 환경으로 세지 않는다. +- 계정 비밀번호·서명 키·인증 토큰·이메일은 기록 전에 제거한다. 브라우저 trace와 로그인 입력 화면은 저장하지 않는다. +- 실제 OpenSQL·OpenProxy HA, GCP, 실제 Ollama 답변·인용, Windows는 검증 범위 밖이다. diff --git a/docs/test-results/demo-fresh-20261018/demo-gradle-process-01.log b/docs/test-results/demo-fresh-20261018/demo-gradle-process-01.log new file mode 100644 index 00000000..8d8048e4 --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/demo-gradle-process-01.log @@ -0,0 +1,31 @@ +실행 ID: demo-gradle-process-01 +목적: 실제 Gradle 자식 JVM의 전용 프로세스 그룹 유지 확인 +환경: 로컬 Java 17·Gradle, DB·Docker 사용 없음 +합격 기준: Gradle 도움말 종료 0, 관측 자식이 같은 프로세스 그룹 +명령: python3 <로컬 검사 도구>/gradle_process_probe.py +시작 시각: 2026-10-18T15:22:03+09:00 +To honour the JVM settings for this build a single-use Daemon process will be forked. For more on this, please refer to <서버 주소 생략> in the Gradle documentation. +Daemon will be stopped at the end of the build + +> Task :help + +Welcome to Gradle 8.14.5. + +To run a build, run gradlew <task> ... + +To see a list of available tasks, run gradlew tasks + +To see more detail about a task, run gradlew help --task <task> + +To see a list of command-line options, run gradlew --help + +For more detail on using Gradle, see <서버 주소 생략> + +For troubleshooting, visit <서버 주소 생략> + +BUILD SUCCESSFUL in 2s +1 actionable task: 1 executed +{"gradleExitCode": 0, "directChildren": [{"role": "gradle-child", "sameGroup": false}]} +종료 시각: 2026-10-18T15:22:05+09:00 +종료 코드: 1 +소요 시간: 2.834초 diff --git a/docs/test-results/demo-fresh-20261018/demo-gradle-process-02.log b/docs/test-results/demo-fresh-20261018/demo-gradle-process-02.log new file mode 100644 index 00000000..8ad36126 --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/demo-gradle-process-02.log @@ -0,0 +1,31 @@ +실행 ID: demo-gradle-process-02 +목적: 실제 Gradle 분리 JVM을 부모 계보의 식별정보로 등록하는지 확인 +환경: 로컬 Java 17·Gradle, DB·Docker 사용 없음 +합격 기준: Gradle 도움말 종료 0, 분리 자식 JVM 1개 이상 등록 +명령: python3 <로컬 검사 도구>/gradle_registered_probe.py +시작 시각: 2026-10-18T15:26:20+09:00 +To honour the JVM settings for this build a single-use Daemon process will be forked. For more on this, please refer to <서버 주소 생략> in the Gradle documentation. +Daemon will be stopped at the end of the build + +> Task :help + +Welcome to Gradle 8.14.5. + +To run a build, run gradlew <task> ... + +To see a list of available tasks, run gradlew tasks + +To see more detail about a task, run gradlew help --task <task> + +To see a list of command-line options, run gradlew --help + +For more detail on using Gradle, see <서버 주소 생략> + +For troubleshooting, visit <서버 주소 생략> + +BUILD SUCCESSFUL in 1s +1 actionable task: 1 executed +{"gradleExitCode": 0, "registeredSeparateChildren": 1} +종료 시각: 2026-10-18T15:26:22+09:00 +종료 코드: 0 +소요 시간: 1.967초 diff --git a/docs/test-results/demo-fresh-20261018/demo-runtime-contract-03.log b/docs/test-results/demo-fresh-20261018/demo-runtime-contract-03.log new file mode 100644 index 00000000..963b5fb1 --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/demo-runtime-contract-03.log @@ -0,0 +1,99 @@ +실행 ID: demo-runtime-contract-03 +목적: 별도 그룹 자식 JVM 소유권과 안전한 종료 회귀 +환경: 로컬 Python 3.9.6 POSIX, 제어 HTTP 실제 프로세스, Docker 실제 기동 0회 +합격 기준: 전체 검사 통과, 분리 그룹 HTTP 자식 종료와 타 소유 기록 거부 +명령: python3 -m unittest discover -s scripts/demo -p test_*.py -v +시작 시각: 2026-10-18T15:24:52+09:00 +test_changed_configuration_refuses_before_database_or_upload (test_demo_runtime.RuntimeContractTest) ... ok +test_changed_identity_never_kills_live_process (test_demo_runtime.RuntimeContractTest) ... ok +test_child_record_from_another_owner_is_refused (test_demo_runtime.RuntimeContractTest) ... ok +test_child_record_recovers_parent_missing_process_map (test_demo_runtime.RuntimeContractTest) ... ok +test_concurrent_command_lock_refuses_second_process (test_demo_runtime.RuntimeContractTest) ... ok +test_container_transition_preserves_reused_and_marks_newly_started (test_demo_runtime.RuntimeContractTest) ... ok +test_detached_child_is_identified_and_stopped_by_registered_identity (test_demo_runtime.RuntimeContractTest) ... ERROR +test_existing_personal_environment_files_are_preserved (test_demo_runtime.RuntimeContractTest) ... ok +test_frontend_proxy_comparison_ignores_response_timestamp (test_demo_runtime.RuntimeContractTest) ... ok +test_new_env_is_initialized_without_default_jwt (test_demo_runtime.RuntimeContractTest) ... ok +test_partial_start_failure_runs_cleanup (test_demo_runtime.RuntimeContractTest) ... ok +test_session_symlink_cannot_redirect_state_writes (test_demo_runtime.RuntimeContractTest) ... ok +test_starting_component_records_actual_group_and_listener (test_demo_runtime.RuntimeContractTest) ... ok +test_status_does_not_report_dead_ready_session_as_success (test_demo_runtime.RuntimeContractTest) ... ok +test_stop_preserves_reused_containers (test_demo_runtime.RuntimeContractTest) ... ok +test_stop_releases_children_and_actual_server_port (test_demo_runtime.RuntimeContractTest) ... ok +test_supervisor_redacts_before_writing (test_demo_runtime.RuntimeContractTest) ... ok +test_verify_records_use_distinct_paths (test_demo_runtime.RuntimeContractTest) ... ok +test_changed_target_refuses_replay_before_upload (test_demo_verdict.DemoVerdictTest) ... ok +test_citation_outside_search_candidates_fails (test_demo_verdict.DemoVerdictTest) ... ok +test_different_previous_document_id_fails (test_demo_verdict.DemoVerdictTest) ... ok +test_download_hash_mismatch_fails (test_demo_verdict.DemoVerdictTest) ... ok +test_empty_search_results_fail (test_demo_verdict.DemoVerdictTest) ... ok +test_event_redaction_happens_before_storage (test_demo_verdict.DemoVerdictTest) ... ok +test_existing_report_is_never_overwritten (test_demo_verdict.DemoVerdictTest) ... ok +test_full_search_scope_passes_without_rag_polling (test_demo_verdict.DemoVerdictTest) ... ok +test_invalid_candidate_is_not_a_valid_search (test_demo_verdict.DemoVerdictTest) ... ok +test_missing_expected_document_fails (test_demo_verdict.DemoVerdictTest) ... ok +test_missing_query_id_is_not_a_valid_search (test_demo_verdict.DemoVerdictTest) ... ok +test_previous_document_ids_are_compared (test_demo_verdict.DemoVerdictTest) ... ok +test_rag_failed_is_not_success (test_demo_verdict.DemoVerdictTest) ... ok +test_rag_incomplete_is_not_success (test_demo_verdict.DemoVerdictTest) ... ok +test_rag_scope_requires_success_and_valid_citations (test_demo_verdict.DemoVerdictTest) ... ok +test_search_http_error_fails_after_all_documents_indexed (test_demo_verdict.DemoVerdictTest) ... ok +test_table_text_missing_fails (test_demo_verdict.DemoVerdictTest) ... ok +test_unrun_required_stages_cannot_pass (test_demo_verdict.DemoVerdictTest) ... ok +test_http_error_preserves_code_for_signup_decision (test_demo_verdict.HttpBoundaryTest) ... ok +test_oversized_original_is_rejected (test_demo_verdict.HttpBoundaryTest) ... ok +test_redirect_does_not_forward_credentials (test_demo_verdict.HttpBoundaryTest) ... ok +test_ambiguous_quotes_and_inline_comments_are_refused (test_local_config.LocalConfigTest) ... ok +test_container_from_another_checkout_is_refused (test_local_config.LocalConfigTest) ... ok +test_database_check_is_readonly_and_password_is_not_an_argument (test_local_config.LocalConfigTest) ... ok +test_defaults_match_local_quickstart (test_local_config.LocalConfigTest) ... ok +test_disabled_worker_is_refused (test_local_config.LocalConfigTest) ... ok +test_docker_context_takes_precedence_over_host (test_local_config.LocalConfigTest) ... ok +test_duplicate_key_is_refused (test_local_config.LocalConfigTest) ... ok +test_environment_overrides_file (test_local_config.LocalConfigTest) ... ok +test_foreign_container_is_refused_before_up (test_local_config.LocalConfigTest) ... ok +test_frontend_remote_or_different_api_is_refused (test_local_config.LocalConfigTest) ... ok +test_loopback_port_without_matching_container_is_refused (test_local_config.LocalConfigTest) ... ok +test_missing_host_port_is_not_ready_even_if_container_runs (test_local_config.LocalConfigTest) ... ok +test_multiline_secret_is_refused_before_logging (test_local_config.LocalConfigTest) ... ok +test_remote_database_and_model_are_refused (test_local_config.LocalConfigTest) ... ok +test_remote_docker_endpoint_is_refused (test_local_config.LocalConfigTest) ... ok +test_remote_profile_and_storage_are_refused (test_local_config.LocalConfigTest) ... ok +test_shell_substitution_is_refused_without_execution (test_local_config.LocalConfigTest) ... ok +test_spring_or_jvm_bypass_is_refused (test_local_config.LocalConfigTest) ... ok +test_storage_outside_checkout_is_refused (test_local_config.LocalConfigTest) ... ok +test_url_credentials_query_and_non_http_are_refused (test_local_config.LocalConfigTest) ... ok +test_wrong_extension_version_fails (test_local_config.LocalConfigTest) ... ok +test_explicit_rag_without_ready_ollama_does_not_start_compose (test_local_config.ServiceScopeTest) ... ok +test_legacy_status_still_requires_ollama (test_local_config.ServiceScopeTest) ... ok +test_search_start_never_calls_ollama (test_local_config.ServiceScopeTest) ... ok +test_claimed_or_retrying_job_is_processing (test_seed_demo_corpus.ClassifyTest) ... ok +test_failed_job (test_seed_demo_corpus.ClassifyTest) ... ok +test_indexed_document (test_seed_demo_corpus.ClassifyTest) ... ok +test_new_upload_waits_for_worker (test_seed_demo_corpus.ClassifyTest) ... ok +test_embedding_hint_first_when_server_not_ready (test_seed_demo_corpus.DiagnoseTest) ... ok +test_embedding_hint_for_failed_documents (test_seed_demo_corpus.DiagnoseTest) ... ok +test_no_hint_when_everything_indexed (test_seed_demo_corpus.DiagnoseTest) ... ok +test_slow_hint_when_worker_and_server_are_up (test_seed_demo_corpus.DiagnoseTest) ... ok +test_worker_hint_when_no_job_started (test_seed_demo_corpus.DiagnoseTest) ... ok +test_different_bytes_produce_different_keys (test_seed_demo_corpus.IdempotencyKeyTest) ... ok +test_same_bytes_produce_same_valid_key (test_seed_demo_corpus.IdempotencyKeyTest) ... ok +test_committed_corpus_is_complete (test_seed_demo_corpus.ManifestTest) ... ok + +====================================================================== +ERROR: test_detached_child_is_identified_and_stopped_by_registered_identity (test_demo_runtime.RuntimeContractTest) +---------------------------------------------------------------------- +Traceback (most recent call last): + File "<작업공간>/scripts/demo/test_demo_runtime.py", line 111, in test_detached_child_is_identified_and_stopped_by_registered_identity + self.assertTrue(self.runtime.stop_process('backend')) + File "<작업공간>/scripts/demo.py", line 516, in stop_process + os.killpg(record["pgid"], signal.SIGTERM) +PermissionError: [Errno 1] Operation not permitted + +---------------------------------------------------------------------- +Ran 75 tests in 11.827s + +FAILED (errors=1) +종료 시각: 2026-10-18T15:25:04+09:00 +종료 코드: 1 +소요 시간: 11.918초 diff --git a/docs/test-results/demo-fresh-20261018/demo-runtime-contract-04.log b/docs/test-results/demo-fresh-20261018/demo-runtime-contract-04.log new file mode 100644 index 00000000..0728e4ee --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/demo-runtime-contract-04.log @@ -0,0 +1,97 @@ +실행 ID: demo-runtime-contract-04 +목적: 분리 자식 종료 후 부모 동시 종료 경합 보완 회귀 +환경: 로컬 Python 3.9.6 POSIX, 제어 프로세스, Docker 실제 기동 0회 +합격 기준: 전체 75개 검사 통과, 분리 HTTP 자식과 포트 정리 +명령: python3 -m unittest discover -s scripts/demo -p test_*.py -v +시작 시각: 2026-10-18T15:25:56+09:00 +test_changed_configuration_refuses_before_database_or_upload (test_demo_runtime.RuntimeContractTest) ... ok +test_changed_identity_never_kills_live_process (test_demo_runtime.RuntimeContractTest) ... ok +test_child_record_from_another_owner_is_refused (test_demo_runtime.RuntimeContractTest) ... ok +test_child_record_recovers_parent_missing_process_map (test_demo_runtime.RuntimeContractTest) ... ok +test_concurrent_command_lock_refuses_second_process (test_demo_runtime.RuntimeContractTest) ... ok +test_container_transition_preserves_reused_and_marks_newly_started (test_demo_runtime.RuntimeContractTest) ... ok +test_detached_child_is_identified_and_stopped_by_registered_identity (test_demo_runtime.RuntimeContractTest) ... FAIL +test_existing_personal_environment_files_are_preserved (test_demo_runtime.RuntimeContractTest) ... ok +test_frontend_proxy_comparison_ignores_response_timestamp (test_demo_runtime.RuntimeContractTest) ... ok +test_new_env_is_initialized_without_default_jwt (test_demo_runtime.RuntimeContractTest) ... ok +test_partial_start_failure_runs_cleanup (test_demo_runtime.RuntimeContractTest) ... ok +test_session_symlink_cannot_redirect_state_writes (test_demo_runtime.RuntimeContractTest) ... ok +test_starting_component_records_actual_group_and_listener (test_demo_runtime.RuntimeContractTest) ... ok +test_status_does_not_report_dead_ready_session_as_success (test_demo_runtime.RuntimeContractTest) ... ok +test_stop_preserves_reused_containers (test_demo_runtime.RuntimeContractTest) ... ok +test_stop_releases_children_and_actual_server_port (test_demo_runtime.RuntimeContractTest) ... ok +test_supervisor_redacts_before_writing (test_demo_runtime.RuntimeContractTest) ... ok +test_verify_records_use_distinct_paths (test_demo_runtime.RuntimeContractTest) ... ok +test_changed_target_refuses_replay_before_upload (test_demo_verdict.DemoVerdictTest) ... ok +test_citation_outside_search_candidates_fails (test_demo_verdict.DemoVerdictTest) ... ok +test_different_previous_document_id_fails (test_demo_verdict.DemoVerdictTest) ... ok +test_download_hash_mismatch_fails (test_demo_verdict.DemoVerdictTest) ... ok +test_empty_search_results_fail (test_demo_verdict.DemoVerdictTest) ... ok +test_event_redaction_happens_before_storage (test_demo_verdict.DemoVerdictTest) ... ok +test_existing_report_is_never_overwritten (test_demo_verdict.DemoVerdictTest) ... ok +test_full_search_scope_passes_without_rag_polling (test_demo_verdict.DemoVerdictTest) ... ok +test_invalid_candidate_is_not_a_valid_search (test_demo_verdict.DemoVerdictTest) ... ok +test_missing_expected_document_fails (test_demo_verdict.DemoVerdictTest) ... ok +test_missing_query_id_is_not_a_valid_search (test_demo_verdict.DemoVerdictTest) ... ok +test_previous_document_ids_are_compared (test_demo_verdict.DemoVerdictTest) ... ok +test_rag_failed_is_not_success (test_demo_verdict.DemoVerdictTest) ... ok +test_rag_incomplete_is_not_success (test_demo_verdict.DemoVerdictTest) ... ok +test_rag_scope_requires_success_and_valid_citations (test_demo_verdict.DemoVerdictTest) ... ok +test_search_http_error_fails_after_all_documents_indexed (test_demo_verdict.DemoVerdictTest) ... ok +test_table_text_missing_fails (test_demo_verdict.DemoVerdictTest) ... ok +test_unrun_required_stages_cannot_pass (test_demo_verdict.DemoVerdictTest) ... ok +test_http_error_preserves_code_for_signup_decision (test_demo_verdict.HttpBoundaryTest) ... ok +test_oversized_original_is_rejected (test_demo_verdict.HttpBoundaryTest) ... ok +test_redirect_does_not_forward_credentials (test_demo_verdict.HttpBoundaryTest) ... ok +test_ambiguous_quotes_and_inline_comments_are_refused (test_local_config.LocalConfigTest) ... ok +test_container_from_another_checkout_is_refused (test_local_config.LocalConfigTest) ... ok +test_database_check_is_readonly_and_password_is_not_an_argument (test_local_config.LocalConfigTest) ... ok +test_defaults_match_local_quickstart (test_local_config.LocalConfigTest) ... ok +test_disabled_worker_is_refused (test_local_config.LocalConfigTest) ... ok +test_docker_context_takes_precedence_over_host (test_local_config.LocalConfigTest) ... ok +test_duplicate_key_is_refused (test_local_config.LocalConfigTest) ... ok +test_environment_overrides_file (test_local_config.LocalConfigTest) ... ok +test_foreign_container_is_refused_before_up (test_local_config.LocalConfigTest) ... ok +test_frontend_remote_or_different_api_is_refused (test_local_config.LocalConfigTest) ... ok +test_loopback_port_without_matching_container_is_refused (test_local_config.LocalConfigTest) ... ok +test_missing_host_port_is_not_ready_even_if_container_runs (test_local_config.LocalConfigTest) ... ok +test_multiline_secret_is_refused_before_logging (test_local_config.LocalConfigTest) ... ok +test_remote_database_and_model_are_refused (test_local_config.LocalConfigTest) ... ok +test_remote_docker_endpoint_is_refused (test_local_config.LocalConfigTest) ... ok +test_remote_profile_and_storage_are_refused (test_local_config.LocalConfigTest) ... ok +test_shell_substitution_is_refused_without_execution (test_local_config.LocalConfigTest) ... ok +test_spring_or_jvm_bypass_is_refused (test_local_config.LocalConfigTest) ... ok +test_storage_outside_checkout_is_refused (test_local_config.LocalConfigTest) ... ok +test_url_credentials_query_and_non_http_are_refused (test_local_config.LocalConfigTest) ... ok +test_wrong_extension_version_fails (test_local_config.LocalConfigTest) ... ok +test_explicit_rag_without_ready_ollama_does_not_start_compose (test_local_config.ServiceScopeTest) ... ok +test_legacy_status_still_requires_ollama (test_local_config.ServiceScopeTest) ... ok +test_search_start_never_calls_ollama (test_local_config.ServiceScopeTest) ... ok +test_claimed_or_retrying_job_is_processing (test_seed_demo_corpus.ClassifyTest) ... ok +test_failed_job (test_seed_demo_corpus.ClassifyTest) ... ok +test_indexed_document (test_seed_demo_corpus.ClassifyTest) ... ok +test_new_upload_waits_for_worker (test_seed_demo_corpus.ClassifyTest) ... ok +test_embedding_hint_first_when_server_not_ready (test_seed_demo_corpus.DiagnoseTest) ... ok +test_embedding_hint_for_failed_documents (test_seed_demo_corpus.DiagnoseTest) ... ok +test_no_hint_when_everything_indexed (test_seed_demo_corpus.DiagnoseTest) ... ok +test_slow_hint_when_worker_and_server_are_up (test_seed_demo_corpus.DiagnoseTest) ... ok +test_worker_hint_when_no_job_started (test_seed_demo_corpus.DiagnoseTest) ... ok +test_different_bytes_produce_different_keys (test_seed_demo_corpus.IdempotencyKeyTest) ... ok +test_same_bytes_produce_same_valid_key (test_seed_demo_corpus.IdempotencyKeyTest) ... ok +test_committed_corpus_is_complete (test_seed_demo_corpus.ManifestTest) ... ok + +====================================================================== +FAIL: test_detached_child_is_identified_and_stopped_by_registered_identity (test_demo_runtime.RuntimeContractTest) +---------------------------------------------------------------------- +Traceback (most recent call last): + File "<작업공간>/scripts/demo/test_demo_runtime.py", line 111, in test_detached_child_is_identified_and_stopped_by_registered_identity + self.assertTrue(self.runtime.stop_process('backend')) +AssertionError: False is not true + +---------------------------------------------------------------------- +Ran 75 tests in 7.497s + +FAILED (failures=1) +종료 시각: 2026-10-18T15:26:03+09:00 +종료 코드: 1 +소요 시간: 7.573초 diff --git a/docs/test-results/demo-fresh-20261018/demo-runtime-contract-05.log b/docs/test-results/demo-fresh-20261018/demo-runtime-contract-05.log new file mode 100644 index 00000000..61be0fdf --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/demo-runtime-contract-05.log @@ -0,0 +1,89 @@ +실행 ID: demo-runtime-contract-05 +목적: 종료 직전 계보 재조회와 부모 자연 종료 경합 회귀 +환경: 로컬 Python 3.9.6 POSIX·제어 HTTP 실제 프로세스, Docker 실제 기동 0회 +합격 기준: 75개 검사 통과, 분리 자식·포트 종료 및 다른 소유자 기록 거부 +명령: python3 -m unittest discover -s scripts/demo -p test_*.py -v +시작 시각: 2026-10-18T15:27:10+09:00 +test_changed_configuration_refuses_before_database_or_upload (test_demo_runtime.RuntimeContractTest) ... ok +test_changed_identity_never_kills_live_process (test_demo_runtime.RuntimeContractTest) ... ok +test_child_record_from_another_owner_is_refused (test_demo_runtime.RuntimeContractTest) ... ok +test_child_record_recovers_parent_missing_process_map (test_demo_runtime.RuntimeContractTest) ... ok +test_concurrent_command_lock_refuses_second_process (test_demo_runtime.RuntimeContractTest) ... ok +test_container_transition_preserves_reused_and_marks_newly_started (test_demo_runtime.RuntimeContractTest) ... ok +test_detached_child_is_identified_and_stopped_by_registered_identity (test_demo_runtime.RuntimeContractTest) ... ok +test_existing_personal_environment_files_are_preserved (test_demo_runtime.RuntimeContractTest) ... ok +test_frontend_proxy_comparison_ignores_response_timestamp (test_demo_runtime.RuntimeContractTest) ... ok +test_new_env_is_initialized_without_default_jwt (test_demo_runtime.RuntimeContractTest) ... ok +test_partial_start_failure_runs_cleanup (test_demo_runtime.RuntimeContractTest) ... ok +test_session_symlink_cannot_redirect_state_writes (test_demo_runtime.RuntimeContractTest) ... ok +test_starting_component_records_actual_group_and_listener (test_demo_runtime.RuntimeContractTest) ... ok +test_status_does_not_report_dead_ready_session_as_success (test_demo_runtime.RuntimeContractTest) ... ok +test_stop_preserves_reused_containers (test_demo_runtime.RuntimeContractTest) ... ok +test_stop_releases_children_and_actual_server_port (test_demo_runtime.RuntimeContractTest) ... ok +test_supervisor_redacts_before_writing (test_demo_runtime.RuntimeContractTest) ... ok +test_verify_records_use_distinct_paths (test_demo_runtime.RuntimeContractTest) ... ok +test_changed_target_refuses_replay_before_upload (test_demo_verdict.DemoVerdictTest) ... ok +test_citation_outside_search_candidates_fails (test_demo_verdict.DemoVerdictTest) ... ok +test_different_previous_document_id_fails (test_demo_verdict.DemoVerdictTest) ... ok +test_download_hash_mismatch_fails (test_demo_verdict.DemoVerdictTest) ... ok +test_empty_search_results_fail (test_demo_verdict.DemoVerdictTest) ... ok +test_event_redaction_happens_before_storage (test_demo_verdict.DemoVerdictTest) ... ok +test_existing_report_is_never_overwritten (test_demo_verdict.DemoVerdictTest) ... ok +test_full_search_scope_passes_without_rag_polling (test_demo_verdict.DemoVerdictTest) ... ok +test_invalid_candidate_is_not_a_valid_search (test_demo_verdict.DemoVerdictTest) ... ok +test_missing_expected_document_fails (test_demo_verdict.DemoVerdictTest) ... ok +test_missing_query_id_is_not_a_valid_search (test_demo_verdict.DemoVerdictTest) ... ok +test_previous_document_ids_are_compared (test_demo_verdict.DemoVerdictTest) ... ok +test_rag_failed_is_not_success (test_demo_verdict.DemoVerdictTest) ... ok +test_rag_incomplete_is_not_success (test_demo_verdict.DemoVerdictTest) ... ok +test_rag_scope_requires_success_and_valid_citations (test_demo_verdict.DemoVerdictTest) ... ok +test_search_http_error_fails_after_all_documents_indexed (test_demo_verdict.DemoVerdictTest) ... ok +test_table_text_missing_fails (test_demo_verdict.DemoVerdictTest) ... ok +test_unrun_required_stages_cannot_pass (test_demo_verdict.DemoVerdictTest) ... ok +test_http_error_preserves_code_for_signup_decision (test_demo_verdict.HttpBoundaryTest) ... ok +test_oversized_original_is_rejected (test_demo_verdict.HttpBoundaryTest) ... ok +test_redirect_does_not_forward_credentials (test_demo_verdict.HttpBoundaryTest) ... ok +test_ambiguous_quotes_and_inline_comments_are_refused (test_local_config.LocalConfigTest) ... ok +test_container_from_another_checkout_is_refused (test_local_config.LocalConfigTest) ... ok +test_database_check_is_readonly_and_password_is_not_an_argument (test_local_config.LocalConfigTest) ... ok +test_defaults_match_local_quickstart (test_local_config.LocalConfigTest) ... ok +test_disabled_worker_is_refused (test_local_config.LocalConfigTest) ... ok +test_docker_context_takes_precedence_over_host (test_local_config.LocalConfigTest) ... ok +test_duplicate_key_is_refused (test_local_config.LocalConfigTest) ... ok +test_environment_overrides_file (test_local_config.LocalConfigTest) ... ok +test_foreign_container_is_refused_before_up (test_local_config.LocalConfigTest) ... ok +test_frontend_remote_or_different_api_is_refused (test_local_config.LocalConfigTest) ... ok +test_loopback_port_without_matching_container_is_refused (test_local_config.LocalConfigTest) ... ok +test_missing_host_port_is_not_ready_even_if_container_runs (test_local_config.LocalConfigTest) ... ok +test_multiline_secret_is_refused_before_logging (test_local_config.LocalConfigTest) ... ok +test_remote_database_and_model_are_refused (test_local_config.LocalConfigTest) ... ok +test_remote_docker_endpoint_is_refused (test_local_config.LocalConfigTest) ... ok +test_remote_profile_and_storage_are_refused (test_local_config.LocalConfigTest) ... ok +test_shell_substitution_is_refused_without_execution (test_local_config.LocalConfigTest) ... ok +test_spring_or_jvm_bypass_is_refused (test_local_config.LocalConfigTest) ... ok +test_storage_outside_checkout_is_refused (test_local_config.LocalConfigTest) ... ok +test_url_credentials_query_and_non_http_are_refused (test_local_config.LocalConfigTest) ... ok +test_wrong_extension_version_fails (test_local_config.LocalConfigTest) ... ok +test_explicit_rag_without_ready_ollama_does_not_start_compose (test_local_config.ServiceScopeTest) ... ok +test_legacy_status_still_requires_ollama (test_local_config.ServiceScopeTest) ... ok +test_search_start_never_calls_ollama (test_local_config.ServiceScopeTest) ... ok +test_claimed_or_retrying_job_is_processing (test_seed_demo_corpus.ClassifyTest) ... ok +test_failed_job (test_seed_demo_corpus.ClassifyTest) ... ok +test_indexed_document (test_seed_demo_corpus.ClassifyTest) ... ok +test_new_upload_waits_for_worker (test_seed_demo_corpus.ClassifyTest) ... ok +test_embedding_hint_first_when_server_not_ready (test_seed_demo_corpus.DiagnoseTest) ... ok +test_embedding_hint_for_failed_documents (test_seed_demo_corpus.DiagnoseTest) ... ok +test_no_hint_when_everything_indexed (test_seed_demo_corpus.DiagnoseTest) ... ok +test_slow_hint_when_worker_and_server_are_up (test_seed_demo_corpus.DiagnoseTest) ... ok +test_worker_hint_when_no_job_started (test_seed_demo_corpus.DiagnoseTest) ... ok +test_different_bytes_produce_different_keys (test_seed_demo_corpus.IdempotencyKeyTest) ... ok +test_same_bytes_produce_same_valid_key (test_seed_demo_corpus.IdempotencyKeyTest) ... ok +test_committed_corpus_is_complete (test_seed_demo_corpus.ManifestTest) ... ok + +---------------------------------------------------------------------- +Ran 75 tests in 7.215s + +OK +종료 시각: 2026-10-18T15:27:18+09:00 +종료 코드: 0 +소요 시간: 7.293초 diff --git a/docs/test-results/demo-fresh-20261018/demo-runtime-contract-06.log b/docs/test-results/demo-fresh-20261018/demo-runtime-contract-06.log new file mode 100644 index 00000000..26d385c1 --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/demo-runtime-contract-06.log @@ -0,0 +1,90 @@ +실행 ID: demo-runtime-contract-06 +목적: 쿼리 인증정보 저장 전 마스킹과 기존 소유권 회귀 +환경: 로컬 Python 3.9.6 POSIX, Docker 실제 기동 0회 +합격 기준: 76개 검사 통과, 미등록 쿼리 비밀번호·토큰·인코딩 이메일 제거 +명령: python3 -m unittest discover -s scripts/demo -p test_*.py -v +시작 시각: 2026-10-18T15:51:19+09:00 +test_changed_configuration_refuses_before_database_or_upload (test_demo_runtime.RuntimeContractTest) ... ok +test_changed_identity_never_kills_live_process (test_demo_runtime.RuntimeContractTest) ... ok +test_child_record_from_another_owner_is_refused (test_demo_runtime.RuntimeContractTest) ... ok +test_child_record_recovers_parent_missing_process_map (test_demo_runtime.RuntimeContractTest) ... ok +test_concurrent_command_lock_refuses_second_process (test_demo_runtime.RuntimeContractTest) ... ok +test_container_transition_preserves_reused_and_marks_newly_started (test_demo_runtime.RuntimeContractTest) ... ok +test_detached_child_is_identified_and_stopped_by_registered_identity (test_demo_runtime.RuntimeContractTest) ... ok +test_existing_personal_environment_files_are_preserved (test_demo_runtime.RuntimeContractTest) ... ok +test_frontend_proxy_comparison_ignores_response_timestamp (test_demo_runtime.RuntimeContractTest) ... ok +test_new_env_is_initialized_without_default_jwt (test_demo_runtime.RuntimeContractTest) ... ok +test_partial_start_failure_runs_cleanup (test_demo_runtime.RuntimeContractTest) ... ok +test_session_symlink_cannot_redirect_state_writes (test_demo_runtime.RuntimeContractTest) ... ok +test_starting_component_records_actual_group_and_listener (test_demo_runtime.RuntimeContractTest) ... ok +test_status_does_not_report_dead_ready_session_as_success (test_demo_runtime.RuntimeContractTest) ... ok +test_stop_preserves_reused_containers (test_demo_runtime.RuntimeContractTest) ... ok +test_stop_releases_children_and_actual_server_port (test_demo_runtime.RuntimeContractTest) ... ok +test_supervisor_redacts_before_writing (test_demo_runtime.RuntimeContractTest) ... ok +test_verify_records_use_distinct_paths (test_demo_runtime.RuntimeContractTest) ... ok +test_changed_target_refuses_replay_before_upload (test_demo_verdict.DemoVerdictTest) ... ok +test_citation_outside_search_candidates_fails (test_demo_verdict.DemoVerdictTest) ... ok +test_different_previous_document_id_fails (test_demo_verdict.DemoVerdictTest) ... ok +test_download_hash_mismatch_fails (test_demo_verdict.DemoVerdictTest) ... ok +test_empty_search_results_fail (test_demo_verdict.DemoVerdictTest) ... ok +test_event_redaction_happens_before_storage (test_demo_verdict.DemoVerdictTest) ... ok +test_existing_report_is_never_overwritten (test_demo_verdict.DemoVerdictTest) ... ok +test_full_search_scope_passes_without_rag_polling (test_demo_verdict.DemoVerdictTest) ... ok +test_invalid_candidate_is_not_a_valid_search (test_demo_verdict.DemoVerdictTest) ... ok +test_missing_expected_document_fails (test_demo_verdict.DemoVerdictTest) ... ok +test_missing_query_id_is_not_a_valid_search (test_demo_verdict.DemoVerdictTest) ... ok +test_previous_document_ids_are_compared (test_demo_verdict.DemoVerdictTest) ... ok +test_query_credentials_are_redacted_without_knowing_the_password (test_demo_verdict.DemoVerdictTest) ... ok +test_rag_failed_is_not_success (test_demo_verdict.DemoVerdictTest) ... ok +test_rag_incomplete_is_not_success (test_demo_verdict.DemoVerdictTest) ... ok +test_rag_scope_requires_success_and_valid_citations (test_demo_verdict.DemoVerdictTest) ... ok +test_search_http_error_fails_after_all_documents_indexed (test_demo_verdict.DemoVerdictTest) ... ok +test_table_text_missing_fails (test_demo_verdict.DemoVerdictTest) ... ok +test_unrun_required_stages_cannot_pass (test_demo_verdict.DemoVerdictTest) ... ok +test_http_error_preserves_code_for_signup_decision (test_demo_verdict.HttpBoundaryTest) ... ok +test_oversized_original_is_rejected (test_demo_verdict.HttpBoundaryTest) ... ok +test_redirect_does_not_forward_credentials (test_demo_verdict.HttpBoundaryTest) ... ok +test_ambiguous_quotes_and_inline_comments_are_refused (test_local_config.LocalConfigTest) ... ok +test_container_from_another_checkout_is_refused (test_local_config.LocalConfigTest) ... ok +test_database_check_is_readonly_and_password_is_not_an_argument (test_local_config.LocalConfigTest) ... ok +test_defaults_match_local_quickstart (test_local_config.LocalConfigTest) ... ok +test_disabled_worker_is_refused (test_local_config.LocalConfigTest) ... ok +test_docker_context_takes_precedence_over_host (test_local_config.LocalConfigTest) ... ok +test_duplicate_key_is_refused (test_local_config.LocalConfigTest) ... ok +test_environment_overrides_file (test_local_config.LocalConfigTest) ... ok +test_foreign_container_is_refused_before_up (test_local_config.LocalConfigTest) ... ok +test_frontend_remote_or_different_api_is_refused (test_local_config.LocalConfigTest) ... ok +test_loopback_port_without_matching_container_is_refused (test_local_config.LocalConfigTest) ... ok +test_missing_host_port_is_not_ready_even_if_container_runs (test_local_config.LocalConfigTest) ... ok +test_multiline_secret_is_refused_before_logging (test_local_config.LocalConfigTest) ... ok +test_remote_database_and_model_are_refused (test_local_config.LocalConfigTest) ... ok +test_remote_docker_endpoint_is_refused (test_local_config.LocalConfigTest) ... ok +test_remote_profile_and_storage_are_refused (test_local_config.LocalConfigTest) ... ok +test_shell_substitution_is_refused_without_execution (test_local_config.LocalConfigTest) ... ok +test_spring_or_jvm_bypass_is_refused (test_local_config.LocalConfigTest) ... ok +test_storage_outside_checkout_is_refused (test_local_config.LocalConfigTest) ... ok +test_url_credentials_query_and_non_http_are_refused (test_local_config.LocalConfigTest) ... ok +test_wrong_extension_version_fails (test_local_config.LocalConfigTest) ... ok +test_explicit_rag_without_ready_ollama_does_not_start_compose (test_local_config.ServiceScopeTest) ... ok +test_legacy_status_still_requires_ollama (test_local_config.ServiceScopeTest) ... ok +test_search_start_never_calls_ollama (test_local_config.ServiceScopeTest) ... ok +test_claimed_or_retrying_job_is_processing (test_seed_demo_corpus.ClassifyTest) ... ok +test_failed_job (test_seed_demo_corpus.ClassifyTest) ... ok +test_indexed_document (test_seed_demo_corpus.ClassifyTest) ... ok +test_new_upload_waits_for_worker (test_seed_demo_corpus.ClassifyTest) ... ok +test_embedding_hint_first_when_server_not_ready (test_seed_demo_corpus.DiagnoseTest) ... ok +test_embedding_hint_for_failed_documents (test_seed_demo_corpus.DiagnoseTest) ... ok +test_no_hint_when_everything_indexed (test_seed_demo_corpus.DiagnoseTest) ... ok +test_slow_hint_when_worker_and_server_are_up (test_seed_demo_corpus.DiagnoseTest) ... ok +test_worker_hint_when_no_job_started (test_seed_demo_corpus.DiagnoseTest) ... ok +test_different_bytes_produce_different_keys (test_seed_demo_corpus.IdempotencyKeyTest) ... ok +test_same_bytes_produce_same_valid_key (test_seed_demo_corpus.IdempotencyKeyTest) ... ok +test_committed_corpus_is_complete (test_seed_demo_corpus.ManifestTest) ... ok + +---------------------------------------------------------------------- +Ran 76 tests in 9.063s + +OK +종료 시각: 2026-10-18T15:51:28+09:00 +종료 코드: 0 +소요 시간: 9.168초 diff --git a/docs/test-results/demo-fresh-20261018/probe_gradle_group.py b/docs/test-results/demo-fresh-20261018/probe_gradle_group.py new file mode 100644 index 00000000..66f4fb69 --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/probe_gradle_group.py @@ -0,0 +1,16 @@ +import os,subprocess,time,threading,json +env=dict(os.environ) +java=subprocess.run(['/usr/libexec/java_home','-v','17'],capture_output=True,text=True) +if java.returncode==0:env['JAVA_HOME']=java.stdout.strip() +p=subprocess.Popen(['./backend/gradlew','-p','backend','--no-daemon','help'],stdout=subprocess.PIPE,stderr=subprocess.STDOUT,text=True,env=env,start_new_session=True) +thread=threading.Thread(target=lambda:[print(line,end='',flush=True) for line in p.stdout]);thread.start() +observed={} +while p.poll() is None: + result=subprocess.run(['ps','-eo','pid=,ppid=,pgid=,args='],capture_output=True,text=True) + for line in result.stdout.splitlines(): + fields=line.split(maxsplit=3) + if len(fields)==4 and fields[1]==str(p.pid): + observed[fields[0]]={'role':'gradle-child','sameGroup':fields[2]==str(p.pid)} + time.sleep(0.1) +thread.join();print(json.dumps({'gradleExitCode':p.returncode,'directChildren':list(observed.values())})) +raise SystemExit(0 if p.returncode==0 and all(x['sameGroup'] for x in observed.values()) else 1) diff --git a/docs/test-results/demo-fresh-20261018/probe_gradle_registered.py b/docs/test-results/demo-fresh-20261018/probe_gradle_registered.py new file mode 100644 index 00000000..455ddc14 --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/probe_gradle_registered.py @@ -0,0 +1,21 @@ +import os,subprocess,time,threading,json,importlib.util,tempfile +from pathlib import Path +spec=importlib.util.spec_from_file_location('runtime',Path.cwd()/'scripts/demo.py');m=importlib.util.module_from_spec(spec);spec.loader.exec_module(m) +env=dict(os.environ) +java=subprocess.run(['/usr/libexec/java_home','-v','17'],capture_output=True,text=True) +if java.returncode==0:env['JAVA_HOME']=java.stdout.strip() +with tempfile.TemporaryDirectory() as directory: + path=Path(directory)/'children.json';stopped=threading.Event();owner=m.identity(os.getpid()) + tracker=threading.Thread(target=m.track_children,args=(owner,stopped,path));tracker.start() + p=subprocess.Popen(['./backend/gradlew','-p','backend','--no-daemon','help'],stdout=subprocess.PIPE,stderr=subprocess.STDOUT,text=True,env=env,start_new_session=True) + reader=threading.Thread(target=lambda:[print(line,end='',flush=True) for line in p.stdout]);reader.start() + separate=set() + while p.poll() is None: + if path.exists(): + for item in m.read_json(path)['children']: + if item['pid'] != p.pid and item['pgid'] != p.pid and item['pgid'] != owner['pgid']: + separate.add(item['pid']) + time.sleep(0.05) + reader.join();stopped.set();tracker.join() + print(json.dumps({'gradleExitCode':p.returncode,'registeredSeparateChildren':len(separate)})) + raise SystemExit(0 if p.returncode==0 and separate else 1) diff --git a/docs/test-results/demo-fresh-20261018/runs/39103254726-1/cold-start.log b/docs/test-results/demo-fresh-20261018/runs/39103254726-1/cold-start.log new file mode 100644 index 00000000..aa584aa7 --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39103254726-1/cold-start.log @@ -0,0 +1,7 @@ +실행 ID: 39103254726-1/cold-start +목적: 모델·의존성 최초 준비를 포함한 전체 기동 +시작: 2026-10-18T15:13:35+09:00 +장소: 독립 GitHub hosted 실행기 +기대 종료 코드: 0 +절차: ./scripts/demo.py start --timeout 1200 +2026-10-18T15:13:40+09:00 [시작] 로컬 시연 세션 dfeb031efca641a5aac154c3530c63c2 · 범위 search diff --git a/docs/test-results/demo-fresh-20261018/runs/39103254726-1/concurrent-start.log b/docs/test-results/demo-fresh-20261018/runs/39103254726-1/concurrent-start.log new file mode 100644 index 00000000..f36702f1 --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39103254726-1/concurrent-start.log @@ -0,0 +1,10 @@ +실행 ID: 39103254726-1/concurrent-start +목적: 진행 중 start의 잠금으로 두 번째 start 거부 +시작: 2026-10-18T15:13:40+09:00 +장소: 독립 GitHub hosted 실행기 +기대 종료 코드: 1 +절차: ./scripts/demo.py start +2026-10-18T15:13:40+09:00 [실패] 다른 시작·검증·종료 명령이 실행 중입니다. +종료: 2026-10-18T15:13:40+09:00 +실제 종료 코드: 1 +소요 시간: 0.116초 diff --git a/docs/test-results/demo-fresh-20261018/runs/39103254726-1/summary.json b/docs/test-results/demo-fresh-20261018/runs/39103254726-1/summary.json new file mode 100644 index 00000000..335fc46e --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39103254726-1/summary.json @@ -0,0 +1,32 @@ +{ + "runId": "39103254726-1", + "revision": "f459f0c63ca9f7656c2b1ce9b6b26a82c83bdae5", + "environment": "GitHub hosted Ubuntu 24.04 · actual PostgreSQL/Valkey/BGE-M3 · no Ollama", + "results": [ + { + "id": "preflight", + "purpose": "독립 실행기의 새 환경 확인", + "timestamp": "2026-10-18T15:13:35+09:00", + "verdict": "PASS", + "existingContainers": 0, + "existingImageCount": 6, + "existingVolumes": 0, + "environmentFilesInitiallyPresent": 0, + "workload": { + "documents": 15, + "searchQuestions": 3, + "browserSessions": 1 + } + }, + { + "id": "concurrent-start", + "purpose": "진행 중 start의 잠금으로 두 번째 start 거부", + "timestamp": "2026-10-18T15:13:40+09:00", + "verdict": "PASS", + "exitCode": 1, + "expectedExitCode": 1, + "elapsedSeconds": 0.116, + "log": "concurrent-start.log" + } + ] +} \ No newline at end of file diff --git a/docs/test-results/demo-fresh-20261018/runs/39104137120-1/cold-start.log b/docs/test-results/demo-fresh-20261018/runs/39104137120-1/cold-start.log new file mode 100644 index 00000000..6b3a26d4 --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39104137120-1/cold-start.log @@ -0,0 +1,7 @@ +실행 ID: 39104137120-1/cold-start +목적: 모델·의존성 최초 준비를 포함한 전체 기동 +시작: 2026-10-18T15:28:45+09:00 +장소: 독립 GitHub hosted 실행기 +기대 종료 코드: 0 +절차: ./scripts/demo.py start --timeout 1200 +2026-10-18T15:28:48+09:00 [시작] 로컬 시연 세션 73ca94307e5f46518da77b6017cb991f · 범위 search diff --git a/docs/test-results/demo-fresh-20261018/runs/39104137120-1/concurrent-start.log b/docs/test-results/demo-fresh-20261018/runs/39104137120-1/concurrent-start.log new file mode 100644 index 00000000..e660f562 --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39104137120-1/concurrent-start.log @@ -0,0 +1,10 @@ +실행 ID: 39104137120-1/concurrent-start +목적: 진행 중 start의 잠금으로 두 번째 start 거부 +시작: 2026-10-18T15:28:48+09:00 +장소: 독립 GitHub hosted 실행기 +기대 종료 코드: 1 +절차: ./scripts/demo.py start +2026-10-18T15:28:48+09:00 [실패] 다른 시작·검증·종료 명령이 실행 중입니다. +종료: 2026-10-18T15:28:49+09:00 +실제 종료 코드: 1 +소요 시간: 0.115초 diff --git a/docs/test-results/demo-fresh-20261018/runs/39104137120-1/runtime/73ca94307e5f46518da77b6017cb991f/backend.log b/docs/test-results/demo-fresh-20261018/runs/39104137120-1/runtime/73ca94307e5f46518da77b6017cb991f/backend.log new file mode 100644 index 00000000..7a5a5307 --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39104137120-1/runtime/73ca94307e5f46518da77b6017cb991f/backend.log @@ -0,0 +1,208 @@ +2026-10-18T15:30:43+09:00 Downloading <설정된 서버> +2026-10-18T15:30:46+09:00 .............10%.............20%.............30%.............40%.............50%.............60%..............70%.............80%.............90%.............100% +2026-10-18T15:30:47+09:00 +2026-10-18T15:30:47+09:00 Welcome to Gradle 8.14.5! +2026-10-18T15:30:47+09:00 +2026-10-18T15:30:47+09:00 Here are the highlights of this release: +2026-10-18T15:30:47+09:00 - Java 24 support +2026-10-18T15:30:47+09:00 - GraalVM Native Image toolchain selection +2026-10-18T15:30:47+09:00 - Enhancements to test reporting +2026-10-18T15:30:47+09:00 - Build Authoring improvements +2026-10-18T15:30:47+09:00 +2026-10-18T15:30:47+09:00 For more details see <설정된 서버> +2026-10-18T15:30:47+09:00 +2026-10-18T15:30:47+09:00 To honour the JVM settings for this build a single-use Daemon process will be forked. For more on this, please refer to <설정된 서버> in the Gradle documentation. +2026-10-18T15:30:48+09:00 Daemon will be stopped at the end of the build +2026-10-18T15:31:52+09:00 > Task :compileJava +2026-10-18T15:31:52+09:00 > Task :processResources +2026-10-18T15:31:52+09:00 > Task :classes +2026-10-18T15:31:52+09:00 > Task :resolveMainClassName +2026-10-18T15:31:54+09:00 +2026-10-18T15:31:54+09:00 > Task :bootRun +2026-10-18T15:31:54+09:00 Standard Commons Logging discovery in action with spring-jcl: please remove commons-logging.jar from classpath in order to avoid potential conflicts +2026-10-18T15:31:54+09:00 Standard Commons Logging discovery in action with spring-jcl: please remove commons-logging.jar from classpath in order to avoid potential conflicts +2026-10-18T15:31:54+09:00 +2026-10-18T15:31:54+09:00 . ____ _ __ _ _ +2026-10-18T15:31:54+09:00 /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ +2026-10-18T15:31:54+09:00 ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ +2026-10-18T15:31:54+09:00 \\/ ___)| |_)| | | | | || (_| | ) ) ) ) +2026-10-18T15:31:54+09:00 ' |____| .__|_| |_|_| |_\__, | / / / / +2026-10-18T15:31:54+09:00 =========|_|==============|___/=/_/_/_/ +2026-10-18T15:31:54+09:00 +2026-10-18T15:31:54+09:00 :: Spring Boot :: (v3.5.16) +2026-10-18T15:31:54+09:00 +2026-10-18T15:31:54+09:00 2026-10-18T06:31:53.549Z INFO 9862 --- [docgrid] [ restartedMain] c.opensource.docgrid.DocgridApplication : Starting DocgridApplication using Java 17.0.20.1 with PID 9862 (<작업공간>/backend/build/classes/java/main started by runner in <작업공간>) +2026-10-18T15:31:54+09:00 2026-10-18T06:31:53.551Z INFO 9862 --- [docgrid] [ restartedMain] c.opensource.docgrid.DocgridApplication : The following 1 profile is active: "local" +2026-10-18T15:31:54+09:00 2026-10-18T06:31:53.581Z INFO 9862 --- [docgrid] [ restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable +2026-10-18T15:31:54+09:00 2026-10-18T06:31:53.581Z INFO 9862 --- [docgrid] [ restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' +2026-10-18T15:31:54+09:00 2026-10-18T06:31:54.383Z INFO 9862 --- [docgrid] [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode +2026-10-18T15:31:54+09:00 2026-10-18T06:31:54.385Z INFO 9862 --- [docgrid] [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2026-10-18T15:31:54+09:00 2026-10-18T06:31:54.502Z INFO 9862 --- [docgrid] [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 112 ms. Found 31 JPA repository interfaces. +2026-10-18T15:31:54+09:00 2026-10-18T06:31:54.510Z INFO 9862 --- [docgrid] [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode +2026-10-18T15:31:54+09:00 2026-10-18T06:31:54.511Z INFO 9862 --- [docgrid] [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode. +2026-10-18T15:31:54+09:00 2026-10-18T06:31:54.528Z INFO 9862 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.collection.repository.CollectionDocumentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:31:54+09:00 2026-10-18T06:31:54.529Z INFO 9862 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.collection.repository.CollectionRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:31:54+09:00 2026-10-18T06:31:54.529Z INFO 9862 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.document.repository.DocumentChunkRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:31:54+09:00 2026-10-18T06:31:54.529Z INFO 9862 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.document.repository.DocumentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:31:54+09:00 2026-10-18T06:31:54.529Z INFO 9862 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.document.repository.DocumentVersionRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:31:54+09:00 2026-10-18T06:31:54.529Z INFO 9862 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.document.repository.FileObjectRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:31:54+09:00 2026-10-18T06:31:54.529Z INFO 9862 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.embedding.repository.EmbeddingJobRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:31:54+09:00 2026-10-18T06:31:54.530Z INFO 9862 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.embedding.repository.EmbeddingModelRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:31:54+09:00 2026-10-18T06:31:54.530Z INFO 9862 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.embedding.repository.EmbeddingRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:31:54+09:00 2026-10-18T06:31:54.530Z INFO 9862 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.permission.repository.CollectionPermissionRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:31:54+09:00 2026-10-18T06:31:54.530Z INFO 9862 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.permission.repository.DocumentPermissionRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:31:54+09:00 2026-10-18T06:31:54.530Z INFO 9862 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.permission.repository.UserDocumentAccessCacheRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:31:54+09:00 2026-10-18T06:31:54.530Z INFO 9862 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.rag.repository.RagResponseRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:31:54+09:00 2026-10-18T06:31:54.530Z INFO 9862 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.rag.repository.ResponseCitationRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:31:54+09:00 2026-10-18T06:31:54.530Z INFO 9862 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.search.repository.SearchConversationRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:31:54+09:00 2026-10-18T06:31:54.531Z INFO 9862 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.search.repository.SearchQueryRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:31:54+09:00 2026-10-18T06:31:54.531Z INFO 9862 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.search.repository.SearchResultRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:31:54+09:00 2026-10-18T06:31:54.531Z INFO 9862 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.search.repository.VectorSearchRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:31:54+09:00 2026-10-18T06:31:54.531Z INFO 9862 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.sync.repository.SyncAdminActionRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:31:54+09:00 2026-10-18T06:31:54.531Z INFO 9862 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.sync.repository.SyncConsistencyIssueRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:31:54+09:00 2026-10-18T06:31:54.531Z INFO 9862 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.sync.repository.SyncEventDeliveryAttemptRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:31:54+09:00 2026-10-18T06:31:54.532Z INFO 9862 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.sync.repository.SyncOutboxEventRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:31:54+09:00 2026-10-18T06:31:54.532Z INFO 9862 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.sync.repository.SyncReconciliationRunRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:31:54+09:00 2026-10-18T06:31:54.532Z INFO 9862 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.user.repository.DepartmentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:31:54+09:00 2026-10-18T06:31:54.532Z INFO 9862 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.user.repository.McpAccessTokenRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:31:54+09:00 2026-10-18T06:31:54.532Z INFO 9862 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.user.repository.RoleRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:31:54+09:00 2026-10-18T06:31:54.532Z INFO 9862 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.user.repository.UserRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:31:54+09:00 2026-10-18T06:31:54.532Z INFO 9862 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.user.repository.UserRoleRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:31:54+09:00 2026-10-18T06:31:54.533Z INFO 9862 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.worker.repository.EmbeddingJobAttemptRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:31:54+09:00 2026-10-18T06:31:54.533Z INFO 9862 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.worker.repository.IndexingEventRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:31:54+09:00 2026-10-18T06:31:54.535Z INFO 9862 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.worker.repository.WorkerNodeRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:31:54+09:00 2026-10-18T06:31:54.535Z INFO 9862 --- [docgrid] [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 18 ms. Found 0 Redis repository interfaces. +2026-10-18T15:31:54+09:00 2026-10-18T06:31:54.789Z WARN 9862 --- [docgrid] [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.ai.mcp.server.common.autoconfigure.annotations.McpServerAnnotationScannerAutoConfiguration' of type [org.springframework.ai.mcp.server.common.autoconfigure.annotations.McpServerAnnotationScannerAutoConfiguration] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying). Is this bean getting eagerly injected/applied to a currently created BeanPostProcessor [serverAnnotatedMethodBeanPostProcessor]? Check the corresponding BeanPostProcessor declaration and its dependencies/advisors. If this bean does not have to be post-processed, declare it with ROLE_INFRASTRUCTURE. +2026-10-18T15:31:54+09:00 2026-10-18T06:31:54.789Z WARN 9862 --- [docgrid] [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'serverAnnotatedBeanRegistry' of type [org.springframework.ai.mcp.server.common.autoconfigure.annotations.McpServerAnnotationScannerAutoConfiguration$ServerMcpAnnotatedBeans] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying). Is this bean getting eagerly injected/applied to a currently created BeanPostProcessor [serverAnnotatedMethodBeanPostProcessor]? Check the corresponding BeanPostProcessor declaration and its dependencies/advisors. If this bean does not have to be post-processed, declare it with ROLE_INFRASTRUCTURE. +2026-10-18T15:31:54+09:00 2026-10-18T06:31:54.794Z WARN 9862 --- [docgrid] [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'stringOrNumberMigrationVersionConverter' of type [org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration$StringOrNumberToMigrationVersionConverter] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying). Is this bean getting eagerly injected/applied to a currently created BeanPostProcessor [serverAnnotatedMethodBeanPostProcessor]? Check the corresponding BeanPostProcessor declaration and its dependencies/advisors. If this bean does not have to be post-processed, declare it with ROLE_INFRASTRUCTURE. +2026-10-18T15:31:54+09:00 2026-10-18T06:31:54.796Z WARN 9862 --- [docgrid] [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'spring.ai.mcp.server.annotation-scanner-org.springframework.ai.mcp.server.common.autoconfigure.annotations.McpServerAnnotationScannerProperties' of type [org.springframework.ai.mcp.server.common.autoconfigure.annotations.McpServerAnnotationScannerProperties] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying). Is this bean getting eagerly injected/applied to a currently created BeanPostProcessor [serverAnnotatedMethodBeanPostProcessor]? Check the corresponding BeanPostProcessor declaration and its dependencies/advisors. If this bean does not have to be post-processed, declare it with ROLE_INFRASTRUCTURE. +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.028Z INFO 9862 --- [docgrid] [ restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port 8080 (http) +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.037Z INFO 9862 --- [docgrid] [ restartedMain] o.apache.catalina.core.StandardService : Starting service [Tomcat] +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.038Z INFO 9862 --- [docgrid] [ restartedMain] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.55] +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.071Z INFO 9862 --- [docgrid] [ restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.071Z INFO 9862 --- [docgrid] [ restartedMain] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1489 ms +2026-10-18T15:31:55+09:00 Standard Commons Logging discovery in action with spring-jcl: please remove commons-logging.jar from classpath in order to avoid potential conflicts +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.237Z INFO 9862 --- [docgrid] [ restartedMain] com.zaxxer.hikari.HikariDataSource : docgrid-local-db-pool - Starting... +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.306Z INFO 9862 --- [docgrid] [ restartedMain] com.zaxxer.hikari.pool.HikariPool : docgrid-local-db-pool - Added connection org.postgresql.jdbc.PgConnection@26d752a1 +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.307Z INFO 9862 --- [docgrid] [ restartedMain] com.zaxxer.hikari.HikariDataSource : docgrid-local-db-pool - Start completed. +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.323Z INFO 9862 --- [docgrid] [ restartedMain] org.flywaydb.core.FlywayExecutor : Database: jdbc:postgresql://127.0.0.1:55432/app?currentSchema=public&sslmode=disable (PostgreSQL 17.8) +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.378Z INFO 9862 --- [docgrid] [ restartedMain] o.f.c.i.s.JdbcTableSchemaHistory : Schema history table "public"."flyway_schema_history" does not exist yet +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.381Z INFO 9862 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbValidate : Successfully validated 54 migrations (execution time 00:00.044s) +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.390Z INFO 9862 --- [docgrid] [ restartedMain] o.f.c.i.s.JdbcTableSchemaHistory : Creating Schema History table "public"."flyway_schema_history" ... +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.432Z INFO 9862 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Current version of schema "public": << Empty Schema >> +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.435Z INFO 9862 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "1 - init schema" +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.448Z INFO 9862 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "2 - create departments" +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.458Z INFO 9862 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "3 - create users" +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.465Z INFO 9862 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "4 - create file objects" +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.472Z INFO 9862 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "5 - create documents" +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.479Z INFO 9862 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "6 - create document versions" +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.487Z INFO 9862 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "7 - create collections" +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.493Z INFO 9862 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "8 - create collection documents" +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.500Z INFO 9862 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "9 - create roles" +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.505Z INFO 9862 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "10 - create user roles" +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.511Z INFO 9862 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "11 - create collection permissions" +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.520Z INFO 9862 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "12 - create document permissions" +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.527Z INFO 9862 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "13 - create user document access cache" +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.531Z WARN 9862 --- [docgrid] [ restartedMain] o.f.c.i.s.DefaultSqlScriptExecutor : DB: identifier "uk_user_document_access_cache_user_id_document_id_source_type_source_id" will be truncated to "uk_user_document_access_cache_user_id_document_id_source_type_s" (SQL State: 42622 - Error Code: 0) +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.536Z INFO 9862 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "14 - create embedding models" +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.542Z INFO 9862 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "15 - create document chunks" +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.548Z INFO 9862 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "16 - create embeddings" +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.554Z INFO 9862 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "17 - create worker nodes" +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.559Z INFO 9862 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "18 - create embedding jobs" +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.565Z INFO 9862 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "19 - create embedding job attempts" +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.570Z INFO 9862 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "20 - create indexing events" +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.575Z INFO 9862 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "21 - create search queries" +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.581Z INFO 9862 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "22 - create search results" +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.587Z INFO 9862 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "23 - create rag responses" +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.592Z INFO 9862 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "24 - create response citations" +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.597Z INFO 9862 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "25 - create failover events" +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.602Z INFO 9862 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "26 - create mcp access tokens" +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.607Z INFO 9862 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "27 - add embedding model constraints" +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.611Z INFO 9862 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "28 - seed roles departments admin" +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.615Z INFO 9862 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "29 - add file object deduplication constraint" +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.619Z INFO 9862 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "30 - add document version upload metadata" +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.623Z INFO 9862 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "31 - add worker instance id" +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.627Z INFO 9862 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "32 - convert vector columns to pgvector" +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.633Z INFO 9862 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "33 - add embedding job claim token" +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.635Z INFO 9862 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "34 - add claim token to embedding job attempts" +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.638Z INFO 9862 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "35 - add embedding job next retry at" +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.642Z INFO 9862 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "36 - create sync outbox events" +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.648Z INFO 9862 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "37 - create sync consistency issues" +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.655Z INFO 9862 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "38 - create sync admin actions" +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.660Z INFO 9862 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "39 - create sync event delivery attempts" +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.666Z INFO 9862 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "40 - alter rag responses answer text nullable" +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.669Z INFO 9862 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "41 - create search conversations" +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.672Z INFO 9862 --- [docgrid] [ restartedMain] o.f.c.i.s.DefaultSqlScriptExecutor : +--------+ +2026-10-18T15:31:55+09:00 | setval | +2026-10-18T15:31:55+09:00 +--------+ +2026-10-18T15:31:55+09:00 | 1 | +2026-10-18T15:31:55+09:00 +--------+ +2026-10-18T15:31:55+09:00 +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.676Z INFO 9862 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "42 - create collection closure" +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.680Z INFO 9862 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "43 - add rag responses claimed at" +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.683Z INFO 9862 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "44 - create ha probe writes" +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.687Z INFO 9862 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "45 - create ha probe idempotent writes" +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.690Z INFO 9862 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "46 - enable pg trgm chunk text index" +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.697Z INFO 9862 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "47 - create initial upload requests" +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.701Z INFO 9862 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "48 - track initial upload candidates" +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.706Z INFO 9862 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "49 - create version upload requests" +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.711Z INFO 9862 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "50 - track version upload candidates" +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.723Z INFO 9862 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "51 - add rag response claim lease" +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.727Z INFO 9862 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "52 - create permission revocation requests" +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.732Z INFO 9862 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" with repeatable migration "seed bge m3 embedding model" +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.739Z INFO 9862 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" with repeatable migration "seed test fixtures" +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.754Z INFO 9862 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Successfully applied 54 migrations to schema "public", now at version v52 (execution time 00:00.127s) +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.812Z INFO 9862 --- [docgrid] [ restartedMain] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default] +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.836Z INFO 9862 --- [docgrid] [ restartedMain] org.hibernate.Version : HHH000412: Hibernate ORM core version 6.6.53.Final +2026-10-18T15:31:55+09:00 2026-10-18T06:31:55.850Z INFO 9862 --- [docgrid] [ restartedMain] o.h.c.internal.RegionFactoryInitiator : HHH000026: Second-level cache disabled +2026-10-18T15:31:56+09:00 2026-10-18T06:31:55.977Z INFO 9862 --- [docgrid] [ restartedMain] o.s.o.j.p.SpringPersistenceUnitInfo : No LoadTimeWeaver setup: ignoring JPA class transformer +2026-10-18T15:31:56+09:00 2026-10-18T06:31:56.017Z INFO 9862 --- [docgrid] [ restartedMain] org.hibernate.orm.connections.pooling : HHH10001005: Database info: +2026-10-18T15:31:56+09:00 Database JDBC URL [Connecting through datasource 'HikariDataSource (docgrid-local-db-pool)'] +2026-10-18T15:31:56+09:00 Database driver: undefined/unknown +2026-10-18T15:31:56+09:00 Database version: 17.8 +2026-10-18T15:31:56+09:00 Autocommit mode: undefined/unknown +2026-10-18T15:31:56+09:00 Isolation level: undefined/unknown +2026-10-18T15:31:56+09:00 Minimum pool size: undefined/unknown +2026-10-18T15:31:56+09:00 Maximum pool size: undefined/unknown +2026-10-18T15:31:56+09:00 2026-10-18T06:31:56.758Z INFO 9862 --- [docgrid] [ restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) +2026-10-18T15:31:56+09:00 2026-10-18T06:31:56.783Z INFO 9862 --- [docgrid] [ restartedMain] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' +2026-10-18T15:31:57+09:00 2026-10-18T06:31:56.934Z INFO 9862 --- [docgrid] [ restartedMain] o.s.d.j.r.query.QueryEnhancerFactory : Hibernate is in classpath; If applicable, HQL parser will be used. +2026-10-18T15:31:58+09:00 2026-10-18T06:31:58.849Z WARN 9862 --- [docgrid] [ restartedMain] .s.s.UserDetailsServiceAutoConfiguration : +2026-10-18T15:31:58+09:00 +2026-10-18T15:31:58+09:00 Using generated security password: 87c99d8d-6b81-48d9-b5e8-25f8c3de8bd3 +2026-10-18T15:31:58+09:00 +2026-10-18T15:31:58+09:00 This generated password is for development use only. Your security configuration must be updated before running your application in production. +2026-10-18T15:31:58+09:00 +2026-10-18T15:31:58+09:00 2026-10-18T06:31:58.854Z INFO 9862 --- [docgrid] [ restartedMain] r$InitializeUserDetailsManagerConfigurer : Global AuthenticationManager configured with UserDetailsService bean with name inMemoryUserDetailsManager +2026-10-18T15:31:59+09:00 2026-10-18T06:31:59.264Z INFO 9862 --- [docgrid] [ restartedMain] o.s.a.m.s.c.a.McpServerAutoConfiguration : Enable tools capabilities, notification: true +2026-10-18T15:31:59+09:00 2026-10-18T06:31:59.265Z INFO 9862 --- [docgrid] [ restartedMain] o.s.a.m.s.c.a.McpServerAutoConfiguration : Registered tools: 3 +2026-10-18T15:31:59+09:00 2026-10-18T06:31:59.265Z INFO 9862 --- [docgrid] [ restartedMain] o.s.a.m.s.c.a.McpServerAutoConfiguration : Enable resources capabilities, notification: true +2026-10-18T15:31:59+09:00 2026-10-18T06:31:59.265Z INFO 9862 --- [docgrid] [ restartedMain] o.s.a.m.s.c.a.McpServerAutoConfiguration : Enable resources templates capabilities, notification: true +2026-10-18T15:31:59+09:00 2026-10-18T06:31:59.265Z INFO 9862 --- [docgrid] [ restartedMain] o.s.a.m.s.c.a.McpServerAutoConfiguration : Enable prompts capabilities, notification: true +2026-10-18T15:31:59+09:00 2026-10-18T06:31:59.266Z INFO 9862 --- [docgrid] [ restartedMain] o.s.a.m.s.c.a.McpServerAutoConfiguration : Enable completions capabilities +2026-10-18T15:31:59+09:00 2026-10-18T06:31:59.460Z INFO 9862 --- [docgrid] [ restartedMain] o.s.b.d.a.OptionalLiveReloadServer : LiveReload server is running on port 35729 +2026-10-18T15:31:59+09:00 2026-10-18T06:31:59.496Z INFO 9862 --- [docgrid] [ restartedMain] o.s.m.s.b.SimpleBrokerMessageHandler : Starting... +2026-10-18T15:31:59+09:00 2026-10-18T06:31:59.496Z INFO 9862 --- [docgrid] [ restartedMain] o.s.m.s.b.SimpleBrokerMessageHandler : BrokerAvailabilityEvent[available=true, SimpleBrokerMessageHandler [org.springframework.messaging.simp.broker.DefaultSubscriptionRegistry@6bad9d00]] +2026-10-18T15:31:59+09:00 2026-10-18T06:31:59.497Z INFO 9862 --- [docgrid] [ restartedMain] o.s.m.s.b.SimpleBrokerMessageHandler : Started. +2026-10-18T15:31:59+09:00 2026-10-18T06:31:59.504Z INFO 9862 --- [docgrid] [ restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port 8080 (http) with context path '/' +2026-10-18T15:31:59+09:00 2026-10-18T06:31:59.553Z INFO 9862 --- [docgrid] [ restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port 8081 (http) +2026-10-18T15:31:59+09:00 2026-10-18T06:31:59.553Z INFO 9862 --- [docgrid] [ restartedMain] o.apache.catalina.core.StandardService : Starting service [Tomcat] +2026-10-18T15:31:59+09:00 2026-10-18T06:31:59.553Z INFO 9862 --- [docgrid] [ restartedMain] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.55] +2026-10-18T15:31:59+09:00 2026-10-18T06:31:59.565Z INFO 9862 --- [docgrid] [ restartedMain] o.a.c.c.C.[Tomcat-1].[localhost].[/] : Initializing Spring embedded WebApplicationContext +2026-10-18T15:31:59+09:00 2026-10-18T06:31:59.566Z INFO 9862 --- [docgrid] [ restartedMain] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 59 ms +2026-10-18T15:31:59+09:00 Standard Commons Logging discovery in action with spring-jcl: please remove commons-logging.jar from classpath in order to avoid potential conflicts +2026-10-18T15:31:59+09:00 2026-10-18T06:31:59.573Z INFO 9862 --- [docgrid] [ restartedMain] o.s.b.a.e.web.EndpointLinksResolver : Exposing 2 endpoints beneath base path '/actuator' +2026-10-18T15:31:59+09:00 2026-10-18T06:31:59.594Z INFO 9862 --- [docgrid] [ restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port 8081 (http) with context path '/' +2026-10-18T15:31:59+09:00 2026-10-18T06:31:59.607Z INFO 9862 --- [docgrid] [ restartedMain] c.opensource.docgrid.DocgridApplication : Started DocgridApplication in 6.346 seconds (process running for 6.624) +2026-10-18T15:31:59+09:00 2026-10-18T06:31:59.777Z INFO 9862 --- [docgrid] [ restartedMain] c.o.d.d.w.l.WorkerLifecycleManager : 인덱싱 Worker를 등록했습니다. workerId=1, workerName=indexing-worker, instanceId=744a5369-4a3b-49e6-997c-132fce71a40b +2026-10-18T15:32:00+09:00 2026-10-18T06:31:59.927Z INFO 9862 --- [docgrid] [nio-8081-exec-1] o.a.c.c.C.[Tomcat-1].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServletRegistration' +2026-10-18T15:32:00+09:00 2026-10-18T06:31:59.927Z INFO 9862 --- [docgrid] [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServletRegistration' +2026-10-18T15:32:00+09:00 2026-10-18T06:31:59.927Z INFO 9862 --- [docgrid] [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 0 ms +2026-10-18T15:32:03+09:00 2026-10-18T06:32:03.022Z INFO 9862 --- [docgrid] [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' +2026-10-18T15:32:03+09:00 2026-10-18T06:32:03.022Z INFO 9862 --- [docgrid] [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' +2026-10-18T15:32:03+09:00 2026-10-18T06:32:03.024Z INFO 9862 --- [docgrid] [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 2 ms +2026-10-18T15:32:29+09:00 2026-10-18T06:32:29.614Z INFO 9862 --- [docgrid] [MessageBroker-4] c.o.d.d.w.l.WorkerLeaseRecoveryScheduler : Worker Lease 복구 주기를 완료했습니다. deadWorkers=0, candidates=0, recovered=0, skipped=0, failed=0 +2026-10-18T15:32:59+09:00 2026-10-18T06:32:59.476Z INFO 9862 --- [docgrid] [MessageBroker-4] o.s.w.s.c.WebSocketMessageBrokerStats : WebSocketSession[0 current WS(0)-HttpStream(0)-HttpPoll(0), 0 total, 0 closed abnormally (0 connect failure, 0 send limit, 0 transport error)], stompSubProtocol[processed CONNECT(0)-CONNECTED(0)-DISCONNECT(0)], stompBrokerRelay[null], inboundChannel[pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 0], outboundChannel[pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 0], sockJsScheduler[pool size = 4, active threads = 1, queued tasks = 12, completed tasks = 418] +2026-10-18T15:32:59+09:00 2026-10-18T06:32:59.620Z INFO 9862 --- [docgrid] [MessageBroker-2] c.o.d.d.w.l.WorkerLeaseRecoveryScheduler : Worker Lease 복구 주기를 완료했습니다. deadWorkers=0, candidates=0, recovered=0, skipped=0, failed=0 +2026-10-18T15:33:29+09:00 2026-10-18T06:33:29.623Z INFO 9862 --- [docgrid] [MessageBroker-4] c.o.d.d.w.l.WorkerLeaseRecoveryScheduler : Worker Lease 복구 주기를 완료했습니다. deadWorkers=0, candidates=0, recovered=0, skipped=0, failed=0 +2026-10-18T15:33:59+09:00 2026-10-18T06:33:59.626Z INFO 9862 --- [docgrid] [MessageBroker-4] c.o.d.d.w.l.WorkerLeaseRecoveryScheduler : Worker Lease 복구 주기를 완료했습니다. deadWorkers=0, candidates=0, recovered=0, skipped=0, failed=0 diff --git a/docs/test-results/demo-fresh-20261018/runs/39104137120-1/runtime/73ca94307e5f46518da77b6017cb991f/events.jsonl b/docs/test-results/demo-fresh-20261018/runs/39104137120-1/runtime/73ca94307e5f46518da77b6017cb991f/events.jsonl new file mode 100644 index 00000000..94a463d6 --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39104137120-1/runtime/73ca94307e5f46518da77b6017cb991f/events.jsonl @@ -0,0 +1 @@ +{"timestamp": "2026-10-18T15:28:48+09:00", "message": "[시작] 로컬 시연 세션 73ca94307e5f46518da77b6017cb991f · 범위 search"} diff --git a/docs/test-results/demo-fresh-20261018/runs/39104137120-1/runtime/73ca94307e5f46518da77b6017cb991f/frontend.log b/docs/test-results/demo-fresh-20261018/runs/39104137120-1/runtime/73ca94307e5f46518da77b6017cb991f/frontend.log new file mode 100644 index 00000000..a6cc0b3c --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39104137120-1/runtime/73ca94307e5f46518da77b6017cb991f/frontend.log @@ -0,0 +1,10 @@ +2026-10-18T15:32:00+09:00 +2026-10-18T15:32:00+09:00 > <이메일 생략> dev +2026-10-18T15:32:00+09:00 > WRANGLER_LOG_PATH=.wrangler/wrangler.log vinext dev +2026-10-18T15:32:00+09:00 +2026-10-18T15:32:00+09:00 +2026-10-18T15:32:00+09:00 vinext dev (Vite 8.0.13) +2026-10-18T15:32:00+09:00 +2026-10-18T15:32:01+09:00 Using secrets defined in .env.local +2026-10-18T15:32:02+09:00 ➜ Local: <설정된 서버> +2026-10-18T15:32:02+09:00 ➜ Debug: <설정된 서버> diff --git a/docs/test-results/demo-fresh-20261018/runs/39104137120-1/runtime/73ca94307e5f46518da77b6017cb991f/install.log b/docs/test-results/demo-fresh-20261018/runs/39104137120-1/runtime/73ca94307e5f46518da77b6017cb991f/install.log new file mode 100644 index 00000000..d9176638 --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39104137120-1/runtime/73ca94307e5f46518da77b6017cb991f/install.log @@ -0,0 +1,17 @@ +2026-10-18T15:28:51+09:00 npm warn deprecated @esbuild-kit/<이메일 생략>: Merged into tsx: <설정된 서버> +2026-10-18T15:28:51+09:00 npm warn deprecated @esbuild-kit/<이메일 생략>: Merged into tsx: <설정된 서버> +2026-10-18T15:29:02+09:00 +2026-10-18T15:29:02+09:00 added 502 packages, and audited 503 packages in 13s +2026-10-18T15:29:02+09:00 +2026-10-18T15:29:02+09:00 156 packages are looking for funding +2026-10-18T15:29:02+09:00 run `npm fund` for details +2026-10-18T15:29:02+09:00 +2026-10-18T15:29:02+09:00 30 vulnerabilities (1 low, 6 moderate, 23 high) +2026-10-18T15:29:02+09:00 +2026-10-18T15:29:02+09:00 To address issues that do not require attention, run: +2026-10-18T15:29:02+09:00 npm audit fix +2026-10-18T15:29:02+09:00 +2026-10-18T15:29:02+09:00 To address all issues (including breaking changes), run: +2026-10-18T15:29:02+09:00 npm audit fix --force +2026-10-18T15:29:02+09:00 +2026-10-18T15:29:02+09:00 Run `npm audit` for details. diff --git a/docs/test-results/demo-fresh-20261018/runs/39104137120-1/runtime/73ca94307e5f46518da77b6017cb991f/services.log b/docs/test-results/demo-fresh-20261018/runs/39104137120-1/runtime/73ca94307e5f46518da77b6017cb991f/services.log new file mode 100644 index 00000000..48075cfa --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39104137120-1/runtime/73ca94307e5f46518da77b6017cb991f/services.log @@ -0,0 +1,599 @@ +2026-10-18T15:29:03+09:00 [local-services] 로컬 PostgreSQL·Valkey·Embedding Provider를 시작합니다. +2026-10-18T15:29:03+09:00 postgres Pulling +2026-10-18T15:29:03+09:00 valkey Pulling +2026-10-18T15:29:04+09:00 e2de96513ba9 Already exists +2026-10-18T15:29:04+09:00 d78be5cc1e53 Pulling fs layer +2026-10-18T15:29:04+09:00 fe2c7735354a Pulling fs layer +2026-10-18T15:29:04+09:00 95121e5a56c0 Pulling fs layer +2026-10-18T15:29:04+09:00 d9f591c70342 Pulling fs layer +2026-10-18T15:29:04+09:00 4f4fb700ef54 Pulling fs layer +2026-10-18T15:29:04+09:00 4ed485d78f72 Pulling fs layer +2026-10-18T15:29:04+09:00 d9f591c70342 Waiting +2026-10-18T15:29:04+09:00 4f4fb700ef54 Waiting +2026-10-18T15:29:04+09:00 4ed485d78f72 Waiting +2026-10-18T15:29:04+09:00 4831516dd0cb Pulling fs layer +2026-10-18T15:29:04+09:00 9f4a0348ad2e Pulling fs layer +2026-10-18T15:29:04+09:00 6b6aac9d7476 Pulling fs layer +2026-10-18T15:29:04+09:00 d8a310896f84 Pulling fs layer +2026-10-18T15:29:04+09:00 99bb4ce30ad3 Pulling fs layer +2026-10-18T15:29:04+09:00 31b6f2223c4b Pulling fs layer +2026-10-18T15:29:04+09:00 9da35c01411f Pulling fs layer +2026-10-18T15:29:04+09:00 a6809e067bc1 Pulling fs layer +2026-10-18T15:29:04+09:00 10643155f463 Pulling fs layer +2026-10-18T15:29:04+09:00 a7ef49b2a615 Pulling fs layer +2026-10-18T15:29:04+09:00 29d37472e7c3 Pulling fs layer +2026-10-18T15:29:04+09:00 4d2363af1825 Pulling fs layer +2026-10-18T15:29:04+09:00 4a14fbbe260a Pulling fs layer +2026-10-18T15:29:04+09:00 8cced4a98c7e Pulling fs layer +2026-10-18T15:29:04+09:00 4909bfb5f5ed Pulling fs layer +2026-10-18T15:29:04+09:00 3e1ddef0ec36 Pulling fs layer +2026-10-18T15:29:04+09:00 4831516dd0cb Waiting +2026-10-18T15:29:04+09:00 9f4a0348ad2e Waiting +2026-10-18T15:29:04+09:00 6b6aac9d7476 Waiting +2026-10-18T15:29:04+09:00 d8a310896f84 Waiting +2026-10-18T15:29:04+09:00 99bb4ce30ad3 Waiting +2026-10-18T15:29:04+09:00 31b6f2223c4b Waiting +2026-10-18T15:29:04+09:00 9da35c01411f Waiting +2026-10-18T15:29:04+09:00 a6809e067bc1 Waiting +2026-10-18T15:29:04+09:00 10643155f463 Waiting +2026-10-18T15:29:04+09:00 a7ef49b2a615 Waiting +2026-10-18T15:29:04+09:00 29d37472e7c3 Waiting +2026-10-18T15:29:04+09:00 4d2363af1825 Waiting +2026-10-18T15:29:04+09:00 4a14fbbe260a Waiting +2026-10-18T15:29:04+09:00 8cced4a98c7e Waiting +2026-10-18T15:29:04+09:00 4909bfb5f5ed Waiting +2026-10-18T15:29:04+09:00 3e1ddef0ec36 Waiting +2026-10-18T15:29:04+09:00 d78be5cc1e53 Downloading [==================================================>] 951B/951B +2026-10-18T15:29:04+09:00 d78be5cc1e53 Verifying Checksum +2026-10-18T15:29:04+09:00 d78be5cc1e53 Download complete +2026-10-18T15:29:04+09:00 d78be5cc1e53 Extracting [==================================================>] 951B/951B +2026-10-18T15:29:04+09:00 d78be5cc1e53 Extracting [==================================================>] 951B/951B +2026-10-18T15:29:04+09:00 95121e5a56c0 Downloading [> ] 146.9kB/14.29MB +2026-10-18T15:29:04+09:00 fe2c7735354a Downloading [=> ] 15.79kB/666.5kB +2026-10-18T15:29:04+09:00 fe2c7735354a Download complete +2026-10-18T15:29:04+09:00 95121e5a56c0 Downloading [==================> ] 5.308MB/14.29MB +2026-10-18T15:29:04+09:00 95121e5a56c0 Verifying Checksum +2026-10-18T15:29:04+09:00 95121e5a56c0 Download complete +2026-10-18T15:29:04+09:00 d9f591c70342 Downloading [==================================================>] 140B/140B +2026-10-18T15:29:04+09:00 d9f591c70342 Verifying Checksum +2026-10-18T15:29:04+09:00 d9f591c70342 Download complete +2026-10-18T15:29:04+09:00 4f4fb700ef54 Downloading [==================================================>] 32B/32B +2026-10-18T15:29:04+09:00 4f4fb700ef54 Download complete +2026-10-18T15:29:04+09:00 4ed485d78f72 Downloading [==================================================>] 668B/668B +2026-10-18T15:29:04+09:00 4ed485d78f72 Verifying Checksum +2026-10-18T15:29:04+09:00 4ed485d78f72 Download complete +2026-10-18T15:29:04+09:00 4831516dd0cb Downloading [> ] 294.3kB/28.23MB +2026-10-18T15:29:04+09:00 4831516dd0cb Downloading [=========================> ] 14.45MB/28.23MB +2026-10-18T15:29:04+09:00 9f4a0348ad2e Downloading [==================================================>] 1.169kB/1.169kB +2026-10-18T15:29:04+09:00 9f4a0348ad2e Verifying Checksum +2026-10-18T15:29:04+09:00 9f4a0348ad2e Download complete +2026-10-18T15:29:04+09:00 6b6aac9d7476 Downloading [> ] 48.51kB/4.534MB +2026-10-18T15:29:04+09:00 4831516dd0cb Verifying Checksum +2026-10-18T15:29:04+09:00 4831516dd0cb Download complete +2026-10-18T15:29:04+09:00 d8a310896f84 Downloading [> ] 16.38kB/1.25MB +2026-10-18T15:29:04+09:00 6b6aac9d7476 Downloading [======> ] 589.2kB/4.534MB +2026-10-18T15:29:04+09:00 99bb4ce30ad3 Downloading [> ] 84.7kB/8.066MB +2026-10-18T15:29:04+09:00 4831516dd0cb Extracting [> ] 294.9kB/28.23MB +2026-10-18T15:29:04+09:00 d8a310896f84 Verifying Checksum +2026-10-18T15:29:04+09:00 d8a310896f84 Download complete +2026-10-18T15:29:04+09:00 6b6aac9d7476 Verifying Checksum +2026-10-18T15:29:04+09:00 6b6aac9d7476 Download complete +2026-10-18T15:29:04+09:00 99bb4ce30ad3 Downloading [============================================> ] 7.216MB/8.066MB +2026-10-18T15:29:04+09:00 99bb4ce30ad3 Verifying Checksum +2026-10-18T15:29:04+09:00 99bb4ce30ad3 Download complete +2026-10-18T15:29:04+09:00 4831516dd0cb Extracting [==============> ] 7.963MB/28.23MB +2026-10-18T15:29:05+09:00 31b6f2223c4b Downloading [> ] 15.74kB/1.196MB +2026-10-18T15:29:05+09:00 4831516dd0cb Extracting [======================> ] 12.98MB/28.23MB +2026-10-18T15:29:05+09:00 9da35c01411f Downloading [==================================================>] 116B/116B +2026-10-18T15:29:05+09:00 9da35c01411f Verifying Checksum +2026-10-18T15:29:05+09:00 9da35c01411f Download complete +2026-10-18T15:29:05+09:00 a6809e067bc1 Downloading [==================================================>] 3.141kB/3.141kB +2026-10-18T15:29:05+09:00 a6809e067bc1 Verifying Checksum +2026-10-18T15:29:05+09:00 a6809e067bc1 Download complete +2026-10-18T15:29:05+09:00 31b6f2223c4b Verifying Checksum +2026-10-18T15:29:05+09:00 31b6f2223c4b Download complete +2026-10-18T15:29:05+09:00 4831516dd0cb Extracting [==================================> ] 19.76MB/28.23MB +2026-10-18T15:29:05+09:00 a7ef49b2a615 Downloading [================> ] 3.499kB/10.3kB +2026-10-18T15:29:05+09:00 a7ef49b2a615 Downloading [==================================================>] 10.3kB/10.3kB +2026-10-18T15:29:05+09:00 a7ef49b2a615 Verifying Checksum +2026-10-18T15:29:05+09:00 a7ef49b2a615 Download complete +2026-10-18T15:29:05+09:00 10643155f463 Downloading [> ] 540.4kB/112.8MB +2026-10-18T15:29:05+09:00 4831516dd0cb Extracting [==========================================> ] 23.89MB/28.23MB +2026-10-18T15:29:05+09:00 29d37472e7c3 Download complete +2026-10-18T15:29:05+09:00 10643155f463 Downloading [=====> ] 11.34MB/112.8MB +2026-10-18T15:29:05+09:00 4d2363af1825 Downloading [==================================================>] 168B/168B +2026-10-18T15:29:05+09:00 4d2363af1825 Verifying Checksum +2026-10-18T15:29:05+09:00 4d2363af1825 Download complete +2026-10-18T15:29:05+09:00 4831516dd0cb Extracting [================================================> ] 27.13MB/28.23MB +2026-10-18T15:29:05+09:00 4a14fbbe260a Downloading [=============================> ] 3.5kB/5.84kB +2026-10-18T15:29:05+09:00 4a14fbbe260a Downloading [==================================================>] 5.84kB/5.84kB +2026-10-18T15:29:05+09:00 4a14fbbe260a Verifying Checksum +2026-10-18T15:29:05+09:00 4a14fbbe260a Download complete +2026-10-18T15:29:05+09:00 10643155f463 Downloading [======================> ] 50.24MB/112.8MB +2026-10-18T15:29:05+09:00 8cced4a98c7e Downloading [==================================================>] 186B/186B +2026-10-18T15:29:05+09:00 8cced4a98c7e Verifying Checksum +2026-10-18T15:29:05+09:00 8cced4a98c7e Download complete +2026-10-18T15:29:05+09:00 10643155f463 Downloading [=========================================> ] 92.91MB/112.8MB +2026-10-18T15:29:05+09:00 4831516dd0cb Extracting [================================================> ] 27.43MB/28.23MB +2026-10-18T15:29:05+09:00 4909bfb5f5ed Downloading [======> ] 16.38kB/123.1kB +2026-10-18T15:29:05+09:00 10643155f463 Verifying Checksum +2026-10-18T15:29:05+09:00 10643155f463 Download complete +2026-10-18T15:29:05+09:00 4909bfb5f5ed Downloading [==================================================>] 123.1kB/123.1kB +2026-10-18T15:29:05+09:00 4909bfb5f5ed Verifying Checksum +2026-10-18T15:29:05+09:00 4909bfb5f5ed Download complete +2026-10-18T15:29:05+09:00 4831516dd0cb Extracting [==================================================>] 28.23MB/28.23MB +2026-10-18T15:29:05+09:00 3e1ddef0ec36 Downloading [> ] 16.38kB/1.451MB +2026-10-18T15:29:05+09:00 3e1ddef0ec36 Downloading [==================================================>] 1.451MB/1.451MB +2026-10-18T15:29:05+09:00 3e1ddef0ec36 Verifying Checksum +2026-10-18T15:29:05+09:00 3e1ddef0ec36 Download complete +2026-10-18T15:29:06+09:00 4831516dd0cb Pull complete +2026-10-18T15:29:07+09:00 9f4a0348ad2e Extracting [==================================================>] 1.169kB/1.169kB +2026-10-18T15:29:07+09:00 9f4a0348ad2e Extracting [==================================================>] 1.169kB/1.169kB +2026-10-18T15:29:09+09:00 d78be5cc1e53 Pull complete +2026-10-18T15:29:09+09:00 fe2c7735354a Extracting [==> ] 32.77kB/666.5kB +2026-10-18T15:29:09+09:00 fe2c7735354a Extracting [==================================================>] 666.5kB/666.5kB +2026-10-18T15:29:09+09:00 9f4a0348ad2e Pull complete +2026-10-18T15:29:09+09:00 6b6aac9d7476 Extracting [> ] 65.54kB/4.534MB +2026-10-18T15:29:09+09:00 fe2c7735354a Extracting [==================================================>] 666.5kB/666.5kB +2026-10-18T15:29:09+09:00 6b6aac9d7476 Extracting [==================================================>] 4.534MB/4.534MB +2026-10-18T15:29:09+09:00 fe2c7735354a Pull complete +2026-10-18T15:29:09+09:00 6b6aac9d7476 Pull complete +2026-10-18T15:29:09+09:00 d8a310896f84 Extracting [=> ] 32.77kB/1.25MB +2026-10-18T15:29:09+09:00 95121e5a56c0 Extracting [> ] 163.8kB/14.29MB +2026-10-18T15:29:09+09:00 d8a310896f84 Extracting [==================================================>] 1.25MB/1.25MB +2026-10-18T15:29:09+09:00 d8a310896f84 Pull complete +2026-10-18T15:29:09+09:00 99bb4ce30ad3 Extracting [> ] 98.3kB/8.066MB +2026-10-18T15:29:09+09:00 95121e5a56c0 Extracting [====================> ] 5.898MB/14.29MB +2026-10-18T15:29:09+09:00 99bb4ce30ad3 Extracting [=======================> ] 3.834MB/8.066MB +2026-10-18T15:29:09+09:00 95121e5a56c0 Extracting [==================================================>] 14.29MB/14.29MB +2026-10-18T15:29:09+09:00 99bb4ce30ad3 Extracting [======================================> ] 6.291MB/8.066MB +2026-10-18T15:29:09+09:00 99bb4ce30ad3 Extracting [==================================================>] 8.066MB/8.066MB +2026-10-18T15:29:09+09:00 95121e5a56c0 Pull complete +2026-10-18T15:29:09+09:00 d9f591c70342 Extracting [==================================================>] 140B/140B +2026-10-18T15:29:09+09:00 d9f591c70342 Extracting [==================================================>] 140B/140B +2026-10-18T15:29:09+09:00 99bb4ce30ad3 Pull complete +2026-10-18T15:29:09+09:00 d9f591c70342 Pull complete +2026-10-18T15:29:09+09:00 31b6f2223c4b Extracting [=> ] 32.77kB/1.196MB +2026-10-18T15:29:09+09:00 4f4fb700ef54 Extracting [==================================================>] 32B/32B +2026-10-18T15:29:09+09:00 4f4fb700ef54 Extracting [==================================================>] 32B/32B +2026-10-18T15:29:09+09:00 4f4fb700ef54 Pull complete +2026-10-18T15:29:09+09:00 4ed485d78f72 Extracting [==================================================>] 668B/668B +2026-10-18T15:29:09+09:00 4ed485d78f72 Extracting [==================================================>] 668B/668B +2026-10-18T15:29:09+09:00 4ed485d78f72 Pull complete +2026-10-18T15:29:09+09:00 valkey Pulled +2026-10-18T15:29:09+09:00 31b6f2223c4b Extracting [==================================================>] 1.196MB/1.196MB +2026-10-18T15:29:09+09:00 31b6f2223c4b Extracting [==================================================>] 1.196MB/1.196MB +2026-10-18T15:29:09+09:00 31b6f2223c4b Pull complete +2026-10-18T15:29:09+09:00 9da35c01411f Extracting [==================================================>] 116B/116B +2026-10-18T15:29:09+09:00 9da35c01411f Extracting [==================================================>] 116B/116B +2026-10-18T15:29:09+09:00 9da35c01411f Pull complete +2026-10-18T15:29:09+09:00 a6809e067bc1 Extracting [==================================================>] 3.141kB/3.141kB +2026-10-18T15:29:09+09:00 a6809e067bc1 Extracting [==================================================>] 3.141kB/3.141kB +2026-10-18T15:29:09+09:00 a6809e067bc1 Pull complete +2026-10-18T15:29:09+09:00 10643155f463 Extracting [> ] 557.1kB/112.8MB +2026-10-18T15:29:10+09:00 10643155f463 Extracting [===> ] 8.913MB/112.8MB +2026-10-18T15:29:10+09:00 10643155f463 Extracting [======> ] 15.6MB/112.8MB +2026-10-18T15:29:10+09:00 10643155f463 Extracting [==========> ] 23.4MB/112.8MB +2026-10-18T15:29:10+09:00 10643155f463 Extracting [===============> ] 35.09MB/112.8MB +2026-10-18T15:29:10+09:00 10643155f463 Extracting [====================> ] 47.35MB/112.8MB +2026-10-18T15:29:10+09:00 10643155f463 Extracting [========================> ] 56.26MB/112.8MB +2026-10-18T15:29:10+09:00 10643155f463 Extracting [=============================> ] 66.85MB/112.8MB +2026-10-18T15:29:10+09:00 10643155f463 Extracting [===================================> ] 80.22MB/112.8MB +2026-10-18T15:29:10+09:00 10643155f463 Extracting [========================================> ] 91.91MB/112.8MB +2026-10-18T15:29:10+09:00 10643155f463 Extracting [===========================================> ] 98.04MB/112.8MB +2026-10-18T15:29:11+09:00 10643155f463 Extracting [=============================================> ] 103.1MB/112.8MB +2026-10-18T15:29:11+09:00 10643155f463 Extracting [===============================================> ] 107.5MB/112.8MB +2026-10-18T15:29:11+09:00 10643155f463 Extracting [================================================> ] 110.3MB/112.8MB +2026-10-18T15:29:11+09:00 10643155f463 Extracting [=================================================> ] 111.4MB/112.8MB +2026-10-18T15:29:11+09:00 10643155f463 Extracting [==================================================>] 112.8MB/112.8MB +2026-10-18T15:29:13+09:00 10643155f463 Pull complete +2026-10-18T15:29:13+09:00 a7ef49b2a615 Extracting [==================================================>] 10.3kB/10.3kB +2026-10-18T15:29:13+09:00 a7ef49b2a615 Extracting [==================================================>] 10.3kB/10.3kB +2026-10-18T15:29:13+09:00 a7ef49b2a615 Pull complete +2026-10-18T15:29:13+09:00 29d37472e7c3 Extracting [==================================================>] 128B/128B +2026-10-18T15:29:13+09:00 29d37472e7c3 Extracting [==================================================>] 128B/128B +2026-10-18T15:29:13+09:00 29d37472e7c3 Pull complete +2026-10-18T15:29:13+09:00 4d2363af1825 Extracting [==================================================>] 168B/168B +2026-10-18T15:29:13+09:00 4d2363af1825 Extracting [==================================================>] 168B/168B +2026-10-18T15:29:13+09:00 4d2363af1825 Pull complete +2026-10-18T15:29:13+09:00 4a14fbbe260a Extracting [==================================================>] 5.84kB/5.84kB +2026-10-18T15:29:13+09:00 4a14fbbe260a Extracting [==================================================>] 5.84kB/5.84kB +2026-10-18T15:29:13+09:00 4a14fbbe260a Pull complete +2026-10-18T15:29:13+09:00 8cced4a98c7e Extracting [==================================================>] 186B/186B +2026-10-18T15:29:13+09:00 8cced4a98c7e Extracting [==================================================>] 186B/186B +2026-10-18T15:29:13+09:00 8cced4a98c7e Pull complete +2026-10-18T15:29:13+09:00 4909bfb5f5ed Extracting [=============> ] 32.77kB/123.1kB +2026-10-18T15:29:13+09:00 4909bfb5f5ed Extracting [==================================================>] 123.1kB/123.1kB +2026-10-18T15:29:13+09:00 4909bfb5f5ed Pull complete +2026-10-18T15:29:13+09:00 3e1ddef0ec36 Extracting [=> ] 32.77kB/1.451MB +2026-10-18T15:29:13+09:00 3e1ddef0ec36 Extracting [==================================================>] 1.451MB/1.451MB +2026-10-18T15:29:13+09:00 3e1ddef0ec36 Pull complete +2026-10-18T15:29:13+09:00 postgres Pulled +2026-10-18T15:29:13+09:00 #1 [internal] load local bake definitions +2026-10-18T15:29:13+09:00 #1 reading from stdin 449B done +2026-10-18T15:29:13+09:00 #1 DONE 0.0s +2026-10-18T15:29:13+09:00 +2026-10-18T15:29:13+09:00 #2 [internal] load build definition from Dockerfile +2026-10-18T15:29:13+09:00 #2 transferring dockerfile: 500B done +2026-10-18T15:29:13+09:00 #2 DONE 0.0s +2026-10-18T15:29:13+09:00 +2026-10-18T15:29:13+09:00 #3 [auth] library/python:pull token for registry-1.docker.io +2026-10-18T15:29:13+09:00 #3 DONE 0.0s +2026-10-18T15:29:13+09:00 +2026-10-18T15:29:13+09:00 #4 [internal] load metadata for docker.io/library/python:3.11-slim +2026-10-18T15:29:13+09:00 #4 DONE 0.6s +2026-10-18T15:29:14+09:00 +2026-10-18T15:29:14+09:00 #5 [internal] load .dockerignore +2026-10-18T15:29:14+09:00 #5 transferring context: 2B done +2026-10-18T15:29:14+09:00 #5 DONE 0.0s +2026-10-18T15:29:14+09:00 +2026-10-18T15:29:14+09:00 #6 [internal] load build context +2026-10-18T15:29:14+09:00 #6 transferring context: 16.83kB done +2026-10-18T15:29:14+09:00 #6 DONE 0.0s +2026-10-18T15:29:14+09:00 +2026-10-18T15:29:14+09:00 #7 [1/8] FROM docker.io/library/python:3.11-slim@sha256:e88e9763f943ec1834f992a4b51e0f24500486803e8bc534e5767af9ea65f6ce +2026-10-18T15:29:14+09:00 #7 resolve docker.io/library/python:3.11-slim@sha256:e88e9763f943ec1834f992a4b51e0f24500486803e8bc534e5767af9ea65f6ce done +2026-10-18T15:29:14+09:00 #7 sha256:759a7f30c31818dda4c97b407b24d93da479c306568d185ced927e1a749164f1 0B / 14.46MB 0.1s +2026-10-18T15:29:14+09:00 #7 sha256:e88e9763f943ec1834f992a4b51e0f24500486803e8bc534e5767af9ea65f6ce 10.37kB / 10.37kB done +2026-10-18T15:29:14+09:00 #7 sha256:e529028263dbe6910a2d96f7d2b8f5266385e917fd45d286ef166977c094a51e 1.75kB / 1.75kB done +2026-10-18T15:29:14+09:00 #7 sha256:541096ae9b05d3b850341b78790e2ed31e94d5aa0ea086933c6ff0c09ffa2e63 5.49kB / 5.49kB done +2026-10-18T15:29:14+09:00 #7 sha256:ecc510c1e359bdc007b39802570bb7e4dec7d6ebccf357c3201a74299113e05e 0B / 29.84MB 0.1s +2026-10-18T15:29:14+09:00 #7 sha256:0f752a1982d6f819fc2c9e78ac1514c63f2f2e1dec7885ffd4cb6809ba4a26ca 0B / 1.29MB 0.1s +2026-10-18T15:29:14+09:00 #7 sha256:ecc510c1e359bdc007b39802570bb7e4dec7d6ebccf357c3201a74299113e05e 10.49MB / 29.84MB 0.2s +2026-10-18T15:29:14+09:00 #7 sha256:0f752a1982d6f819fc2c9e78ac1514c63f2f2e1dec7885ffd4cb6809ba4a26ca 1.29MB / 1.29MB 0.2s done +2026-10-18T15:29:14+09:00 #7 sha256:496c1a902b3a93cea3e54b90b79dbcaa0e58ad90c3fe9dd0a43c9557dc47f17d 0B / 250B 0.2s +2026-10-18T15:29:14+09:00 #7 sha256:759a7f30c31818dda4c97b407b24d93da479c306568d185ced927e1a749164f1 14.46MB / 14.46MB 0.4s +2026-10-18T15:29:14+09:00 #7 sha256:ecc510c1e359bdc007b39802570bb7e4dec7d6ebccf357c3201a74299113e05e 29.84MB / 29.84MB 0.4s +2026-10-18T15:29:14+09:00 #7 sha256:496c1a902b3a93cea3e54b90b79dbcaa0e58ad90c3fe9dd0a43c9557dc47f17d 250B / 250B 0.2s done +2026-10-18T15:29:14+09:00 #7 sha256:759a7f30c31818dda4c97b407b24d93da479c306568d185ced927e1a749164f1 14.46MB / 14.46MB 0.4s done +2026-10-18T15:29:14+09:00 #7 sha256:ecc510c1e359bdc007b39802570bb7e4dec7d6ebccf357c3201a74299113e05e 29.84MB / 29.84MB 0.4s done +2026-10-18T15:29:14+09:00 #7 extracting sha256:ecc510c1e359bdc007b39802570bb7e4dec7d6ebccf357c3201a74299113e05e 0.1s +2026-10-18T15:29:15+09:00 #7 extracting sha256:ecc510c1e359bdc007b39802570bb7e4dec7d6ebccf357c3201a74299113e05e 0.6s done +2026-10-18T15:29:15+09:00 #7 extracting sha256:0f752a1982d6f819fc2c9e78ac1514c63f2f2e1dec7885ffd4cb6809ba4a26ca 0.1s done +2026-10-18T15:29:15+09:00 #7 extracting sha256:759a7f30c31818dda4c97b407b24d93da479c306568d185ced927e1a749164f1 +2026-10-18T15:29:16+09:00 #7 extracting sha256:759a7f30c31818dda4c97b407b24d93da479c306568d185ced927e1a749164f1 0.4s done +2026-10-18T15:29:16+09:00 #7 extracting sha256:496c1a902b3a93cea3e54b90b79dbcaa0e58ad90c3fe9dd0a43c9557dc47f17d +2026-10-18T15:29:16+09:00 #7 extracting sha256:496c1a902b3a93cea3e54b90b79dbcaa0e58ad90c3fe9dd0a43c9557dc47f17d done +2026-10-18T15:29:16+09:00 #7 DONE 2.4s +2026-10-18T15:29:16+09:00 +2026-10-18T15:29:16+09:00 #8 [2/8] WORKDIR /app +2026-10-18T15:29:16+09:00 #8 DONE 0.0s +2026-10-18T15:29:16+09:00 +2026-10-18T15:29:16+09:00 #9 [3/8] COPY requirements.txt . +2026-10-18T15:29:16+09:00 #9 DONE 0.0s +2026-10-18T15:29:16+09:00 +2026-10-18T15:29:16+09:00 #10 [4/8] RUN pip install --no-cache-dir -r requirements.txt +2026-10-18T15:29:17+09:00 #10 1.075 Looking in indexes: <설정된 서버> <설정된 서버> +2026-10-18T15:29:17+09:00 #10 1.075 Ignoring torch: markers 'sys_platform != "linux" or platform_machine != "x86_64"' don't match your environment +2026-10-18T15:29:17+09:00 #10 1.414 Collecting fastapi==0.115.0 (from -r requirements.txt (line 4)) +2026-10-18T15:29:17+09:00 #10 1.475 Downloading fastapi-0.115.0-py3-none-any.whl.metadata (27 kB) +2026-10-18T15:29:17+09:00 #10 1.567 Collecting uvicorn==0.30.6 (from -r requirements.txt (line 5)) +2026-10-18T15:29:18+09:00 #10 1.584 Downloading uvicorn-0.30.6-py3-none-any.whl.metadata (6.6 kB) +2026-10-18T15:29:18+09:00 #10 1.662 Collecting FlagEmbedding==1.2.11 (from -r requirements.txt (line 6)) +2026-10-18T15:29:18+09:00 #10 1.678 Downloading FlagEmbedding-1.2.11.tar.gz (147 kB) +2026-10-18T15:29:18+09:00 #10 1.701 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 147.1/147.1 kB 6.6 MB/s eta 0:00:00 +2026-10-18T15:29:18+09:00 #10 1.716 Preparing metadata (setup.py): started +2026-10-18T15:29:18+09:00 #10 1.933 Preparing metadata (setup.py): finished with status 'done' +2026-10-18T15:29:18+09:00 #10 2.107 Collecting torch==2.4.1+cpu (from -r requirements.txt (line 9)) +2026-10-18T15:29:18+09:00 #10 2.272 Downloading <설정된 서버> (194.9 MB) +2026-10-18T15:29:19+09:00 #10 3.072 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 194.9/194.9 MB 262.3 MB/s eta 0:00:00 +2026-10-18T15:29:19+09:00 #10 3.363 Collecting transformers==4.44.2 (from -r requirements.txt (line 11)) +2026-10-18T15:29:19+09:00 #10 3.380 Downloading transformers-4.44.2-py3-none-any.whl.metadata (43 kB) +2026-10-18T15:29:19+09:00 #10 3.381 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 43.7/43.7 kB 427.6 MB/s eta 0:00:00 +2026-10-18T15:29:19+09:00 #10 3.463 Collecting peft==0.12.0 (from -r requirements.txt (line 12)) +2026-10-18T15:29:19+09:00 #10 3.479 Downloading peft-0.12.0-py3-none-any.whl.metadata (13 kB) +2026-10-18T15:29:20+09:00 #10 3.914 Collecting numpy==1.26.4 (from -r requirements.txt (line 13)) +2026-10-18T15:29:20+09:00 #10 3.930 Downloading numpy-1.26.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (61 kB) +2026-10-18T15:29:20+09:00 #10 3.932 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 61.0/61.0 kB 79.4 MB/s eta 0:00:00 +2026-10-18T15:29:20+09:00 #10 4.162 Collecting pyarrow==21.0.0 (from -r requirements.txt (line 15)) +2026-10-18T15:29:20+09:00 #10 4.179 Downloading pyarrow-21.0.0-cp311-cp311-manylinux_2_28_x86_64.whl.metadata (3.3 kB) +2026-10-18T15:29:20+09:00 #10 4.321 Collecting starlette<0.39.0,>=0.37.2 (from fastapi==0.115.0->-r requirements.txt (line 4)) +2026-10-18T15:29:20+09:00 #10 4.337 Downloading starlette-0.38.6-py3-none-any.whl.metadata (6.0 kB) +2026-10-18T15:29:20+09:00 #10 4.498 Collecting pydantic!=1.8,!=1.8.1,!=2.0.0,!=2.0.1,!=2.1.0,<3.0.0,>=1.7.4 (from fastapi==0.115.0->-r requirements.txt (line 4)) +2026-10-18T15:29:21+09:00 #10 4.515 Downloading pydantic-2.14.1-py3-none-any.whl.metadata (133 kB) +2026-10-18T15:29:21+09:00 #10 4.519 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 133.0/133.0 kB 46.6 MB/s eta 0:00:00 +2026-10-18T15:29:21+09:00 #10 4.572 Collecting typing-extensions>=4.8.0 (from fastapi==0.115.0->-r requirements.txt (line 4)) +2026-10-18T15:29:21+09:00 #10 4.588 Downloading typing_extensions-4.16.0-py3-none-any.whl.metadata (3.3 kB) +2026-10-18T15:29:21+09:00 #10 4.672 Collecting click>=7.0 (from uvicorn==0.30.6->-r requirements.txt (line 5)) +2026-10-18T15:29:21+09:00 #10 4.687 Downloading click-8.5.0-py3-none-any.whl.metadata (2.6 kB) +2026-10-18T15:29:21+09:00 #10 4.755 Collecting h11>=0.8 (from uvicorn==0.30.6->-r requirements.txt (line 5)) +2026-10-18T15:29:21+09:00 #10 4.770 Downloading h11-0.16.0-py3-none-any.whl.metadata (8.3 kB) +2026-10-18T15:29:21+09:00 #10 4.866 Collecting datasets (from FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:29:21+09:00 #10 4.883 Downloading datasets-5.1.0-py3-none-any.whl.metadata (24 kB) +2026-10-18T15:29:21+09:00 #10 4.966 Collecting accelerate>=0.20.1 (from FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:29:21+09:00 #10 4.984 Downloading accelerate-1.15.0-py3-none-any.whl.metadata (19 kB) +2026-10-18T15:29:21+09:00 #10 5.118 Collecting sentence_transformers (from FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:29:21+09:00 #10 5.135 Downloading sentence_transformers-6.1.0-py3-none-any.whl.metadata (20 kB) +2026-10-18T15:29:21+09:00 #10 5.204 Collecting filelock (from torch==2.4.1+cpu->-r requirements.txt (line 9)) +2026-10-18T15:29:21+09:00 #10 5.219 Downloading filelock-4.2.1-py3-none-any.whl.metadata (2.0 kB) +2026-10-18T15:29:21+09:00 #10 5.346 Collecting sympy (from torch==2.4.1+cpu->-r requirements.txt (line 9)) +2026-10-18T15:29:21+09:00 #10 5.363 Downloading sympy-1.14.0-py3-none-any.whl.metadata (12 kB) +2026-10-18T15:29:21+09:00 #10 5.424 Collecting networkx (from torch==2.4.1+cpu->-r requirements.txt (line 9)) +2026-10-18T15:29:21+09:00 #10 5.440 Downloading networkx-3.6.1-py3-none-any.whl.metadata (6.8 kB) +2026-10-18T15:29:21+09:00 #10 5.483 Collecting jinja2 (from torch==2.4.1+cpu->-r requirements.txt (line 9)) +2026-10-18T15:29:22+09:00 #10 5.499 Downloading <설정된 서버> (2.9 kB) +2026-10-18T15:29:22+09:00 #10 5.560 Collecting fsspec (from torch==2.4.1+cpu->-r requirements.txt (line 9)) +2026-10-18T15:29:22+09:00 #10 5.576 Downloading fsspec-2026.9.0-py3-none-any.whl.metadata (10 kB) +2026-10-18T15:29:22+09:00 #10 5.789 Collecting huggingface-hub<1.0,>=0.23.2 (from transformers==4.44.2->-r requirements.txt (line 11)) +2026-10-18T15:29:22+09:00 #10 5.805 Downloading huggingface_hub-0.36.2-py3-none-any.whl.metadata (15 kB) +2026-10-18T15:29:22+09:00 #10 5.816 Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.11/site-packages (from transformers==4.44.2->-r requirements.txt (line 11)) (26.3) +2026-10-18T15:29:22+09:00 #10 5.907 Collecting pyyaml>=5.1 (from transformers==4.44.2->-r requirements.txt (line 11)) +2026-10-18T15:29:22+09:00 #10 5.923 Downloading pyyaml-6.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (2.4 kB) +2026-10-18T15:29:22+09:00 #10 6.348 Collecting regex!=2019.12.17 (from transformers==4.44.2->-r requirements.txt (line 11)) +2026-10-18T15:29:22+09:00 #10 6.365 Downloading regex-2026.9.29-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (40 kB) +2026-10-18T15:29:22+09:00 #10 6.366 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 40.6/40.6 kB 296.5 MB/s eta 0:00:00 +2026-10-18T15:29:22+09:00 #10 6.418 Collecting requests (from transformers==4.44.2->-r requirements.txt (line 11)) +2026-10-18T15:29:22+09:00 #10 6.434 Downloading requests-2.34.2-py3-none-any.whl.metadata (4.8 kB) +2026-10-18T15:29:22+09:00 #10 6.577 Collecting safetensors>=0.4.1 (from transformers==4.44.2->-r requirements.txt (line 11)) +2026-10-18T15:29:23+09:00 #10 6.593 Downloading safetensors-0.8.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.2 kB) +2026-10-18T15:29:23+09:00 #10 6.861 Collecting tokenizers<0.20,>=0.19 (from transformers==4.44.2->-r requirements.txt (line 11)) +2026-10-18T15:29:23+09:00 #10 6.878 Downloading tokenizers-0.19.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (6.7 kB) +2026-10-18T15:29:23+09:00 #10 6.939 Collecting tqdm>=4.27 (from transformers==4.44.2->-r requirements.txt (line 11)) +2026-10-18T15:29:23+09:00 #10 6.955 Downloading tqdm-4.70.1-py3-none-any.whl.metadata (57 kB) +2026-10-18T15:29:23+09:00 #10 6.957 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 57.4/57.4 kB 330.4 MB/s eta 0:00:00 +2026-10-18T15:29:23+09:00 #10 7.078 Collecting psutil (from peft==0.12.0->-r requirements.txt (line 12)) +2026-10-18T15:29:23+09:00 #10 7.094 Downloading psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl.metadata (22 kB) +2026-10-18T15:29:23+09:00 #10 7.290 Collecting hf-xet<2.0.0,>=1.1.3 (from huggingface-hub<1.0,>=0.23.2->transformers==4.44.2->-r requirements.txt (line 11)) +2026-10-18T15:29:23+09:00 #10 7.305 Downloading hf_xet-1.7.0-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.metadata (4.9 kB) +2026-10-18T15:29:23+09:00 #10 7.422 Collecting annotated-types>=0.6.0 (from pydantic!=1.8,!=1.8.1,!=2.0.0,!=2.0.1,!=2.1.0,<3.0.0,>=1.7.4->fastapi==0.115.0->-r requirements.txt (line 4)) +2026-10-18T15:29:23+09:00 #10 7.437 Downloading annotated_types-0.8.0-py3-none-any.whl.metadata (15 kB) +2026-10-18T15:29:24+09:00 #10 8.082 Collecting pydantic-core==2.50.1 (from pydantic!=1.8,!=1.8.1,!=2.0.0,!=2.0.1,!=2.1.0,<3.0.0,>=1.7.4->fastapi==0.115.0->-r requirements.txt (line 4)) +2026-10-18T15:29:24+09:00 #10 8.097 Downloading pydantic_core-2.50.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (6.5 kB) +2026-10-18T15:29:24+09:00 #10 8.170 Collecting typing-inspection>=0.4.4 (from pydantic!=1.8,!=1.8.1,!=2.0.0,!=2.0.1,!=2.1.0,<3.0.0,>=1.7.4->fastapi==0.115.0->-r requirements.txt (line 4)) +2026-10-18T15:29:24+09:00 #10 8.186 Downloading typing_inspection-0.4.4-py3-none-any.whl.metadata (2.6 kB) +2026-10-18T15:29:24+09:00 #10 8.282 Collecting anyio<5,>=3.4.0 (from starlette<0.39.0,>=0.37.2->fastapi==0.115.0->-r requirements.txt (line 4)) +2026-10-18T15:29:24+09:00 #10 8.298 Downloading anyio-4.15.1-py3-none-any.whl.metadata (4.7 kB) +2026-10-18T15:29:24+09:00 #10 8.385 INFO: pip is looking at multiple versions of datasets to determine which version is compatible with other requirements. This could take a while. +2026-10-18T15:29:24+09:00 #10 8.389 Collecting datasets (from FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:29:24+09:00 #10 8.406 Downloading datasets-5.0.1-py3-none-any.whl.metadata (23 kB) +2026-10-18T15:29:24+09:00 #10 8.524 Collecting dill<0.4.2,>=0.3.0 (from datasets->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:29:25+09:00 #10 8.540 Downloading dill-0.4.1-py3-none-any.whl.metadata (10 kB) +2026-10-18T15:29:25+09:00 #10 8.721 Collecting pandas (from datasets->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:29:25+09:00 #10 8.737 Downloading pandas-3.0.6-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.metadata (79 kB) +2026-10-18T15:29:25+09:00 #10 8.739 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 79.5/79.5 kB 131.0 MB/s eta 0:00:00 +2026-10-18T15:29:25+09:00 #10 8.827 Collecting httpx<1.0.0 (from datasets->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:29:25+09:00 #10 8.843 Downloading httpx-0.28.1-py3-none-any.whl.metadata (7.1 kB) +2026-10-18T15:29:25+09:00 #10 9.190 Collecting xxhash (from datasets->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:29:25+09:00 #10 9.205 Downloading xxhash-4.0.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (17 kB) +2026-10-18T15:29:25+09:00 #10 9.287 Collecting multiprocess<0.70.20 (from datasets->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:29:25+09:00 #10 9.304 Downloading multiprocess-0.70.19-py311-none-any.whl.metadata (7.5 kB) +2026-10-18T15:29:25+09:00 #10 9.318 Collecting fsspec (from torch==2.4.1+cpu->-r requirements.txt (line 9)) +2026-10-18T15:29:25+09:00 #10 9.335 Downloading fsspec-2026.6.0-py3-none-any.whl.metadata (10 kB) +2026-10-18T15:29:25+09:00 #10 9.509 Collecting charset_normalizer<4,>=2 (from requests->transformers==4.44.2->-r requirements.txt (line 11)) +2026-10-18T15:29:26+09:00 #10 9.525 Downloading charset_normalizer-3.5.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (46 kB) +2026-10-18T15:29:26+09:00 #10 9.527 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 46.4/46.4 kB 397.8 MB/s eta 0:00:00 +2026-10-18T15:29:26+09:00 #10 9.572 Collecting idna<4,>=2.5 (from requests->transformers==4.44.2->-r requirements.txt (line 11)) +2026-10-18T15:29:26+09:00 #10 9.588 Downloading idna-3.20-py3-none-any.whl.metadata (7.2 kB) +2026-10-18T15:29:26+09:00 #10 9.641 Collecting urllib3<3,>=1.26 (from requests->transformers==4.44.2->-r requirements.txt (line 11)) +2026-10-18T15:29:26+09:00 #10 9.657 Downloading urllib3-2.8.0-py3-none-any.whl.metadata (7.4 kB) +2026-10-18T15:29:26+09:00 #10 9.703 Collecting certifi>=2023.5.7 (from requests->transformers==4.44.2->-r requirements.txt (line 11)) +2026-10-18T15:29:26+09:00 #10 9.719 Downloading certifi-2026.7.22-py3-none-any.whl.metadata (2.5 kB) +2026-10-18T15:29:26+09:00 #10 9.796 Collecting MarkupSafe>=2.0 (from jinja2->torch==2.4.1+cpu->-r requirements.txt (line 9)) +2026-10-18T15:29:26+09:00 #10 9.812 Downloading markupsafe-3.0.4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (2.7 kB) +2026-10-18T15:29:26+09:00 #10 9.860 INFO: pip is looking at multiple versions of sentence-transformers to determine which version is compatible with other requirements. This could take a while. +2026-10-18T15:29:26+09:00 #10 9.863 Collecting sentence_transformers (from FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:29:26+09:00 #10 9.879 Downloading sentence_transformers-6.0.1-py3-none-any.whl.metadata (20 kB) +2026-10-18T15:29:26+09:00 #10 9.907 Downloading sentence_transformers-6.0.0-py3-none-any.whl.metadata (20 kB) +2026-10-18T15:29:26+09:00 #10 9.936 Downloading sentence_transformers-5.7.0-py3-none-any.whl.metadata (18 kB) +2026-10-18T15:29:26+09:00 #10 10.10 Collecting scikit-learn>=0.22.0 (from sentence_transformers->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:29:26+09:00 #10 10.12 Downloading scikit_learn-1.9.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.metadata (9.3 kB) +2026-10-18T15:29:26+09:00 #10 10.26 Collecting scipy>=1.0.0 (from sentence_transformers->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:29:26+09:00 #10 10.28 Downloading scipy-1.17.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.metadata (62 kB) +2026-10-18T15:29:26+09:00 #10 10.28 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 62.1/62.1 kB 439.4 MB/s eta 0:00:00 +2026-10-18T15:29:26+09:00 #10 10.35 Collecting mpmath<1.4,>=1.1.0 (from sympy->torch==2.4.1+cpu->-r requirements.txt (line 9)) +2026-10-18T15:29:26+09:00 #10 10.36 Downloading mpmath-1.3.0-py3-none-any.whl.metadata (8.6 kB) +2026-10-18T15:29:27+09:00 #10 11.02 Collecting aiohttp!=4.0.0a0,!=4.0.0a1 (from fsspec[http]<=2026.6.0,>=2023.1.0->datasets->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:29:27+09:00 #10 11.04 Downloading aiohttp-3.14.5-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (8.3 kB) +2026-10-18T15:29:27+09:00 #10 11.18 Collecting httpcore==1.* (from httpx<1.0.0->datasets->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:29:27+09:00 #10 11.20 Downloading httpcore-1.0.9-py3-none-any.whl.metadata (21 kB) +2026-10-18T15:29:27+09:00 #10 11.31 Collecting joblib>=1.4.0 (from scikit-learn>=0.22.0->sentence_transformers->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:29:27+09:00 #10 11.33 Downloading joblib-1.6.0-py3-none-any.whl.metadata (6.5 kB) +2026-10-18T15:29:27+09:00 #10 11.42 Collecting narwhals>=2.0.1 (from scikit-learn>=0.22.0->sentence_transformers->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:29:28+09:00 #10 11.44 Downloading narwhals-2.27.1-py3-none-any.whl.metadata (15 kB) +2026-10-18T15:29:28+09:00 #10 11.51 Collecting threadpoolctl>=3.5.0 (from scikit-learn>=0.22.0->sentence_transformers->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:29:28+09:00 #10 11.52 Downloading threadpoolctl-3.7.0-py3-none-any.whl.metadata (24 kB) +2026-10-18T15:29:28+09:00 #10 11.67 Collecting python-dateutil>=2.8.2 (from pandas->datasets->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:29:28+09:00 #10 11.69 Downloading python_dateutil-2.9.0.post0-py2.py3-none-any.whl.metadata (8.4 kB) +2026-10-18T15:29:28+09:00 #10 11.77 Collecting aiohappyeyeballs>=2.5.0 (from aiohttp!=4.0.0a0,!=4.0.0a1->fsspec[http]<=2026.6.0,>=2023.1.0->datasets->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:29:28+09:00 #10 11.79 Downloading aiohappyeyeballs-2.7.1-py3-none-any.whl.metadata (5.9 kB) +2026-10-18T15:29:28+09:00 #10 11.86 Collecting aiosignal>=1.4.0 (from aiohttp!=4.0.0a0,!=4.0.0a1->fsspec[http]<=2026.6.0,>=2023.1.0->datasets->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:29:28+09:00 #10 11.87 Downloading aiosignal-1.4.0-py3-none-any.whl.metadata (3.7 kB) +2026-10-18T15:29:28+09:00 #10 12.00 Collecting attrs>=17.3.0 (from aiohttp!=4.0.0a0,!=4.0.0a1->fsspec[http]<=2026.6.0,>=2023.1.0->datasets->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:29:28+09:00 #10 12.02 Downloading attrs-26.1.0-py3-none-any.whl.metadata (8.8 kB) +2026-10-18T15:29:28+09:00 #10 12.12 Collecting frozenlist>=1.1.1 (from aiohttp!=4.0.0a0,!=4.0.0a1->fsspec[http]<=2026.6.0,>=2023.1.0->datasets->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:29:28+09:00 #10 12.14 Downloading frozenlist-1.8.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl.metadata (20 kB) +2026-10-18T15:29:28+09:00 #10 12.42 Collecting multidict<8.0,>=4.5 (from aiohttp!=4.0.0a0,!=4.0.0a1->fsspec[http]<=2026.6.0,>=2023.1.0->datasets->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:29:28+09:00 #10 12.44 Downloading multidict-7.1.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (6.2 kB) +2026-10-18T15:29:29+09:00 #10 12.83 Collecting propcache>=0.2.0 (from aiohttp!=4.0.0a0,!=4.0.0a1->fsspec[http]<=2026.6.0,>=2023.1.0->datasets->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:29:29+09:00 #10 12.84 Downloading propcache-0.5.4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (25 kB) +2026-10-18T15:29:29+09:00 #10 13.07 Collecting yarl<2.0,>=1.25.1 (from aiohttp!=4.0.0a0,!=4.0.0a1->fsspec[http]<=2026.6.0,>=2023.1.0->datasets->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:29:29+09:00 #10 13.09 Downloading yarl-1.25.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (111 kB) +2026-10-18T15:29:29+09:00 #10 13.09 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 111.6/111.6 kB 63.8 MB/s eta 0:00:00 +2026-10-18T15:29:29+09:00 #10 13.18 Collecting cloudpickle>=3.0 (from joblib>=1.4.0->scikit-learn>=0.22.0->sentence_transformers->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:29:29+09:00 #10 13.19 Downloading cloudpickle-3.1.2-py3-none-any.whl.metadata (7.1 kB) +2026-10-18T15:29:29+09:00 #10 13.34 Collecting six>=1.5 (from python-dateutil>=2.8.2->pandas->datasets->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:29:29+09:00 #10 13.35 Downloading six-1.17.0-py2.py3-none-any.whl.metadata (1.7 kB) +2026-10-18T15:29:29+09:00 #10 13.44 Downloading fastapi-0.115.0-py3-none-any.whl (94 kB) +2026-10-18T15:29:29+09:00 #10 13.44 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 94.6/94.6 kB 73.7 MB/s eta 0:00:00 +2026-10-18T15:29:29+09:00 #10 13.46 Downloading uvicorn-0.30.6-py3-none-any.whl (62 kB) +2026-10-18T15:29:29+09:00 #10 13.46 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 62.8/62.8 kB 463.7 MB/s eta 0:00:00 +2026-10-18T15:29:29+09:00 #10 13.47 Downloading transformers-4.44.2-py3-none-any.whl (9.5 MB) +2026-10-18T15:29:30+09:00 #10 13.59 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.5/9.5 MB 81.5 MB/s eta 0:00:00 +2026-10-18T15:29:30+09:00 #10 13.61 Downloading peft-0.12.0-py3-none-any.whl (296 kB) +2026-10-18T15:29:30+09:00 #10 13.61 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 296.4/296.4 kB 221.2 MB/s eta 0:00:00 +2026-10-18T15:29:30+09:00 #10 13.63 Downloading numpy-1.26.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (18.3 MB) +2026-10-18T15:29:30+09:00 #10 13.71 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 18.3/18.3 MB 197.9 MB/s eta 0:00:00 +2026-10-18T15:29:30+09:00 #10 13.74 Downloading pyarrow-21.0.0-cp311-cp311-manylinux_2_28_x86_64.whl (42.8 MB) +2026-10-18T15:29:30+09:00 #10 13.90 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 42.8/42.8 MB 272.4 MB/s eta 0:00:00 +2026-10-18T15:29:30+09:00 #10 13.92 Downloading accelerate-1.15.0-py3-none-any.whl (394 kB) +2026-10-18T15:29:30+09:00 #10 13.92 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 394.3/394.3 kB 344.7 MB/s eta 0:00:00 +2026-10-18T15:29:30+09:00 #10 13.94 Downloading click-8.5.0-py3-none-any.whl (125 kB) +2026-10-18T15:29:30+09:00 #10 13.94 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 125.3/125.3 kB 477.7 MB/s eta 0:00:00 +2026-10-18T15:29:30+09:00 #10 13.96 Downloading h11-0.16.0-py3-none-any.whl (37 kB) +2026-10-18T15:29:30+09:00 #10 13.97 Downloading huggingface_hub-0.36.2-py3-none-any.whl (566 kB) +2026-10-18T15:29:30+09:00 #10 13.98 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 566.4/566.4 kB 637.0 MB/s eta 0:00:00 +2026-10-18T15:29:30+09:00 #10 13.99 Downloading pydantic-2.14.1-py3-none-any.whl (488 kB) +2026-10-18T15:29:30+09:00 #10 13.99 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 488.1/488.1 kB 629.2 MB/s eta 0:00:00 +2026-10-18T15:29:30+09:00 #10 14.01 Downloading pydantic_core-2.50.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.2 MB) +2026-10-18T15:29:30+09:00 #10 14.01 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.2/2.2 MB 550.5 MB/s eta 0:00:00 +2026-10-18T15:29:30+09:00 #10 14.03 Downloading pyyaml-6.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (806 kB) +2026-10-18T15:29:30+09:00 #10 14.03 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 806.6/806.6 kB 611.4 MB/s eta 0:00:00 +2026-10-18T15:29:30+09:00 #10 14.05 Downloading regex-2026.9.29-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (804 kB) +2026-10-18T15:29:30+09:00 #10 14.05 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 805.0/805.0 kB 631.7 MB/s eta 0:00:00 +2026-10-18T15:29:30+09:00 #10 14.07 Downloading safetensors-0.8.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (516 kB) +2026-10-18T15:29:30+09:00 #10 14.07 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 516.0/516.0 kB 566.5 MB/s eta 0:00:00 +2026-10-18T15:29:30+09:00 #10 14.08 Downloading starlette-0.38.6-py3-none-any.whl (71 kB) +2026-10-18T15:29:30+09:00 #10 14.09 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 71.5/71.5 kB 525.7 MB/s eta 0:00:00 +2026-10-18T15:29:30+09:00 #10 14.10 Downloading tokenizers-0.19.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.6 MB) +2026-10-18T15:29:30+09:00 #10 14.11 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.6/3.6 MB 347.8 MB/s eta 0:00:00 +2026-10-18T15:29:30+09:00 #10 14.13 Downloading tqdm-4.70.1-py3-none-any.whl (80 kB) +2026-10-18T15:29:30+09:00 #10 14.13 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 80.2/80.2 kB 509.5 MB/s eta 0:00:00 +2026-10-18T15:29:30+09:00 #10 14.15 Downloading typing_extensions-4.16.0-py3-none-any.whl (45 kB) +2026-10-18T15:29:30+09:00 #10 14.15 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 45.6/45.6 kB 400.7 MB/s eta 0:00:00 +2026-10-18T15:29:30+09:00 #10 14.17 Downloading datasets-5.0.1-py3-none-any.whl (559 kB) +2026-10-18T15:29:30+09:00 #10 14.17 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 559.1/559.1 kB 240.1 MB/s eta 0:00:00 +2026-10-18T15:29:30+09:00 #10 14.19 Downloading fsspec-2026.6.0-py3-none-any.whl (203 kB) +2026-10-18T15:29:30+09:00 #10 14.19 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 203.9/203.9 kB 588.8 MB/s eta 0:00:00 +2026-10-18T15:29:30+09:00 #10 14.20 Downloading requests-2.34.2-py3-none-any.whl (73 kB) +2026-10-18T15:29:30+09:00 #10 14.21 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 73.1/73.1 kB 433.3 MB/s eta 0:00:00 +2026-10-18T15:29:30+09:00 #10 14.22 Downloading filelock-4.2.1-py3-none-any.whl (162 kB) +2026-10-18T15:29:30+09:00 #10 14.22 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 162.5/162.5 kB 482.1 MB/s eta 0:00:00 +2026-10-18T15:29:30+09:00 #10 14.24 Downloading <설정된 서버> (134 kB) +2026-10-18T15:29:30+09:00 #10 14.24 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 134.9/134.9 kB 374.8 MB/s eta 0:00:00 +2026-10-18T15:29:30+09:00 #10 14.26 Downloading networkx-3.6.1-py3-none-any.whl (2.1 MB) +2026-10-18T15:29:30+09:00 #10 14.26 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1/2.1 MB 569.0 MB/s eta 0:00:00 +2026-10-18T15:29:30+09:00 #10 14.28 Downloading psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl (155 kB) +2026-10-18T15:29:30+09:00 #10 14.28 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 155.6/155.6 kB 558.4 MB/s eta 0:00:00 +2026-10-18T15:29:30+09:00 #10 14.30 Downloading sentence_transformers-5.7.0-py3-none-any.whl (611 kB) +2026-10-18T15:29:30+09:00 #10 14.30 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 611.3/611.3 kB 606.6 MB/s eta 0:00:00 +2026-10-18T15:29:30+09:00 #10 14.32 Downloading sympy-1.14.0-py3-none-any.whl (6.3 MB) +2026-10-18T15:29:30+09:00 #10 14.33 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.3/6.3 MB 546.8 MB/s eta 0:00:00 +2026-10-18T15:29:30+09:00 #10 14.35 Downloading annotated_types-0.8.0-py3-none-any.whl (13 kB) +2026-10-18T15:29:30+09:00 #10 14.36 Downloading anyio-4.15.1-py3-none-any.whl (132 kB) +2026-10-18T15:29:30+09:00 #10 14.37 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 132.1/132.1 kB 538.8 MB/s eta 0:00:00 +2026-10-18T15:29:30+09:00 #10 14.38 Downloading certifi-2026.7.22-py3-none-any.whl (136 kB) +2026-10-18T15:29:30+09:00 #10 14.38 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 137.0/137.0 kB 471.0 MB/s eta 0:00:00 +2026-10-18T15:29:30+09:00 #10 14.40 Downloading charset_normalizer-3.5.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (269 kB) +2026-10-18T15:29:30+09:00 #10 14.40 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 270.0/270.0 kB 578.0 MB/s eta 0:00:00 +2026-10-18T15:29:30+09:00 #10 14.42 Downloading dill-0.4.1-py3-none-any.whl (120 kB) +2026-10-18T15:29:30+09:00 #10 14.42 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 120.0/120.0 kB 403.5 MB/s eta 0:00:00 +2026-10-18T15:29:30+09:00 #10 14.44 Downloading hf_xet-1.7.0-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (4.2 MB) +2026-10-18T15:29:30+09:00 #10 14.45 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.2/4.2 MB 601.3 MB/s eta 0:00:00 +2026-10-18T15:29:30+09:00 #10 14.46 Downloading httpx-0.28.1-py3-none-any.whl (73 kB) +2026-10-18T15:29:30+09:00 #10 14.46 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 73.5/73.5 kB 422.4 MB/s eta 0:00:00 +2026-10-18T15:29:30+09:00 #10 14.48 Downloading httpcore-1.0.9-py3-none-any.whl (78 kB) +2026-10-18T15:29:30+09:00 #10 14.48 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 78.8/78.8 kB 446.9 MB/s eta 0:00:00 +2026-10-18T15:29:30+09:00 #10 14.50 Downloading idna-3.20-py3-none-any.whl (69 kB) +2026-10-18T15:29:30+09:00 #10 14.50 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 69.6/69.6 kB 475.6 MB/s eta 0:00:00 +2026-10-18T15:29:30+09:00 #10 14.52 Downloading markupsafe-3.0.4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (22 kB) +2026-10-18T15:29:30+09:00 #10 14.53 Downloading mpmath-1.3.0-py3-none-any.whl (536 kB) +2026-10-18T15:29:30+09:00 #10 14.53 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 536.2/536.2 kB 553.0 MB/s eta 0:00:00 +2026-10-18T15:29:30+09:00 #10 14.55 Downloading multiprocess-0.70.19-py311-none-any.whl (144 kB) +2026-10-18T15:29:31+09:00 #10 14.55 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 144.5/144.5 kB 506.5 MB/s eta 0:00:00 +2026-10-18T15:29:31+09:00 #10 14.57 Downloading scikit_learn-1.9.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (9.3 MB) +2026-10-18T15:29:31+09:00 #10 14.60 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.3/9.3 MB 293.6 MB/s eta 0:00:00 +2026-10-18T15:29:31+09:00 #10 14.62 Downloading scipy-1.17.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (35.3 MB) +2026-10-18T15:29:31+09:00 #10 14.71 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 35.3/35.3 MB 575.9 MB/s eta 0:00:00 +2026-10-18T15:29:31+09:00 #10 14.73 Downloading typing_inspection-0.4.4-py3-none-any.whl (14 kB) +2026-10-18T15:29:31+09:00 #10 14.74 Downloading urllib3-2.8.0-py3-none-any.whl (135 kB) +2026-10-18T15:29:31+09:00 #10 14.75 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 135.7/135.7 kB 556.9 MB/s eta 0:00:00 +2026-10-18T15:29:31+09:00 #10 14.76 Downloading pandas-3.0.6-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (11.1 MB) +2026-10-18T15:29:31+09:00 #10 14.79 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 11.1/11.1 MB 361.9 MB/s eta 0:00:00 +2026-10-18T15:29:31+09:00 #10 14.81 Downloading xxhash-4.0.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (261 kB) +2026-10-18T15:29:31+09:00 #10 14.81 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 261.0/261.0 kB 596.9 MB/s eta 0:00:00 +2026-10-18T15:29:31+09:00 #10 14.83 Downloading aiohttp-3.14.5-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (1.9 MB) +2026-10-18T15:29:31+09:00 #10 14.84 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.9/1.9 MB 499.0 MB/s eta 0:00:00 +2026-10-18T15:29:31+09:00 #10 14.85 Downloading joblib-1.6.0-py3-none-any.whl (306 kB) +2026-10-18T15:29:31+09:00 #10 14.86 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 306.1/306.1 kB 613.0 MB/s eta 0:00:00 +2026-10-18T15:29:31+09:00 #10 14.87 Downloading narwhals-2.27.1-py3-none-any.whl (483 kB) +2026-10-18T15:29:31+09:00 #10 14.87 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 483.2/483.2 kB 619.3 MB/s eta 0:00:00 +2026-10-18T15:29:31+09:00 #10 14.89 Downloading python_dateutil-2.9.0.post0-py2.py3-none-any.whl (229 kB) +2026-10-18T15:29:31+09:00 #10 14.89 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 229.9/229.9 kB 580.3 MB/s eta 0:00:00 +2026-10-18T15:29:31+09:00 #10 14.91 Downloading threadpoolctl-3.7.0-py3-none-any.whl (26 kB) +2026-10-18T15:29:31+09:00 #10 14.92 Downloading aiohappyeyeballs-2.7.1-py3-none-any.whl (15 kB) +2026-10-18T15:29:31+09:00 #10 14.94 Downloading aiosignal-1.4.0-py3-none-any.whl (7.5 kB) +2026-10-18T15:29:31+09:00 #10 14.96 Downloading attrs-26.1.0-py3-none-any.whl (67 kB) +2026-10-18T15:29:31+09:00 #10 14.96 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 67.5/67.5 kB 454.4 MB/s eta 0:00:00 +2026-10-18T15:29:31+09:00 #10 14.97 Downloading cloudpickle-3.1.2-py3-none-any.whl (22 kB) +2026-10-18T15:29:31+09:00 #10 14.99 Downloading frozenlist-1.8.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (231 kB) +2026-10-18T15:29:31+09:00 #10 14.99 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 231.1/231.1 kB 598.1 MB/s eta 0:00:00 +2026-10-18T15:29:31+09:00 #10 15.01 Downloading multidict-7.1.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (480 kB) +2026-10-18T15:29:31+09:00 #10 15.01 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 480.4/480.4 kB 617.0 MB/s eta 0:00:00 +2026-10-18T15:29:31+09:00 #10 15.03 Downloading propcache-0.5.4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (235 kB) +2026-10-18T15:29:31+09:00 #10 15.03 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 235.4/235.4 kB 540.5 MB/s eta 0:00:00 +2026-10-18T15:29:31+09:00 #10 15.04 Downloading six-1.17.0-py2.py3-none-any.whl (11 kB) +2026-10-18T15:29:31+09:00 #10 15.06 Downloading yarl-1.25.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (117 kB) +2026-10-18T15:29:31+09:00 #10 15.06 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 117.7/117.7 kB 552.3 MB/s eta 0:00:00 +2026-10-18T15:29:31+09:00 #10 15.23 Building wheels for collected packages: FlagEmbedding +2026-10-18T15:29:31+09:00 #10 15.23 Building wheel for FlagEmbedding (setup.py): started +2026-10-18T15:29:31+09:00 #10 15.43 Building wheel for FlagEmbedding (setup.py): finished with status 'done' +2026-10-18T15:29:31+09:00 #10 15.43 Created wheel for FlagEmbedding: filename=flagembedding-1.2.11-py3-none-any.whl size=171233 sha256=81e37fbfb5323d80e73367683a052cb98ef965d560fecabd1102b3206d0173a8 +2026-10-18T15:29:31+09:00 #10 15.43 Stored in directory: /tmp/pip-ephem-wheel-cache-1g_zaomq/wheels/cc/30/56/331f855b95583721e80ba4d5630f701387dcade9d050c88d9d +2026-10-18T15:29:31+09:00 #10 15.43 Successfully built FlagEmbedding +2026-10-18T15:29:32+09:00 #10 15.94 Installing collected packages: mpmath, xxhash, urllib3, typing-extensions, tqdm, threadpoolctl, sympy, six, safetensors, regex, pyyaml, pyarrow, psutil, propcache, numpy, networkx, narwhals, multidict, MarkupSafe, idna, hf-xet, h11, fsspec, frozenlist, filelock, dill, cloudpickle, click, charset_normalizer, certifi, attrs, annotated-types, aiohappyeyeballs, yarl, uvicorn, typing-inspection, scipy, requests, python-dateutil, pydantic-core, multiprocess, joblib, jinja2, httpcore, anyio, aiosignal, torch, starlette, scikit-learn, pydantic, pandas, huggingface-hub, httpx, aiohttp, tokenizers, fastapi, accelerate, transformers, datasets, sentence_transformers, peft, FlagEmbedding +2026-10-18T15:29:56+09:00 #10 39.72 Successfully installed FlagEmbedding-1.2.11 MarkupSafe-3.0.4 accelerate-1.15.0 aiohappyeyeballs-2.7.1 aiohttp-3.14.5 aiosignal-1.4.0 annotated-types-0.8.0 anyio-4.15.1 attrs-26.1.0 certifi-2026.7.22 charset_normalizer-3.5.2 click-8.5.0 cloudpickle-3.1.2 datasets-5.0.1 dill-0.4.1 fastapi-0.115.0 filelock-4.2.1 frozenlist-1.8.0 fsspec-2026.6.0 h11-0.16.0 hf-xet-1.7.0 httpcore-1.0.9 httpx-0.28.1 huggingface-hub-0.36.2 idna-3.20 jinja2-3.1.6 joblib-1.6.0 mpmath-1.3.0 multidict-7.1.0 multiprocess-0.70.19 narwhals-2.27.1 networkx-3.6.1 numpy-1.26.4 pandas-3.0.6 peft-0.12.0 propcache-0.5.4 psutil-7.2.2 pyarrow-21.0.0 pydantic-2.14.1 pydantic-core-2.50.1 python-dateutil-2.9.0.post0 pyyaml-6.0.3 regex-2026.9.29 requests-2.34.2 safetensors-0.8.0 scikit-learn-1.9.1 scipy-1.17.1 sentence_transformers-5.7.0 six-1.17.0 starlette-0.38.6 sympy-1.14.0 threadpoolctl-3.7.0 tokenizers-0.19.1 torch-2.4.1+cpu tqdm-4.70.1 transformers-4.44.2 typing-extensions-4.16.0 typing-inspection-0.4.4 urllib3-2.8.0 uvicorn-0.30.6 xxhash-4.0.1 yarl-1.25.1 +2026-10-18T15:29:56+09:00 #10 39.72 WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: <설정된 서버> +2026-10-18T15:29:56+09:00 #10 39.82 +2026-10-18T15:29:56+09:00 #10 39.82 [notice] A new release of pip is available: 24.0 -> 26.2.1 +2026-10-18T15:29:56+09:00 #10 39.82 [notice] To update, run: pip install --upgrade pip +2026-10-18T15:30:02+09:00 #10 DONE 46.1s +2026-10-18T15:30:02+09:00 +2026-10-18T15:30:02+09:00 #11 [5/8] COPY requirements-observability.txt . +2026-10-18T15:30:02+09:00 #11 DONE 0.0s +2026-10-18T15:30:02+09:00 +2026-10-18T15:30:02+09:00 #12 [6/8] RUN pip install --no-cache-dir -r requirements-observability.txt +2026-10-18T15:30:02+09:00 #12 0.420 Collecting prometheus-client==0.25.0 (from -r requirements-observability.txt (line 1)) +2026-10-18T15:30:03+09:00 #12 0.489 Downloading prometheus_client-0.25.0-py3-none-any.whl.metadata (2.1 kB) +2026-10-18T15:30:03+09:00 #12 0.508 Downloading prometheus_client-0.25.0-py3-none-any.whl (64 kB) +2026-10-18T15:30:03+09:00 #12 0.525 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 64.2/64.2 kB 3.8 MB/s eta 0:00:00 +2026-10-18T15:30:03+09:00 #12 0.960 Installing collected packages: prometheus-client +2026-10-18T15:30:03+09:00 #12 0.992 Successfully installed prometheus-client-0.25.0 +2026-10-18T15:30:03+09:00 #12 0.993 WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: <설정된 서버> +2026-10-18T15:30:03+09:00 #12 1.078 +2026-10-18T15:30:03+09:00 #12 1.078 [notice] A new release of pip is available: 24.0 -> 26.2.1 +2026-10-18T15:30:03+09:00 #12 1.078 [notice] To update, run: pip install --upgrade pip +2026-10-18T15:30:03+09:00 #12 DONE 1.1s +2026-10-18T15:30:03+09:00 +2026-10-18T15:30:03+09:00 #13 [7/8] RUN python -c "from FlagEmbedding import BGEM3FlagModel" +2026-10-18T15:30:06+09:00 #13 DONE 3.1s +2026-10-18T15:30:06+09:00 +2026-10-18T15:30:06+09:00 #14 [8/8] COPY main.py . +2026-10-18T15:30:06+09:00 #14 DONE 0.0s +2026-10-18T15:30:06+09:00 +2026-10-18T15:30:06+09:00 #15 exporting to image +2026-10-18T15:30:06+09:00 #15 exporting layers +2026-10-18T15:30:12+09:00 #15 exporting layers 5.7s done +2026-10-18T15:30:12+09:00 #15 writing image sha256:d599e6ec81f28068ecfa3b96242b35959623e6f1d05cf0b8c9922b80db77f0a4 done +2026-10-18T15:30:12+09:00 #15 naming to docker.io/library/docgrid-embedding-server done +2026-10-18T15:30:12+09:00 #15 DONE 5.7s +2026-10-18T15:30:12+09:00 +2026-10-18T15:30:12+09:00 #16 resolving provenance for metadata file +2026-10-18T15:30:12+09:00 #16 DONE 0.0s +2026-10-18T15:30:12+09:00 embedding-server Built +2026-10-18T15:30:12+09:00 Network docgrid_docgrid-local Creating +2026-10-18T15:30:12+09:00 Network docgrid_docgrid-local Created +2026-10-18T15:30:12+09:00 Volume "docgrid_postgres17_data" Creating +2026-10-18T15:30:12+09:00 Volume "docgrid_postgres17_data" Created +2026-10-18T15:30:12+09:00 Volume "docgrid_huggingface-cache" Creating +2026-10-18T15:30:12+09:00 Volume "docgrid_huggingface-cache" Created +2026-10-18T15:30:12+09:00 Volume "docgrid_valkey-data" Creating +2026-10-18T15:30:12+09:00 Volume "docgrid_valkey-data" Created +2026-10-18T15:30:12+09:00 Container docgrid-valkey Creating +2026-10-18T15:30:12+09:00 Container docgrid-embedding Creating +2026-10-18T15:30:12+09:00 Container docgrid-postgres17 Creating +2026-10-18T15:30:12+09:00 Container docgrid-postgres17 Created +2026-10-18T15:30:12+09:00 Container docgrid-valkey Created +2026-10-18T15:30:12+09:00 Container docgrid-embedding Created +2026-10-18T15:30:12+09:00 Container docgrid-embedding Starting +2026-10-18T15:30:12+09:00 Container docgrid-postgres17 Starting +2026-10-18T15:30:12+09:00 Container docgrid-valkey Starting +2026-10-18T15:30:12+09:00 Container docgrid-embedding Started +2026-10-18T15:30:12+09:00 Container docgrid-valkey Started +2026-10-18T15:30:12+09:00 Container docgrid-postgres17 Started +2026-10-18T15:30:15+09:00 [OK] 대상 PostgreSQL 준비 완료 +2026-10-18T15:30:15+09:00 [OK] Valkey 준비 완료 +2026-10-18T15:30:42+09:00 [OK] Embedding Provider 준비 완료 +2026-10-18T15:30:42+09:00 [OK] 대상 PostgreSQL 인증·pgvector 0.8.1 확인 +2026-10-18T15:30:42+09:00 [OK] Valkey 연결 가능 +2026-10-18T15:30:42+09:00 [OK] Embedding Provider 준비 완료 (<설정된 서버>) +2026-10-18T15:30:42+09:00 [OK] 검색 범위 준비 완료 · 생성 답변은 미검증 diff --git a/docs/test-results/demo-fresh-20261018/runs/39104137120-1/summary.json b/docs/test-results/demo-fresh-20261018/runs/39104137120-1/summary.json new file mode 100644 index 00000000..75ed1013 --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39104137120-1/summary.json @@ -0,0 +1,32 @@ +{ + "runId": "39104137120-1", + "revision": "33eb78f32d412c3b148e881d9d8723dc1308143e", + "environment": "GitHub hosted Ubuntu 24.04 · actual PostgreSQL/Valkey/BGE-M3 · no Ollama", + "results": [ + { + "id": "preflight", + "purpose": "독립 실행기의 새 환경 확인", + "timestamp": "2026-10-18T15:28:45+09:00", + "verdict": "PASS", + "existingContainers": 0, + "existingImageCount": 6, + "existingVolumes": 0, + "environmentFilesInitiallyPresent": 0, + "workload": { + "documents": 15, + "searchQuestions": 3, + "browserSessions": 1 + } + }, + { + "id": "concurrent-start", + "purpose": "진행 중 start의 잠금으로 두 번째 start 거부", + "timestamp": "2026-10-18T15:28:49+09:00", + "verdict": "PASS", + "exitCode": 1, + "expectedExitCode": 1, + "elapsedSeconds": 0.115, + "log": "concurrent-start.log" + } + ] +} \ No newline at end of file diff --git a/docs/test-results/demo-fresh-20261018/runs/39104533807-1/always-cleanup.log b/docs/test-results/demo-fresh-20261018/runs/39104533807-1/always-cleanup.log new file mode 100644 index 00000000..9485afb4 --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39104533807-1/always-cleanup.log @@ -0,0 +1,10 @@ +실행 ID: 39104533807-1/always-cleanup +목적: 시험 중단·완료 후 소유 자원 종료 +시작: 2026-10-18T15:41:19+09:00 +장소: 독립 GitHub hosted 실행기 +기대 종료 코드: 0 +절차: ./scripts/demo.py stop +2026-10-18T15:41:22+09:00 [종료 완료] 소유 서버·컨테이너 중지, 데이터·원본·모델 캐시 보존 +종료: 2026-10-18T15:41:22+09:00 +실제 종료 코드: 0 +소요 시간: 3.422초 diff --git a/docs/test-results/demo-fresh-20261018/runs/39104533807-1/browser.log b/docs/test-results/demo-fresh-20261018/runs/39104533807-1/browser.log new file mode 100644 index 00000000..9d49b5de --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39104533807-1/browser.log @@ -0,0 +1,10 @@ +실행 ID: 39104533807-1/browser +목적: 실제 Chromium 로그인·질문 전송·원본 다운로드 해시 +시작: 2026-10-18T15:40:31+09:00 +장소: 독립 GitHub hosted 실행기 +기대 종료 코드: 0 +절차: node scripts/demo/browser_smoke.cjs <실행기 작업공간>/.demo/reproduction/39104533807-1/browser +2026-10-18T15:41:19+09:00 {"verdict":"FAIL","stage":"login","errorType":"TimeoutError"} +종료: 2026-10-18T15:41:19+09:00 +실제 종료 코드: 1 +소요 시간: 48.381초 diff --git a/docs/test-results/demo-fresh-20261018/runs/39104533807-1/browser/summary.json b/docs/test-results/demo-fresh-20261018/runs/39104533807-1/browser/summary.json new file mode 100644 index 00000000..f0efb7c2 --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39104533807-1/browser/summary.json @@ -0,0 +1 @@ +{"verdict":"FAIL","stage":"login","errorType":"TimeoutError"} \ No newline at end of file diff --git a/docs/test-results/demo-fresh-20261018/runs/39104533807-1/cold-start.log b/docs/test-results/demo-fresh-20261018/runs/39104533807-1/cold-start.log new file mode 100644 index 00000000..12ffcb98 --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39104533807-1/cold-start.log @@ -0,0 +1,11 @@ +실행 ID: 39104533807-1/cold-start +목적: 모델·의존성 최초 준비를 포함한 전체 기동 +시작: 2026-10-18T15:35:26+09:00 +장소: 독립 GitHub hosted 실행기 +기대 종료 코드: 0 +절차: ./scripts/demo.py start --timeout 1200 +2026-10-18T15:35:30+09:00 [시작] 로컬 시연 세션 a7dc894111e946d9aac3f16b6080ce7f · 범위 search +2026-10-18T15:39:51+09:00 [준비 완료] Web: <설정된 서버> · verify로 예제 시연을 검사하세요. +종료: 2026-10-18T15:39:51+09:00 +실제 종료 코드: 0 +소요 시간: 265.87초 diff --git a/docs/test-results/demo-fresh-20261018/runs/39104533807-1/concurrent-start.log b/docs/test-results/demo-fresh-20261018/runs/39104533807-1/concurrent-start.log new file mode 100644 index 00000000..ad16b512 --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39104533807-1/concurrent-start.log @@ -0,0 +1,10 @@ +실행 ID: 39104533807-1/concurrent-start +목적: 진행 중 start의 잠금으로 두 번째 start 거부 +시작: 2026-10-18T15:35:31+09:00 +장소: 독립 GitHub hosted 실행기 +기대 종료 코드: 1 +절차: ./scripts/demo.py start +2026-10-18T15:35:31+09:00 [실패] 다른 시작·검증·종료 명령이 실행 중입니다. +종료: 2026-10-18T15:35:31+09:00 +실제 종료 코드: 1 +소요 시간: 0.114초 diff --git a/docs/test-results/demo-fresh-20261018/runs/39104533807-1/first-result/events.jsonl b/docs/test-results/demo-fresh-20261018/runs/39104533807-1/first-result/events.jsonl new file mode 100644 index 00000000..2644fe75 --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39104533807-1/first-result/events.jsonl @@ -0,0 +1,58 @@ +{"timestamp": "2026-10-18T15:39:53.338+09:00", "message": "[실행] 20261018T153953335897+0900 · 범위 search"} +{"timestamp": "2026-10-18T15:39:53.579+09:00", "message": "[계정] 회원가입 완료"} +{"timestamp": "2026-10-18T15:39:53.759+09:00", "message": "[계정] 로그인 완료"} +{"timestamp": "2026-10-18T15:39:54.456+09:00", "message": "[업로드] 1/15 · 문서 3"} +{"timestamp": "2026-10-18T15:39:54.508+09:00", "message": "[업로드] 2/15 · 문서 4"} +{"timestamp": "2026-10-18T15:39:54.564+09:00", "message": "[업로드] 3/15 · 문서 5"} +{"timestamp": "2026-10-18T15:39:54.616+09:00", "message": "[업로드] 4/15 · 문서 6"} +{"timestamp": "2026-10-18T15:39:54.662+09:00", "message": "[업로드] 5/15 · 문서 7"} +{"timestamp": "2026-10-18T15:39:54.711+09:00", "message": "[업로드] 6/15 · 문서 8"} +{"timestamp": "2026-10-18T15:39:54.758+09:00", "message": "[업로드] 7/15 · 문서 9"} +{"timestamp": "2026-10-18T15:39:54.803+09:00", "message": "[업로드] 8/15 · 문서 10"} +{"timestamp": "2026-10-18T15:39:54.857+09:00", "message": "[업로드] 9/15 · 문서 11"} +{"timestamp": "2026-10-18T15:39:54.909+09:00", "message": "[업로드] 10/15 · 문서 12"} +{"timestamp": "2026-10-18T15:39:54.957+09:00", "message": "[업로드] 11/15 · 문서 13"} +{"timestamp": "2026-10-18T15:39:54.998+09:00", "message": "[업로드] 12/15 · 문서 14"} +{"timestamp": "2026-10-18T15:39:55.042+09:00", "message": "[업로드] 13/15 · 문서 15"} +{"timestamp": "2026-10-18T15:39:55.084+09:00", "message": "[업로드] 14/15 · 문서 16"} +{"timestamp": "2026-10-18T15:39:55.130+09:00", "message": "[업로드] 15/15 · 문서 17"} +{"timestamp": "2026-10-18T15:39:55.528+09:00", "message": "[인덱싱] INDEXED 0/15 · 처리 중 0 · 대기 15 · 실패 0 (0.4초)"} +{"timestamp": "2026-10-18T15:40:02.624+09:00", "message": "[인덱싱] INDEXED 1/15 · 처리 중 2 · 대기 12 · 실패 0 (7.5초)"} +{"timestamp": "2026-10-18T15:40:06.229+09:00", "message": "[인덱싱] INDEXED 3/15 · 처리 중 2 · 대기 10 · 실패 0 (11.1초)"} +{"timestamp": "2026-10-18T15:40:09.709+09:00", "message": "[인덱싱] INDEXED 5/15 · 처리 중 1 · 대기 9 · 실패 0 (14.6초)"} +{"timestamp": "2026-10-18T15:40:13.167+09:00", "message": "[인덱싱] INDEXED 6/15 · 처리 중 2 · 대기 7 · 실패 0 (18.0초)"} +{"timestamp": "2026-10-18T15:40:16.501+09:00", "message": "[인덱싱] INDEXED 8/15 · 처리 중 1 · 대기 6 · 실패 0 (21.4초)"} +{"timestamp": "2026-10-18T15:40:19.728+09:00", "message": "[인덱싱] INDEXED 10/15 · 처리 중 1 · 대기 4 · 실패 0 (24.6초)"} +{"timestamp": "2026-10-18T15:40:22.863+09:00", "message": "[인덱싱] INDEXED 13/15 · 처리 중 1 · 대기 1 · 실패 0 (27.7초)"} +{"timestamp": "2026-10-18T15:40:25.910+09:00", "message": "[인덱싱] INDEXED 15/15 · 처리 중 0 · 대기 0 · 실패 0 (30.8초)"} +{"timestamp": "2026-10-18T15:40:26.293+09:00", "message": "[검색] 통과: 결과 3건, 기대 문서 포함 여부 확인"} +{"timestamp": "2026-10-18T15:40:26.293+09:00", "message": "[RAG] 미검증: search 범위에서는 생성 답변 성공을 주장하지 않습니다."} +{"timestamp": "2026-10-18T15:40:26.293+09:00", "message": "[질문 1] 검색 PASS · 생성 답변 NOT_RUN"} +{"timestamp": "2026-10-18T15:40:26.616+09:00", "message": "[검색] 통과: 결과 3건, 기대 문서 포함 여부 확인"} +{"timestamp": "2026-10-18T15:40:26.616+09:00", "message": "[RAG] 미검증: search 범위에서는 생성 답변 성공을 주장하지 않습니다."} +{"timestamp": "2026-10-18T15:40:26.640+09:00", "message": "[질문 2] 검색 PASS · 생성 답변 NOT_RUN"} +{"timestamp": "2026-10-18T15:40:26.908+09:00", "message": "[검색] 통과: 결과 3건, 기대 문서 포함 여부 확인"} +{"timestamp": "2026-10-18T15:40:26.908+09:00", "message": "[RAG] 미검증: search 범위에서는 생성 답변 성공을 주장하지 않습니다."} +{"timestamp": "2026-10-18T15:40:26.908+09:00", "message": "[질문 3] 검색 PASS · 생성 답변 NOT_RUN"} +{"timestamp": "2026-10-18T15:40:26.934+09:00", "message": "[원본] 문서 3: PASS"} +{"timestamp": "2026-10-18T15:40:26.956+09:00", "message": "[원본] 문서 4: PASS"} +{"timestamp": "2026-10-18T15:40:26.981+09:00", "message": "[원본] 문서 5: PASS"} +{"timestamp": "2026-10-18T15:40:27.006+09:00", "message": "[원본] 문서 6: PASS"} +{"timestamp": "2026-10-18T15:40:27.043+09:00", "message": "[원본] 문서 7: PASS"} +{"timestamp": "2026-10-18T15:40:27.072+09:00", "message": "[원본] 문서 8: PASS"} +{"timestamp": "2026-10-18T15:40:27.094+09:00", "message": "[원본] 문서 9: PASS"} +{"timestamp": "2026-10-18T15:40:27.115+09:00", "message": "[원본] 문서 10: PASS"} +{"timestamp": "2026-10-18T15:40:27.137+09:00", "message": "[원본] 문서 11: PASS"} +{"timestamp": "2026-10-18T15:40:27.161+09:00", "message": "[원본] 문서 12: PASS"} +{"timestamp": "2026-10-18T15:40:27.182+09:00", "message": "[원본] 문서 13: PASS"} +{"timestamp": "2026-10-18T15:40:27.201+09:00", "message": "[원본] 문서 14: PASS"} +{"timestamp": "2026-10-18T15:40:27.221+09:00", "message": "[원본] 문서 15: PASS"} +{"timestamp": "2026-10-18T15:40:27.242+09:00", "message": "[원본] 문서 16: PASS"} +{"timestamp": "2026-10-18T15:40:27.261+09:00", "message": "[원본] 문서 17: PASS"} +{"timestamp": "2026-10-18T15:40:27.261+09:00", "message": "[업로드] PASS · 15/15"} +{"timestamp": "2026-10-18T15:40:27.261+09:00", "message": "[인덱싱] PASS · 15/15"} +{"timestamp": "2026-10-18T15:40:27.261+09:00", "message": "[검색] PASS · 3/3"} +{"timestamp": "2026-10-18T15:40:27.261+09:00", "message": "[원본 해시] PASS · 15/15"} +{"timestamp": "2026-10-18T15:40:27.261+09:00", "message": "[생성 답변·인용] NOT_RUN · 0/0"} +{"timestamp": "2026-10-18T15:40:27.261+09:00", "message": "[문서 ID 재사용] NOT_RUN · 0/0"} +{"timestamp": "2026-10-18T15:40:27.261+09:00", "message": "[최종] 종료 코드 0"} diff --git a/docs/test-results/demo-fresh-20261018/runs/39104533807-1/first-result/summary.json b/docs/test-results/demo-fresh-20261018/runs/39104533807-1/first-result/summary.json new file mode 100644 index 00000000..ee7f6274 --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39104533807-1/first-result/summary.json @@ -0,0 +1,86 @@ +{ + "schemaVersion": 1, + "runId": "20261018T153953335897+0900", + "revision": "ae146127179227f74205e189f7fd49dbe59a77fd", + "scope": "search", + "startedAt": "2026-10-18T15:39:53.337+09:00", + "stages": { + "upload": { + "status": "PASS", + "passed": 15, + "expected": 15 + }, + "indexing": { + "status": "PASS", + "passed": 15, + "expected": 15 + }, + "search": { + "status": "PASS", + "passed": 3, + "expected": 3 + }, + "download": { + "status": "PASS", + "passed": 15, + "expected": 15 + }, + "rag": { + "status": "NOT_RUN", + "passed": 0, + "expected": 0 + }, + "replay": { + "status": "NOT_RUN", + "passed": 0, + "expected": 0 + } + }, + "documents": { + "b8dae14d4ba98ceda83e672be41d20895a70ee01f4cf128a0431d137ea581304": 3, + "924112041275f193f2296a55ba5ea098e14ff98b8908eff2051e37b8c2848fb3": 4, + "82d7205d795868938f73eb871b0ca29aff632ce5948e0a5c60d7614222265379": 5, + "f0fb63cf9f42118f799082c74d8d1237434313270ff6b9ac12bb05d1d2955d9a": 6, + "6672c9b2faa6d5b1d04bd287d7a7a71746262c6fb126333f217249aacef6caeb": 7, + "3295bab5db9c7ddcd5a6d8e141b25960f167e553b03f80abaaabcc7670cf7760": 8, + "d5e11dad0ac802f01925eaac1c98efff483616ca0bb02f4be098bcbe1e2d315b": 9, + "ece687b9507957c5bc1ba7e0deff426e8803b81332e0cd507b3558974bdd78b0": 10, + "1830ee48e2942f6e80c5d72f26917ea5384e5c6ff2ca10c4b2ff2c2739e61547": 11, + "6d383df3849d304aa941d6733a0e8205c024d9fa2cfb37d21880af32f7c5c43d": 12, + "a5635fe4c4f3f60d0aa52e3cf7e493da741f6e7e8b15adef534f50030cdafa03": 13, + "fab797bb45eef73ace164770c5fc8d47c8e1c9378e87c1aa296b706759b30831": 14, + "c1bc83a520b4b05557ef8cbf48da15b82a16df02c04274c56cf4604ff9ee50b3": 15, + "d1e0658cf5d053175cab29dff6d21667c5e8527def7c6acc6c0efb814baf6285": 16, + "0bebba1fec7239ddd92b23f81b3b35910ae1d031ac02b5432cd460b1d9445244": 17 + }, + "queries": [ + { + "number": 1, + "expectedDocumentId": 3, + "search": "PASS", + "rag": "NOT_RUN", + "queryId": 1 + }, + { + "number": 2, + "expectedDocumentId": 8, + "search": "PASS", + "rag": "NOT_RUN", + "queryId": 2 + }, + { + "number": 3, + "expectedDocumentId": 13, + "search": "PASS", + "rag": "NOT_RUN", + "queryId": 3 + } + ], + "corpusSha256": "e27ae024506149089279f92b88e13262fa96d651f00e360b2815bc96d648e70d", + "targetFingerprint": "5e1e577159162f6456df2fe8c273831028258d1250e2074384883c10565c2428", + "topK": 3, + "checksSha256": "103c1585e7dd2b45f03eb9ba61463bb9a8647efa8026b270c41a45c8eb677c6c", + "exitCode": 0, + "finishedAt": "2026-10-18T15:40:27.261+09:00", + "elapsedSeconds": 33.926 +} \ No newline at end of file diff --git a/docs/test-results/demo-fresh-20261018/runs/39104533807-1/replay-result/events.jsonl b/docs/test-results/demo-fresh-20261018/runs/39104533807-1/replay-result/events.jsonl new file mode 100644 index 00000000..50c0183a --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39104533807-1/replay-result/events.jsonl @@ -0,0 +1,49 @@ +{"timestamp": "2026-10-18T15:40:28.997+09:00", "message": "[실행] 20261018T154028995634+0900 · 범위 search"} +{"timestamp": "2026-10-18T15:40:29.144+09:00", "message": "[계정] 로그인 완료"} +{"timestamp": "2026-10-18T15:40:29.169+09:00", "message": "[업로드] 1/15 · 문서 3"} +{"timestamp": "2026-10-18T15:40:29.192+09:00", "message": "[업로드] 2/15 · 문서 4"} +{"timestamp": "2026-10-18T15:40:29.222+09:00", "message": "[업로드] 3/15 · 문서 5"} +{"timestamp": "2026-10-18T15:40:29.247+09:00", "message": "[업로드] 4/15 · 문서 6"} +{"timestamp": "2026-10-18T15:40:29.275+09:00", "message": "[업로드] 5/15 · 문서 7"} +{"timestamp": "2026-10-18T15:40:29.299+09:00", "message": "[업로드] 6/15 · 문서 8"} +{"timestamp": "2026-10-18T15:40:29.319+09:00", "message": "[업로드] 7/15 · 문서 9"} +{"timestamp": "2026-10-18T15:40:29.340+09:00", "message": "[업로드] 8/15 · 문서 10"} +{"timestamp": "2026-10-18T15:40:29.361+09:00", "message": "[업로드] 9/15 · 문서 11"} +{"timestamp": "2026-10-18T15:40:29.383+09:00", "message": "[업로드] 10/15 · 문서 12"} +{"timestamp": "2026-10-18T15:40:29.403+09:00", "message": "[업로드] 11/15 · 문서 13"} +{"timestamp": "2026-10-18T15:40:29.423+09:00", "message": "[업로드] 12/15 · 문서 14"} +{"timestamp": "2026-10-18T15:40:29.442+09:00", "message": "[업로드] 13/15 · 문서 15"} +{"timestamp": "2026-10-18T15:40:29.462+09:00", "message": "[업로드] 14/15 · 문서 16"} +{"timestamp": "2026-10-18T15:40:29.483+09:00", "message": "[업로드] 15/15 · 문서 17"} +{"timestamp": "2026-10-18T15:40:29.818+09:00", "message": "[인덱싱] INDEXED 15/15 · 처리 중 0 · 대기 0 · 실패 0 (0.3초)"} +{"timestamp": "2026-10-18T15:40:30.136+09:00", "message": "[검색] 통과: 결과 3건, 기대 문서 포함 여부 확인"} +{"timestamp": "2026-10-18T15:40:30.136+09:00", "message": "[RAG] 미검증: search 범위에서는 생성 답변 성공을 주장하지 않습니다."} +{"timestamp": "2026-10-18T15:40:30.136+09:00", "message": "[질문 1] 검색 PASS · 생성 답변 NOT_RUN"} +{"timestamp": "2026-10-18T15:40:30.424+09:00", "message": "[검색] 통과: 결과 3건, 기대 문서 포함 여부 확인"} +{"timestamp": "2026-10-18T15:40:30.424+09:00", "message": "[RAG] 미검증: search 범위에서는 생성 답변 성공을 주장하지 않습니다."} +{"timestamp": "2026-10-18T15:40:30.443+09:00", "message": "[질문 2] 검색 PASS · 생성 답변 NOT_RUN"} +{"timestamp": "2026-10-18T15:40:30.691+09:00", "message": "[검색] 통과: 결과 3건, 기대 문서 포함 여부 확인"} +{"timestamp": "2026-10-18T15:40:30.691+09:00", "message": "[RAG] 미검증: search 범위에서는 생성 답변 성공을 주장하지 않습니다."} +{"timestamp": "2026-10-18T15:40:30.691+09:00", "message": "[질문 3] 검색 PASS · 생성 답변 NOT_RUN"} +{"timestamp": "2026-10-18T15:40:30.713+09:00", "message": "[원본] 문서 3: PASS"} +{"timestamp": "2026-10-18T15:40:30.732+09:00", "message": "[원본] 문서 4: PASS"} +{"timestamp": "2026-10-18T15:40:30.751+09:00", "message": "[원본] 문서 5: PASS"} +{"timestamp": "2026-10-18T15:40:30.771+09:00", "message": "[원본] 문서 6: PASS"} +{"timestamp": "2026-10-18T15:40:30.790+09:00", "message": "[원본] 문서 7: PASS"} +{"timestamp": "2026-10-18T15:40:30.809+09:00", "message": "[원본] 문서 8: PASS"} +{"timestamp": "2026-10-18T15:40:30.836+09:00", "message": "[원본] 문서 9: PASS"} +{"timestamp": "2026-10-18T15:40:30.856+09:00", "message": "[원본] 문서 10: PASS"} +{"timestamp": "2026-10-18T15:40:30.877+09:00", "message": "[원본] 문서 11: PASS"} +{"timestamp": "2026-10-18T15:40:30.895+09:00", "message": "[원본] 문서 12: PASS"} +{"timestamp": "2026-10-18T15:40:30.913+09:00", "message": "[원본] 문서 13: PASS"} +{"timestamp": "2026-10-18T15:40:30.931+09:00", "message": "[원본] 문서 14: PASS"} +{"timestamp": "2026-10-18T15:40:30.948+09:00", "message": "[원본] 문서 15: PASS"} +{"timestamp": "2026-10-18T15:40:30.969+09:00", "message": "[원본] 문서 16: PASS"} +{"timestamp": "2026-10-18T15:40:30.990+09:00", "message": "[원본] 문서 17: PASS"} +{"timestamp": "2026-10-18T15:40:30.990+09:00", "message": "[업로드] PASS · 15/15"} +{"timestamp": "2026-10-18T15:40:30.990+09:00", "message": "[인덱싱] PASS · 15/15"} +{"timestamp": "2026-10-18T15:40:30.990+09:00", "message": "[검색] PASS · 3/3"} +{"timestamp": "2026-10-18T15:40:30.991+09:00", "message": "[원본 해시] PASS · 15/15"} +{"timestamp": "2026-10-18T15:40:30.991+09:00", "message": "[생성 답변·인용] NOT_RUN · 0/0"} +{"timestamp": "2026-10-18T15:40:30.991+09:00", "message": "[문서 ID 재사용] PASS · 15/15"} +{"timestamp": "2026-10-18T15:40:30.991+09:00", "message": "[최종] 종료 코드 0"} diff --git a/docs/test-results/demo-fresh-20261018/runs/39104533807-1/replay-result/summary.json b/docs/test-results/demo-fresh-20261018/runs/39104533807-1/replay-result/summary.json new file mode 100644 index 00000000..51b530f5 --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39104533807-1/replay-result/summary.json @@ -0,0 +1,86 @@ +{ + "schemaVersion": 1, + "runId": "20261018T154028995634+0900", + "revision": "ae146127179227f74205e189f7fd49dbe59a77fd", + "scope": "search", + "startedAt": "2026-10-18T15:40:28.997+09:00", + "stages": { + "upload": { + "status": "PASS", + "passed": 15, + "expected": 15 + }, + "indexing": { + "status": "PASS", + "passed": 15, + "expected": 15 + }, + "search": { + "status": "PASS", + "passed": 3, + "expected": 3 + }, + "download": { + "status": "PASS", + "passed": 15, + "expected": 15 + }, + "rag": { + "status": "NOT_RUN", + "passed": 0, + "expected": 0 + }, + "replay": { + "status": "PASS", + "passed": 15, + "expected": 15 + } + }, + "documents": { + "b8dae14d4ba98ceda83e672be41d20895a70ee01f4cf128a0431d137ea581304": 3, + "924112041275f193f2296a55ba5ea098e14ff98b8908eff2051e37b8c2848fb3": 4, + "82d7205d795868938f73eb871b0ca29aff632ce5948e0a5c60d7614222265379": 5, + "f0fb63cf9f42118f799082c74d8d1237434313270ff6b9ac12bb05d1d2955d9a": 6, + "6672c9b2faa6d5b1d04bd287d7a7a71746262c6fb126333f217249aacef6caeb": 7, + "3295bab5db9c7ddcd5a6d8e141b25960f167e553b03f80abaaabcc7670cf7760": 8, + "d5e11dad0ac802f01925eaac1c98efff483616ca0bb02f4be098bcbe1e2d315b": 9, + "ece687b9507957c5bc1ba7e0deff426e8803b81332e0cd507b3558974bdd78b0": 10, + "1830ee48e2942f6e80c5d72f26917ea5384e5c6ff2ca10c4b2ff2c2739e61547": 11, + "6d383df3849d304aa941d6733a0e8205c024d9fa2cfb37d21880af32f7c5c43d": 12, + "a5635fe4c4f3f60d0aa52e3cf7e493da741f6e7e8b15adef534f50030cdafa03": 13, + "fab797bb45eef73ace164770c5fc8d47c8e1c9378e87c1aa296b706759b30831": 14, + "c1bc83a520b4b05557ef8cbf48da15b82a16df02c04274c56cf4604ff9ee50b3": 15, + "d1e0658cf5d053175cab29dff6d21667c5e8527def7c6acc6c0efb814baf6285": 16, + "0bebba1fec7239ddd92b23f81b3b35910ae1d031ac02b5432cd460b1d9445244": 17 + }, + "queries": [ + { + "number": 1, + "expectedDocumentId": 3, + "search": "PASS", + "rag": "NOT_RUN", + "queryId": 4 + }, + { + "number": 2, + "expectedDocumentId": 8, + "search": "PASS", + "rag": "NOT_RUN", + "queryId": 5 + }, + { + "number": 3, + "expectedDocumentId": 13, + "search": "PASS", + "rag": "NOT_RUN", + "queryId": 6 + } + ], + "corpusSha256": "e27ae024506149089279f92b88e13262fa96d651f00e360b2815bc96d648e70d", + "targetFingerprint": "5e1e577159162f6456df2fe8c273831028258d1250e2074384883c10565c2428", + "topK": 3, + "checksSha256": "103c1585e7dd2b45f03eb9ba61463bb9a8647efa8026b270c41a45c8eb677c6c", + "exitCode": 0, + "finishedAt": "2026-10-18T15:40:30.991+09:00", + "elapsedSeconds": 1.995 +} \ No newline at end of file diff --git a/docs/test-results/demo-fresh-20261018/runs/39104533807-1/runtime/a7dc894111e946d9aac3f16b6080ce7f/backend.log b/docs/test-results/demo-fresh-20261018/runs/39104533807-1/runtime/a7dc894111e946d9aac3f16b6080ce7f/backend.log new file mode 100644 index 00000000..5ef8c509 --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39104533807-1/runtime/a7dc894111e946d9aac3f16b6080ce7f/backend.log @@ -0,0 +1,290 @@ +2026-10-18T15:38:09+09:00 Downloading <설정된 서버> +2026-10-18T15:38:12+09:00 .............10%.............20%.............30%.............40%.............50%.............60%..............70%.............80%.............90%.............100% +2026-10-18T15:38:14+09:00 +2026-10-18T15:38:14+09:00 Welcome to Gradle 8.14.5! +2026-10-18T15:38:14+09:00 +2026-10-18T15:38:14+09:00 Here are the highlights of this release: +2026-10-18T15:38:14+09:00 - Java 24 support +2026-10-18T15:38:14+09:00 - GraalVM Native Image toolchain selection +2026-10-18T15:38:14+09:00 - Enhancements to test reporting +2026-10-18T15:38:14+09:00 - Build Authoring improvements +2026-10-18T15:38:14+09:00 +2026-10-18T15:38:14+09:00 For more details see <설정된 서버> +2026-10-18T15:38:14+09:00 +2026-10-18T15:38:14+09:00 To honour the JVM settings for this build a single-use Daemon process will be forked. For more on this, please refer to <설정된 서버> in the Gradle documentation. +2026-10-18T15:38:16+09:00 Daemon will be stopped at the end of the build +2026-10-18T15:39:32+09:00 > Task :compileJava +2026-10-18T15:39:32+09:00 > Task :processResources +2026-10-18T15:39:32+09:00 > Task :classes +2026-10-18T15:39:32+09:00 > Task :resolveMainClassName +2026-10-18T15:39:34+09:00 +2026-10-18T15:39:34+09:00 > Task :bootRun +2026-10-18T15:39:34+09:00 Standard Commons Logging discovery in action with spring-jcl: please remove commons-logging.jar from classpath in order to avoid potential conflicts +2026-10-18T15:39:34+09:00 Standard Commons Logging discovery in action with spring-jcl: please remove commons-logging.jar from classpath in order to avoid potential conflicts +2026-10-18T15:39:34+09:00 +2026-10-18T15:39:34+09:00 . ____ _ __ _ _ +2026-10-18T15:39:34+09:00 /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ +2026-10-18T15:39:34+09:00 ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ +2026-10-18T15:39:34+09:00 \\/ ___)| |_)| | | | | || (_| | ) ) ) ) +2026-10-18T15:39:34+09:00 ' |____| .__|_| |_|_| |_\__, | / / / / +2026-10-18T15:39:34+09:00 =========|_|==============|___/=/_/_/_/ +2026-10-18T15:39:34+09:00 +2026-10-18T15:39:34+09:00 :: Spring Boot :: (v3.5.16) +2026-10-18T15:39:34+09:00 +2026-10-18T15:39:34+09:00 2026-10-18T06:39:33.918Z INFO 11430 --- [docgrid] [ restartedMain] c.opensource.docgrid.DocgridApplication : Starting DocgridApplication using Java 17.0.20.1 with PID 11430 (<작업공간>/backend/build/classes/java/main started by runner in <작업공간>) +2026-10-18T15:39:34+09:00 2026-10-18T06:39:33.921Z INFO 11430 --- [docgrid] [ restartedMain] c.opensource.docgrid.DocgridApplication : The following 1 profile is active: "local" +2026-10-18T15:39:34+09:00 2026-10-18T06:39:33.961Z INFO 11430 --- [docgrid] [ restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable +2026-10-18T15:39:34+09:00 2026-10-18T06:39:33.962Z INFO 11430 --- [docgrid] [ restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' +2026-10-18T15:39:35+09:00 2026-10-18T06:39:35.236Z INFO 11430 --- [docgrid] [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode +2026-10-18T15:39:35+09:00 2026-10-18T06:39:35.238Z INFO 11430 --- [docgrid] [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2026-10-18T15:39:35+09:00 2026-10-18T06:39:35.424Z INFO 11430 --- [docgrid] [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 178 ms. Found 31 JPA repository interfaces. +2026-10-18T15:39:35+09:00 2026-10-18T06:39:35.435Z INFO 11430 --- [docgrid] [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode +2026-10-18T15:39:35+09:00 2026-10-18T06:39:35.436Z INFO 11430 --- [docgrid] [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode. +2026-10-18T15:39:35+09:00 2026-10-18T06:39:35.464Z INFO 11430 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.collection.repository.CollectionDocumentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:39:35+09:00 2026-10-18T06:39:35.464Z INFO 11430 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.collection.repository.CollectionRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:39:35+09:00 2026-10-18T06:39:35.464Z INFO 11430 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.document.repository.DocumentChunkRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:39:35+09:00 2026-10-18T06:39:35.465Z INFO 11430 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.document.repository.DocumentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:39:35+09:00 2026-10-18T06:39:35.465Z INFO 11430 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.document.repository.DocumentVersionRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:39:35+09:00 2026-10-18T06:39:35.465Z INFO 11430 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.document.repository.FileObjectRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:39:35+09:00 2026-10-18T06:39:35.465Z INFO 11430 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.embedding.repository.EmbeddingJobRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:39:35+09:00 2026-10-18T06:39:35.466Z INFO 11430 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.embedding.repository.EmbeddingModelRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:39:35+09:00 2026-10-18T06:39:35.466Z INFO 11430 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.embedding.repository.EmbeddingRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:39:35+09:00 2026-10-18T06:39:35.466Z INFO 11430 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.permission.repository.CollectionPermissionRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:39:35+09:00 2026-10-18T06:39:35.466Z INFO 11430 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.permission.repository.DocumentPermissionRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:39:35+09:00 2026-10-18T06:39:35.466Z INFO 11430 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.permission.repository.UserDocumentAccessCacheRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:39:35+09:00 2026-10-18T06:39:35.467Z INFO 11430 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.rag.repository.RagResponseRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:39:35+09:00 2026-10-18T06:39:35.467Z INFO 11430 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.rag.repository.ResponseCitationRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:39:35+09:00 2026-10-18T06:39:35.467Z INFO 11430 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.search.repository.SearchConversationRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:39:35+09:00 2026-10-18T06:39:35.469Z INFO 11430 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.search.repository.SearchQueryRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:39:35+09:00 2026-10-18T06:39:35.469Z INFO 11430 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.search.repository.SearchResultRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:39:35+09:00 2026-10-18T06:39:35.469Z INFO 11430 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.search.repository.VectorSearchRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:39:35+09:00 2026-10-18T06:39:35.469Z INFO 11430 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.sync.repository.SyncAdminActionRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:39:35+09:00 2026-10-18T06:39:35.470Z INFO 11430 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.sync.repository.SyncConsistencyIssueRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:39:35+09:00 2026-10-18T06:39:35.470Z INFO 11430 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.sync.repository.SyncEventDeliveryAttemptRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:39:35+09:00 2026-10-18T06:39:35.471Z INFO 11430 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.sync.repository.SyncOutboxEventRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:39:35+09:00 2026-10-18T06:39:35.471Z INFO 11430 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.sync.repository.SyncReconciliationRunRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:39:35+09:00 2026-10-18T06:39:35.471Z INFO 11430 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.user.repository.DepartmentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:39:35+09:00 2026-10-18T06:39:35.471Z INFO 11430 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.user.repository.McpAccessTokenRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:39:35+09:00 2026-10-18T06:39:35.471Z INFO 11430 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.user.repository.RoleRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:39:35+09:00 2026-10-18T06:39:35.472Z INFO 11430 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.user.repository.UserRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:39:35+09:00 2026-10-18T06:39:35.473Z INFO 11430 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.user.repository.UserRoleRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:39:35+09:00 2026-10-18T06:39:35.473Z INFO 11430 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.worker.repository.EmbeddingJobAttemptRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:39:35+09:00 2026-10-18T06:39:35.473Z INFO 11430 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.worker.repository.IndexingEventRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:39:35+09:00 2026-10-18T06:39:35.473Z INFO 11430 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.worker.repository.WorkerNodeRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:39:35+09:00 2026-10-18T06:39:35.473Z INFO 11430 --- [docgrid] [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 30 ms. Found 0 Redis repository interfaces. +2026-10-18T15:39:35+09:00 2026-10-18T06:39:35.894Z WARN 11430 --- [docgrid] [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.ai.mcp.server.common.autoconfigure.annotations.McpServerAnnotationScannerAutoConfiguration' of type [org.springframework.ai.mcp.server.common.autoconfigure.annotations.McpServerAnnotationScannerAutoConfiguration] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying). Is this bean getting eagerly injected/applied to a currently created BeanPostProcessor [serverAnnotatedMethodBeanPostProcessor]? Check the corresponding BeanPostProcessor declaration and its dependencies/advisors. If this bean does not have to be post-processed, declare it with ROLE_INFRASTRUCTURE. +2026-10-18T15:39:35+09:00 2026-10-18T06:39:35.896Z WARN 11430 --- [docgrid] [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'serverAnnotatedBeanRegistry' of type [org.springframework.ai.mcp.server.common.autoconfigure.annotations.McpServerAnnotationScannerAutoConfiguration$ServerMcpAnnotatedBeans] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying). Is this bean getting eagerly injected/applied to a currently created BeanPostProcessor [serverAnnotatedMethodBeanPostProcessor]? Check the corresponding BeanPostProcessor declaration and its dependencies/advisors. If this bean does not have to be post-processed, declare it with ROLE_INFRASTRUCTURE. +2026-10-18T15:39:35+09:00 2026-10-18T06:39:35.904Z WARN 11430 --- [docgrid] [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'stringOrNumberMigrationVersionConverter' of type [org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration$StringOrNumberToMigrationVersionConverter] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying). Is this bean getting eagerly injected/applied to a currently created BeanPostProcessor [serverAnnotatedMethodBeanPostProcessor]? Check the corresponding BeanPostProcessor declaration and its dependencies/advisors. If this bean does not have to be post-processed, declare it with ROLE_INFRASTRUCTURE. +2026-10-18T15:39:35+09:00 2026-10-18T06:39:35.908Z WARN 11430 --- [docgrid] [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'spring.ai.mcp.server.annotation-scanner-org.springframework.ai.mcp.server.common.autoconfigure.annotations.McpServerAnnotationScannerProperties' of type [org.springframework.ai.mcp.server.common.autoconfigure.annotations.McpServerAnnotationScannerProperties] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying). Is this bean getting eagerly injected/applied to a currently created BeanPostProcessor [serverAnnotatedMethodBeanPostProcessor]? Check the corresponding BeanPostProcessor declaration and its dependencies/advisors. If this bean does not have to be post-processed, declare it with ROLE_INFRASTRUCTURE. +2026-10-18T15:39:36+09:00 2026-10-18T06:39:36.286Z INFO 11430 --- [docgrid] [ restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port 8080 (http) +2026-10-18T15:39:36+09:00 2026-10-18T06:39:36.298Z INFO 11430 --- [docgrid] [ restartedMain] o.apache.catalina.core.StandardService : Starting service [Tomcat] +2026-10-18T15:39:36+09:00 2026-10-18T06:39:36.299Z INFO 11430 --- [docgrid] [ restartedMain] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.55] +2026-10-18T15:39:36+09:00 2026-10-18T06:39:36.342Z INFO 11430 --- [docgrid] [ restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext +2026-10-18T15:39:36+09:00 2026-10-18T06:39:36.343Z INFO 11430 --- [docgrid] [ restartedMain] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 2380 ms +2026-10-18T15:39:36+09:00 Standard Commons Logging discovery in action with spring-jcl: please remove commons-logging.jar from classpath in order to avoid potential conflicts +2026-10-18T15:39:36+09:00 2026-10-18T06:39:36.662Z INFO 11430 --- [docgrid] [ restartedMain] com.zaxxer.hikari.HikariDataSource : docgrid-local-db-pool - Starting... +2026-10-18T15:39:36+09:00 2026-10-18T06:39:36.774Z INFO 11430 --- [docgrid] [ restartedMain] com.zaxxer.hikari.pool.HikariPool : docgrid-local-db-pool - Added connection org.postgresql.jdbc.PgConnection@530f3232 +2026-10-18T15:39:36+09:00 2026-10-18T06:39:36.776Z INFO 11430 --- [docgrid] [ restartedMain] com.zaxxer.hikari.HikariDataSource : docgrid-local-db-pool - Start completed. +2026-10-18T15:39:36+09:00 2026-10-18T06:39:36.801Z INFO 11430 --- [docgrid] [ restartedMain] org.flywaydb.core.FlywayExecutor : Database: jdbc:postgresql://127.0.0.1:55432/app?currentSchema=public&sslmode=disable (PostgreSQL 17.8) +2026-10-18T15:39:36+09:00 2026-10-18T06:39:36.861Z INFO 11430 --- [docgrid] [ restartedMain] o.f.c.i.s.JdbcTableSchemaHistory : Schema history table "public"."flyway_schema_history" does not exist yet +2026-10-18T15:39:36+09:00 2026-10-18T06:39:36.865Z INFO 11430 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbValidate : Successfully validated 54 migrations (execution time 00:00.044s) +2026-10-18T15:39:36+09:00 2026-10-18T06:39:36.880Z INFO 11430 --- [docgrid] [ restartedMain] o.f.c.i.s.JdbcTableSchemaHistory : Creating Schema History table "public"."flyway_schema_history" ... +2026-10-18T15:39:36+09:00 2026-10-18T06:39:36.916Z INFO 11430 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Current version of schema "public": << Empty Schema >> +2026-10-18T15:39:36+09:00 2026-10-18T06:39:36.920Z INFO 11430 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "1 - init schema" +2026-10-18T15:39:36+09:00 2026-10-18T06:39:36.940Z INFO 11430 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "2 - create departments" +2026-10-18T15:39:36+09:00 2026-10-18T06:39:36.953Z INFO 11430 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "3 - create users" +2026-10-18T15:39:37+09:00 2026-10-18T06:39:36.966Z INFO 11430 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "4 - create file objects" +2026-10-18T15:39:37+09:00 2026-10-18T06:39:36.977Z INFO 11430 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "5 - create documents" +2026-10-18T15:39:37+09:00 2026-10-18T06:39:36.989Z INFO 11430 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "6 - create document versions" +2026-10-18T15:39:37+09:00 2026-10-18T06:39:37.002Z INFO 11430 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "7 - create collections" +2026-10-18T15:39:37+09:00 2026-10-18T06:39:37.013Z INFO 11430 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "8 - create collection documents" +2026-10-18T15:39:37+09:00 2026-10-18T06:39:37.023Z INFO 11430 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "9 - create roles" +2026-10-18T15:39:37+09:00 2026-10-18T06:39:37.032Z INFO 11430 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "10 - create user roles" +2026-10-18T15:39:37+09:00 2026-10-18T06:39:37.042Z INFO 11430 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "11 - create collection permissions" +2026-10-18T15:39:37+09:00 2026-10-18T06:39:37.056Z INFO 11430 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "12 - create document permissions" +2026-10-18T15:39:37+09:00 2026-10-18T06:39:37.070Z INFO 11430 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "13 - create user document access cache" +2026-10-18T15:39:37+09:00 2026-10-18T06:39:37.076Z WARN 11430 --- [docgrid] [ restartedMain] o.f.c.i.s.DefaultSqlScriptExecutor : DB: identifier "uk_user_document_access_cache_user_id_document_id_source_type_source_id" will be truncated to "uk_user_document_access_cache_user_id_document_id_source_type_s" (SQL State: 42622 - Error Code: 0) +2026-10-18T15:39:37+09:00 2026-10-18T06:39:37.084Z INFO 11430 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "14 - create embedding models" +2026-10-18T15:39:37+09:00 2026-10-18T06:39:37.095Z INFO 11430 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "15 - create document chunks" +2026-10-18T15:39:37+09:00 2026-10-18T06:39:37.104Z INFO 11430 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "16 - create embeddings" +2026-10-18T15:39:37+09:00 2026-10-18T06:39:37.115Z INFO 11430 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "17 - create worker nodes" +2026-10-18T15:39:37+09:00 2026-10-18T06:39:37.125Z INFO 11430 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "18 - create embedding jobs" +2026-10-18T15:39:37+09:00 2026-10-18T06:39:37.135Z INFO 11430 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "19 - create embedding job attempts" +2026-10-18T15:39:37+09:00 2026-10-18T06:39:37.144Z INFO 11430 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "20 - create indexing events" +2026-10-18T15:39:37+09:00 2026-10-18T06:39:37.154Z INFO 11430 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "21 - create search queries" +2026-10-18T15:39:37+09:00 2026-10-18T06:39:37.166Z INFO 11430 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "22 - create search results" +2026-10-18T15:39:37+09:00 2026-10-18T06:39:37.178Z INFO 11430 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "23 - create rag responses" +2026-10-18T15:39:37+09:00 2026-10-18T06:39:37.188Z INFO 11430 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "24 - create response citations" +2026-10-18T15:39:37+09:00 2026-10-18T06:39:37.198Z INFO 11430 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "25 - create failover events" +2026-10-18T15:39:37+09:00 2026-10-18T06:39:37.207Z INFO 11430 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "26 - create mcp access tokens" +2026-10-18T15:39:37+09:00 2026-10-18T06:39:37.215Z INFO 11430 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "27 - add embedding model constraints" +2026-10-18T15:39:37+09:00 2026-10-18T06:39:37.222Z INFO 11430 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "28 - seed roles departments admin" +2026-10-18T15:39:37+09:00 2026-10-18T06:39:37.231Z INFO 11430 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "29 - add file object deduplication constraint" +2026-10-18T15:39:37+09:00 2026-10-18T06:39:37.237Z INFO 11430 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "30 - add document version upload metadata" +2026-10-18T15:39:37+09:00 2026-10-18T06:39:37.244Z INFO 11430 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "31 - add worker instance id" +2026-10-18T15:39:37+09:00 2026-10-18T06:39:37.254Z INFO 11430 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "32 - convert vector columns to pgvector" +2026-10-18T15:39:37+09:00 2026-10-18T06:39:37.267Z INFO 11430 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "33 - add embedding job claim token" +2026-10-18T15:39:37+09:00 2026-10-18T06:39:37.273Z INFO 11430 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "34 - add claim token to embedding job attempts" +2026-10-18T15:39:37+09:00 2026-10-18T06:39:37.279Z INFO 11430 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "35 - add embedding job next retry at" +2026-10-18T15:39:37+09:00 2026-10-18T06:39:37.287Z INFO 11430 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "36 - create sync outbox events" +2026-10-18T15:39:37+09:00 2026-10-18T06:39:37.298Z INFO 11430 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "37 - create sync consistency issues" +2026-10-18T15:39:37+09:00 2026-10-18T06:39:37.311Z INFO 11430 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "38 - create sync admin actions" +2026-10-18T15:39:37+09:00 2026-10-18T06:39:37.320Z INFO 11430 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "39 - create sync event delivery attempts" +2026-10-18T15:39:37+09:00 2026-10-18T06:39:37.329Z INFO 11430 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "40 - alter rag responses answer text nullable" +2026-10-18T15:39:37+09:00 2026-10-18T06:39:37.334Z INFO 11430 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "41 - create search conversations" +2026-10-18T15:39:37+09:00 2026-10-18T06:39:37.339Z INFO 11430 --- [docgrid] [ restartedMain] o.f.c.i.s.DefaultSqlScriptExecutor : +--------+ +2026-10-18T15:39:37+09:00 | setval | +2026-10-18T15:39:37+09:00 +--------+ +2026-10-18T15:39:37+09:00 | 1 | +2026-10-18T15:39:37+09:00 +--------+ +2026-10-18T15:39:37+09:00 +2026-10-18T15:39:37+09:00 2026-10-18T06:39:37.345Z INFO 11430 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "42 - create collection closure" +2026-10-18T15:39:37+09:00 2026-10-18T06:39:37.351Z INFO 11430 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "43 - add rag responses claimed at" +2026-10-18T15:39:37+09:00 2026-10-18T06:39:37.356Z INFO 11430 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "44 - create ha probe writes" +2026-10-18T15:39:37+09:00 2026-10-18T06:39:37.363Z INFO 11430 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "45 - create ha probe idempotent writes" +2026-10-18T15:39:37+09:00 2026-10-18T06:39:37.368Z INFO 11430 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "46 - enable pg trgm chunk text index" +2026-10-18T15:39:37+09:00 2026-10-18T06:39:37.381Z INFO 11430 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "47 - create initial upload requests" +2026-10-18T15:39:37+09:00 2026-10-18T06:39:37.389Z INFO 11430 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "48 - track initial upload candidates" +2026-10-18T15:39:37+09:00 2026-10-18T06:39:37.398Z INFO 11430 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "49 - create version upload requests" +2026-10-18T15:39:37+09:00 2026-10-18T06:39:37.406Z INFO 11430 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "50 - track version upload candidates" +2026-10-18T15:39:37+09:00 2026-10-18T06:39:37.417Z INFO 11430 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "51 - add rag response claim lease" +2026-10-18T15:39:37+09:00 2026-10-18T06:39:37.423Z INFO 11430 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "52 - create permission revocation requests" +2026-10-18T15:39:37+09:00 2026-10-18T06:39:37.429Z INFO 11430 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" with repeatable migration "seed bge m3 embedding model" +2026-10-18T15:39:37+09:00 2026-10-18T06:39:37.446Z INFO 11430 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" with repeatable migration "seed test fixtures" +2026-10-18T15:39:37+09:00 2026-10-18T06:39:37.469Z INFO 11430 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Successfully applied 54 migrations to schema "public", now at version v52 (execution time 00:00.223s) +2026-10-18T15:39:37+09:00 2026-10-18T06:39:37.565Z INFO 11430 --- [docgrid] [ restartedMain] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default] +2026-10-18T15:39:37+09:00 2026-10-18T06:39:37.599Z INFO 11430 --- [docgrid] [ restartedMain] org.hibernate.Version : HHH000412: Hibernate ORM core version 6.6.53.Final +2026-10-18T15:39:37+09:00 2026-10-18T06:39:37.622Z INFO 11430 --- [docgrid] [ restartedMain] o.h.c.internal.RegionFactoryInitiator : HHH000026: Second-level cache disabled +2026-10-18T15:39:37+09:00 2026-10-18T06:39:37.835Z INFO 11430 --- [docgrid] [ restartedMain] o.s.o.j.p.SpringPersistenceUnitInfo : No LoadTimeWeaver setup: ignoring JPA class transformer +2026-10-18T15:39:37+09:00 2026-10-18T06:39:37.896Z INFO 11430 --- [docgrid] [ restartedMain] org.hibernate.orm.connections.pooling : HHH10001005: Database info: +2026-10-18T15:39:37+09:00 Database JDBC URL [Connecting through datasource 'HikariDataSource (docgrid-local-db-pool)'] +2026-10-18T15:39:37+09:00 Database driver: undefined/unknown +2026-10-18T15:39:37+09:00 Database version: 17.8 +2026-10-18T15:39:37+09:00 Autocommit mode: undefined/unknown +2026-10-18T15:39:37+09:00 Isolation level: undefined/unknown +2026-10-18T15:39:37+09:00 Minimum pool size: undefined/unknown +2026-10-18T15:39:37+09:00 Maximum pool size: undefined/unknown +2026-10-18T15:39:39+09:00 2026-10-18T06:39:39.085Z INFO 11430 --- [docgrid] [ restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) +2026-10-18T15:39:39+09:00 2026-10-18T06:39:39.135Z INFO 11430 --- [docgrid] [ restartedMain] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' +2026-10-18T15:39:39+09:00 2026-10-18T06:39:39.367Z INFO 11430 --- [docgrid] [ restartedMain] o.s.d.j.r.query.QueryEnhancerFactory : Hibernate is in classpath; If applicable, HQL parser will be used. +2026-10-18T15:39:42+09:00 2026-10-18T06:39:42.435Z WARN 11430 --- [docgrid] [ restartedMain] .s.s.UserDetailsServiceAutoConfiguration : +2026-10-18T15:39:42+09:00 +2026-10-18T15:39:42+09:00 Using generated security password: 6bcbcc19-54f5-4d7f-ae26-83f67b06b059 +2026-10-18T15:39:42+09:00 +2026-10-18T15:39:42+09:00 This generated password is for development use only. Your security configuration must be updated before running your application in production. +2026-10-18T15:39:42+09:00 +2026-10-18T15:39:42+09:00 2026-10-18T06:39:42.441Z INFO 11430 --- [docgrid] [ restartedMain] r$InitializeUserDetailsManagerConfigurer : Global AuthenticationManager configured with UserDetailsService bean with name inMemoryUserDetailsManager +2026-10-18T15:39:43+09:00 2026-10-18T06:39:43.104Z INFO 11430 --- [docgrid] [ restartedMain] o.s.a.m.s.c.a.McpServerAutoConfiguration : Enable tools capabilities, notification: true +2026-10-18T15:39:43+09:00 2026-10-18T06:39:43.105Z INFO 11430 --- [docgrid] [ restartedMain] o.s.a.m.s.c.a.McpServerAutoConfiguration : Registered tools: 3 +2026-10-18T15:39:43+09:00 2026-10-18T06:39:43.105Z INFO 11430 --- [docgrid] [ restartedMain] o.s.a.m.s.c.a.McpServerAutoConfiguration : Enable resources capabilities, notification: true +2026-10-18T15:39:43+09:00 2026-10-18T06:39:43.106Z INFO 11430 --- [docgrid] [ restartedMain] o.s.a.m.s.c.a.McpServerAutoConfiguration : Enable resources templates capabilities, notification: true +2026-10-18T15:39:43+09:00 2026-10-18T06:39:43.106Z INFO 11430 --- [docgrid] [ restartedMain] o.s.a.m.s.c.a.McpServerAutoConfiguration : Enable prompts capabilities, notification: true +2026-10-18T15:39:43+09:00 2026-10-18T06:39:43.106Z INFO 11430 --- [docgrid] [ restartedMain] o.s.a.m.s.c.a.McpServerAutoConfiguration : Enable completions capabilities +2026-10-18T15:39:43+09:00 2026-10-18T06:39:43.411Z INFO 11430 --- [docgrid] [ restartedMain] o.s.b.d.a.OptionalLiveReloadServer : LiveReload server is running on port 35729 +2026-10-18T15:39:43+09:00 2026-10-18T06:39:43.472Z INFO 11430 --- [docgrid] [ restartedMain] o.s.m.s.b.SimpleBrokerMessageHandler : Starting... +2026-10-18T15:39:43+09:00 2026-10-18T06:39:43.472Z INFO 11430 --- [docgrid] [ restartedMain] o.s.m.s.b.SimpleBrokerMessageHandler : BrokerAvailabilityEvent[available=true, SimpleBrokerMessageHandler [org.springframework.messaging.simp.broker.DefaultSubscriptionRegistry@4d328142]] +2026-10-18T15:39:43+09:00 2026-10-18T06:39:43.473Z INFO 11430 --- [docgrid] [ restartedMain] o.s.m.s.b.SimpleBrokerMessageHandler : Started. +2026-10-18T15:39:43+09:00 2026-10-18T06:39:43.504Z INFO 11430 --- [docgrid] [ restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port 8080 (http) with context path '/' +2026-10-18T15:39:43+09:00 2026-10-18T06:39:43.582Z INFO 11430 --- [docgrid] [ restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port 8081 (http) +2026-10-18T15:39:43+09:00 2026-10-18T06:39:43.583Z INFO 11430 --- [docgrid] [ restartedMain] o.apache.catalina.core.StandardService : Starting service [Tomcat] +2026-10-18T15:39:43+09:00 2026-10-18T06:39:43.583Z INFO 11430 --- [docgrid] [ restartedMain] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.55] +2026-10-18T15:39:43+09:00 2026-10-18T06:39:43.599Z INFO 11430 --- [docgrid] [ restartedMain] o.a.c.c.C.[Tomcat-1].[localhost].[/] : Initializing Spring embedded WebApplicationContext +2026-10-18T15:39:43+09:00 2026-10-18T06:39:43.599Z INFO 11430 --- [docgrid] [ restartedMain] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 91 ms +2026-10-18T15:39:43+09:00 Standard Commons Logging discovery in action with spring-jcl: please remove commons-logging.jar from classpath in order to avoid potential conflicts +2026-10-18T15:39:43+09:00 2026-10-18T06:39:43.611Z INFO 11430 --- [docgrid] [ restartedMain] o.s.b.a.e.web.EndpointLinksResolver : Exposing 2 endpoints beneath base path '/actuator' +2026-10-18T15:39:43+09:00 2026-10-18T06:39:43.646Z INFO 11430 --- [docgrid] [ restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port 8081 (http) with context path '/' +2026-10-18T15:39:43+09:00 2026-10-18T06:39:43.666Z INFO 11430 --- [docgrid] [ restartedMain] c.opensource.docgrid.DocgridApplication : Started DocgridApplication in 10.235 seconds (process running for 10.646) +2026-10-18T15:39:43+09:00 2026-10-18T06:39:43.869Z INFO 11430 --- [docgrid] [ restartedMain] c.o.d.d.w.l.WorkerLifecycleManager : 인덱싱 Worker를 등록했습니다. workerId=1, workerName=indexing-worker, instanceId=3b021153-d970-43ca-8d54-e43ed0655355 +2026-10-18T15:39:44+09:00 2026-10-18T06:39:44.003Z INFO 11430 --- [docgrid] [nio-8081-exec-1] o.a.c.c.C.[Tomcat-1].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServletRegistration' +2026-10-18T15:39:44+09:00 2026-10-18T06:39:44.003Z INFO 11430 --- [docgrid] [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServletRegistration' +2026-10-18T15:39:44+09:00 2026-10-18T06:39:44.004Z INFO 11430 --- [docgrid] [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 0 ms +2026-10-18T15:39:49+09:00 2026-10-18T06:39:49.582Z INFO 11430 --- [docgrid] [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' +2026-10-18T15:39:49+09:00 2026-10-18T06:39:49.582Z INFO 11430 --- [docgrid] [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' +2026-10-18T15:39:49+09:00 2026-10-18T06:39:49.584Z INFO 11430 --- [docgrid] [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 2 ms +2026-10-18T15:39:53+09:00 2026-10-18T06:39:53.430Z WARN 11430 --- [docgrid] [nio-8080-exec-5] c.o.d.g.e.GlobalExceptionHandler : [DocGridException] POST /auth/login | code=USER-004 | message=이메일 또는 비밀번호가 올바르지 않습니다. +2026-10-18T15:39:53+09:00 2026-10-18T06:39:53.438Z WARN 11430 --- [docgrid] [nio-8080-exec-5] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [com.opensource.docgrid.global.exception.DocGridException: 이메일 또는 비밀번호가 올바르지 않습니다.] +2026-10-18T15:39:58+09:00 2026-10-18T06:39:58.747Z INFO 11430 --- [docgrid] [ng-worker-job-1] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 시작합니다. workerId=1, jobId=1, attemptId=1, initialStatus=UPLOADED +2026-10-18T15:39:58+09:00 2026-10-18T06:39:58.748Z INFO 11430 --- [docgrid] [ng-worker-job-2] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 시작합니다. workerId=1, jobId=2, attemptId=2, initialStatus=UPLOADED +2026-10-18T15:40:01+09:00 2026-10-18T06:40:01.530Z INFO 11430 --- [docgrid] [ng-worker-job-1] .e.s.c.DocumentIndexingCompletionService : 문서 인덱싱 완료: jobId=1, attemptId=1, documentId=3, versionId=3, chunkCount=1, embeddingCount=1, durationMs=2753 +2026-10-18T15:40:01+09:00 2026-10-18T06:40:01.536Z INFO 11430 --- [docgrid] [ng-worker-job-1] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 완료했습니다. workerId=1, jobId=1, attemptId=1 +2026-10-18T15:40:01+09:00 2026-10-18T06:40:01.764Z INFO 11430 --- [docgrid] [ng-worker-job-1] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 시작합니다. workerId=1, jobId=3, attemptId=3, initialStatus=UPLOADED +2026-10-18T15:40:04+09:00 2026-10-18T06:40:03.964Z INFO 11430 --- [docgrid] [ng-worker-job-2] .e.s.c.DocumentIndexingCompletionService : 문서 인덱싱 완료: jobId=2, attemptId=2, documentId=4, versionId=4, chunkCount=1, embeddingCount=1, durationMs=5173 +2026-10-18T15:40:04+09:00 2026-10-18T06:40:03.971Z INFO 11430 --- [docgrid] [ng-worker-job-2] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 완료했습니다. workerId=1, jobId=2, attemptId=2 +2026-10-18T15:40:04+09:00 2026-10-18T06:40:04.769Z INFO 11430 --- [docgrid] [ng-worker-job-2] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 시작합니다. workerId=1, jobId=4, attemptId=4, initialStatus=UPLOADED +2026-10-18T15:40:05+09:00 2026-10-18T06:40:05.460Z INFO 11430 --- [docgrid] [ng-worker-job-1] .e.s.c.DocumentIndexingCompletionService : 문서 인덱싱 완료: jobId=3, attemptId=3, documentId=5, versionId=5, chunkCount=1, embeddingCount=1, durationMs=3685 +2026-10-18T15:40:05+09:00 2026-10-18T06:40:05.465Z INFO 11430 --- [docgrid] [ng-worker-job-1] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 완료했습니다. workerId=1, jobId=3, attemptId=3 +2026-10-18T15:40:05+09:00 2026-10-18T06:40:05.807Z INFO 11430 --- [docgrid] [ng-worker-job-1] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 시작합니다. workerId=1, jobId=5, attemptId=5, initialStatus=UPLOADED +2026-10-18T15:40:07+09:00 2026-10-18T06:40:07.487Z INFO 11430 --- [docgrid] [ng-worker-job-2] .e.s.c.DocumentIndexingCompletionService : 문서 인덱싱 완료: jobId=4, attemptId=4, documentId=6, versionId=6, chunkCount=1, embeddingCount=1, durationMs=2715 +2026-10-18T15:40:07+09:00 2026-10-18T06:40:07.490Z INFO 11430 --- [docgrid] [ng-worker-job-2] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 완료했습니다. workerId=1, jobId=4, attemptId=4 +2026-10-18T15:40:07+09:00 2026-10-18T06:40:07.792Z INFO 11430 --- [docgrid] [ng-worker-job-2] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 시작합니다. workerId=1, jobId=6, attemptId=6, initialStatus=UPLOADED +2026-10-18T15:40:09+09:00 2026-10-18T06:40:09.028Z INFO 11430 --- [docgrid] [ng-worker-job-1] .e.s.c.DocumentIndexingCompletionService : 문서 인덱싱 완료: jobId=5, attemptId=5, documentId=7, versionId=7, chunkCount=1, embeddingCount=1, durationMs=3237 +2026-10-18T15:40:09+09:00 2026-10-18T06:40:09.031Z INFO 11430 --- [docgrid] [ng-worker-job-1] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 완료했습니다. workerId=1, jobId=5, attemptId=5 +2026-10-18T15:40:09+09:00 2026-10-18T06:40:09.802Z INFO 11430 --- [docgrid] [ng-worker-job-1] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 시작합니다. workerId=1, jobId=7, attemptId=7, initialStatus=UPLOADED +2026-10-18T15:40:12+09:00 2026-10-18T06:40:12.234Z INFO 11430 --- [docgrid] [ng-worker-job-2] .e.s.c.DocumentIndexingCompletionService : 문서 인덱싱 완료: jobId=6, attemptId=6, documentId=8, versionId=8, chunkCount=6, embeddingCount=6, durationMs=4433 +2026-10-18T15:40:12+09:00 2026-10-18T06:40:12.241Z INFO 11430 --- [docgrid] [ng-worker-job-2] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 완료했습니다. workerId=1, jobId=6, attemptId=6 +2026-10-18T15:40:12+09:00 2026-10-18T06:40:12.815Z INFO 11430 --- [docgrid] [ng-worker-job-2] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 시작합니다. workerId=1, jobId=8, attemptId=8, initialStatus=UPLOADED +2026-10-18T15:40:13+09:00 2026-10-18T06:40:13.121Z INFO 11430 --- [docgrid] [ng-worker-job-1] .e.s.c.DocumentIndexingCompletionService : 문서 인덱싱 완료: jobId=7, attemptId=7, documentId=9, versionId=9, chunkCount=7, embeddingCount=7, durationMs=3313 +2026-10-18T15:40:13+09:00 2026-10-18T06:40:13.126Z INFO 11430 --- [docgrid] [ng-worker-job-1] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 완료했습니다. workerId=1, jobId=7, attemptId=7 +2026-10-18T15:40:13+09:00 2026-10-18T06:40:13.675Z INFO 11430 --- [docgrid] [MessageBroker-2] c.o.d.d.w.l.WorkerLeaseRecoveryScheduler : Worker Lease 복구 주기를 완료했습니다. deadWorkers=0, candidates=0, recovered=0, skipped=0, failed=0 +2026-10-18T15:40:13+09:00 2026-10-18T06:40:13.814Z INFO 11430 --- [docgrid] [ng-worker-job-1] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 시작합니다. workerId=1, jobId=9, attemptId=9, initialStatus=UPLOADED +2026-10-18T15:40:16+09:00 2026-10-18T06:40:16.126Z INFO 11430 --- [docgrid] [ng-worker-job-2] .e.s.c.DocumentIndexingCompletionService : 문서 인덱싱 완료: jobId=8, attemptId=8, documentId=10, versionId=10, chunkCount=7, embeddingCount=7, durationMs=3309 +2026-10-18T15:40:16+09:00 2026-10-18T06:40:16.130Z INFO 11430 --- [docgrid] [ng-worker-job-2] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 완료했습니다. workerId=1, jobId=8, attemptId=8 +2026-10-18T15:40:16+09:00 2026-10-18T06:40:16.685Z INFO 11430 --- [docgrid] [ng-worker-job-1] .e.s.c.DocumentIndexingCompletionService : 문서 인덱싱 완료: jobId=9, attemptId=9, documentId=11, versionId=11, chunkCount=6, embeddingCount=6, durationMs=2866 +2026-10-18T15:40:16+09:00 2026-10-18T06:40:16.688Z INFO 11430 --- [docgrid] [ng-worker-job-1] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 완료했습니다. workerId=1, jobId=9, attemptId=9 +2026-10-18T15:40:16+09:00 2026-10-18T06:40:16.820Z INFO 11430 --- [docgrid] [ng-worker-job-1] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 시작합니다. workerId=1, jobId=10, attemptId=10, initialStatus=UPLOADED +2026-10-18T15:40:16+09:00 2026-10-18T06:40:16.825Z INFO 11430 --- [docgrid] [ng-worker-job-2] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 시작합니다. workerId=1, jobId=11, attemptId=11, initialStatus=UPLOADED +2026-10-18T15:40:19+09:00 2026-10-18T06:40:19.295Z INFO 11430 --- [docgrid] [ng-worker-job-2] .e.s.c.DocumentIndexingCompletionService : 문서 인덱싱 완료: jobId=11, attemptId=11, documentId=13, versionId=13, chunkCount=1, embeddingCount=1, durationMs=2460 +2026-10-18T15:40:19+09:00 2026-10-18T06:40:19.299Z INFO 11430 --- [docgrid] [ng-worker-job-2] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 완료했습니다. workerId=1, jobId=11, attemptId=11 +2026-10-18T15:40:19+09:00 2026-10-18T06:40:19.834Z INFO 11430 --- [docgrid] [ng-worker-job-2] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 시작합니다. workerId=1, jobId=12, attemptId=12, initialStatus=UPLOADED +2026-10-18T15:40:20+09:00 2026-10-18T06:40:20.077Z INFO 11430 --- [docgrid] [ng-worker-job-1] .e.s.c.DocumentIndexingCompletionService : 문서 인덱싱 완료: jobId=10, attemptId=10, documentId=12, versionId=12, chunkCount=6, embeddingCount=6, durationMs=3251 +2026-10-18T15:40:20+09:00 2026-10-18T06:40:20.080Z INFO 11430 --- [docgrid] [ng-worker-job-1] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 완료했습니다. workerId=1, jobId=10, attemptId=10 +2026-10-18T15:40:20+09:00 2026-10-18T06:40:20.852Z INFO 11430 --- [docgrid] [ng-worker-job-1] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 시작합니다. workerId=1, jobId=13, attemptId=13, initialStatus=UPLOADED +2026-10-18T15:40:21+09:00 2026-10-18T06:40:21.568Z INFO 11430 --- [docgrid] [ng-worker-job-2] .e.s.c.DocumentIndexingCompletionService : 문서 인덱싱 완료: jobId=12, attemptId=12, documentId=14, versionId=14, chunkCount=1, embeddingCount=1, durationMs=1728 +2026-10-18T15:40:21+09:00 2026-10-18T06:40:21.571Z INFO 11430 --- [docgrid] [ng-worker-job-2] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 완료했습니다. workerId=1, jobId=12, attemptId=12 +2026-10-18T15:40:21+09:00 2026-10-18T06:40:21.863Z INFO 11430 --- [docgrid] [ng-worker-job-2] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 시작합니다. workerId=1, jobId=14, attemptId=14, initialStatus=UPLOADED +2026-10-18T15:40:22+09:00 2026-10-18T06:40:22.525Z INFO 11430 --- [docgrid] [ng-worker-job-1] .e.s.c.DocumentIndexingCompletionService : 문서 인덱싱 완료: jobId=13, attemptId=13, documentId=15, versionId=15, chunkCount=1, embeddingCount=1, durationMs=1669 +2026-10-18T15:40:22+09:00 2026-10-18T06:40:22.528Z INFO 11430 --- [docgrid] [ng-worker-job-1] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 완료했습니다. workerId=1, jobId=13, attemptId=13 +2026-10-18T15:40:22+09:00 2026-10-18T06:40:22.864Z INFO 11430 --- [docgrid] [ng-worker-job-1] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 시작합니다. workerId=1, jobId=15, attemptId=15, initialStatus=UPLOADED +2026-10-18T15:40:23+09:00 2026-10-18T06:40:23.627Z INFO 11430 --- [docgrid] [ng-worker-job-2] .e.s.c.DocumentIndexingCompletionService : 문서 인덱싱 완료: jobId=14, attemptId=14, documentId=16, versionId=16, chunkCount=1, embeddingCount=1, durationMs=1761 +2026-10-18T15:40:23+09:00 2026-10-18T06:40:23.630Z INFO 11430 --- [docgrid] [ng-worker-job-2] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 완료했습니다. workerId=1, jobId=14, attemptId=14 +2026-10-18T15:40:24+09:00 2026-10-18T06:40:24.432Z INFO 11430 --- [docgrid] [ng-worker-job-1] .e.s.c.DocumentIndexingCompletionService : 문서 인덱싱 완료: jobId=15, attemptId=15, documentId=17, versionId=17, chunkCount=1, embeddingCount=1, durationMs=1567 +2026-10-18T15:40:24+09:00 2026-10-18T06:40:24.436Z INFO 11430 --- [docgrid] [ng-worker-job-1] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 완료했습니다. workerId=1, jobId=15, attemptId=15 +2026-10-18T15:40:26+09:00 2026-10-18T06:40:26.263Z INFO 11430 --- [docgrid] [nio-8080-exec-7] c.o.d.d.s.s.q.HybridSearchQueryService : [SEARCH] hybrid modelId=1 topK=3 terms=1 vectorPool=12 lexicalPool=2 merged=12 after=3 +2026-10-18T15:40:26+09:00 2026-10-18T06:40:26.266Z INFO 11430 --- [docgrid] [nio-8080-exec-7] c.o.d.d.search.service.SearchFacade : [SEARCH] live check userId=2 before=3 after=3 liveMs=3 +2026-10-18T15:40:26+09:00 2026-10-18T06:40:26.276Z INFO 11430 --- [docgrid] [nio-8080-exec-7] c.o.d.d.search.service.SearchFacade : [SEARCH] done queryId=1 results=3 latencyMs=329 +2026-10-18T15:40:26+09:00 2026-10-18T06:40:26.281Z INFO 11430 --- [docgrid] [nio-8080-exec-7] c.o.d.domain.rag.service.RagFacade : [RAG] enqueued queryId=1 responseId=1 +2026-10-18T15:40:26+09:00 2026-10-18T06:40:26.602Z INFO 11430 --- [docgrid] [nio-8080-exec-8] c.o.d.d.s.s.q.HybridSearchQueryService : [SEARCH] hybrid modelId=1 topK=3 terms=4 vectorPool=12 lexicalPool=4 merged=12 after=3 +2026-10-18T15:40:26+09:00 2026-10-18T06:40:26.605Z INFO 11430 --- [docgrid] [nio-8080-exec-8] c.o.d.d.search.service.SearchFacade : [SEARCH] live check userId=2 before=3 after=3 liveMs=3 +2026-10-18T15:40:26+09:00 2026-10-18T06:40:26.610Z INFO 11430 --- [docgrid] [nio-8080-exec-8] c.o.d.d.search.service.SearchFacade : [SEARCH] done queryId=2 results=3 latencyMs=299 +2026-10-18T15:40:26+09:00 2026-10-18T06:40:26.612Z INFO 11430 --- [docgrid] [nio-8080-exec-8] c.o.d.domain.rag.service.RagFacade : [RAG] enqueued queryId=2 responseId=2 +2026-10-18T15:40:26+09:00 2026-10-18T06:40:26.893Z INFO 11430 --- [docgrid] [io-8080-exec-10] c.o.d.d.s.s.q.HybridSearchQueryService : [SEARCH] hybrid modelId=1 topK=3 terms=2 vectorPool=12 lexicalPool=3 merged=12 after=3 +2026-10-18T15:40:26+09:00 2026-10-18T06:40:26.897Z INFO 11430 --- [docgrid] [io-8080-exec-10] c.o.d.d.search.service.SearchFacade : [SEARCH] live check userId=2 before=3 after=3 liveMs=4 +2026-10-18T15:40:26+09:00 2026-10-18T06:40:26.902Z INFO 11430 --- [docgrid] [io-8080-exec-10] c.o.d.d.search.service.SearchFacade : [SEARCH] done queryId=3 results=3 latencyMs=243 +2026-10-18T15:40:26+09:00 2026-10-18T06:40:26.904Z INFO 11430 --- [docgrid] [io-8080-exec-10] c.o.d.domain.rag.service.RagFacade : [RAG] enqueued queryId=3 responseId=3 +2026-10-18T15:40:27+09:00 2026-10-18T06:40:27.032Z ERROR 11430 --- [docgrid] [ag-worker-job-2] c.o.d.domain.rag.service.OllamaClient : Ollama 서버 호출 실패: I/O error on POST request for "<설정된 서버> null +2026-10-18T15:40:27+09:00 2026-10-18T06:40:27.033Z ERROR 11430 --- [docgrid] [ag-worker-job-1] c.o.d.domain.rag.service.OllamaClient : Ollama 서버 호출 실패: I/O error on POST request for "<설정된 서버> null +2026-10-18T15:40:27+09:00 2026-10-18T06:40:27.050Z WARN 11430 --- [docgrid] [ag-worker-job-1] c.o.d.domain.rag.service.RagFacade : [RAG] fallback queryId=1 errorCode=RAG-001 +2026-10-18T15:40:27+09:00 2026-10-18T06:40:27.053Z WARN 11430 --- [docgrid] [ag-worker-job-2] c.o.d.domain.rag.service.RagFacade : [RAG] fallback queryId=2 errorCode=RAG-001 +2026-10-18T15:40:28+09:00 2026-10-18T06:40:28.028Z ERROR 11430 --- [docgrid] [ag-worker-job-2] c.o.d.domain.rag.service.OllamaClient : Ollama 서버 호출 실패: I/O error on POST request for "<설정된 서버> null +2026-10-18T15:40:28+09:00 2026-10-18T06:40:28.034Z WARN 11430 --- [docgrid] [ag-worker-job-2] c.o.d.domain.rag.service.RagFacade : [RAG] fallback queryId=3 errorCode=RAG-001 +2026-10-18T15:40:30+09:00 2026-10-18T06:40:30.122Z INFO 11430 --- [docgrid] [nio-8080-exec-9] c.o.d.d.s.s.q.HybridSearchQueryService : [SEARCH] hybrid modelId=1 topK=3 terms=1 vectorPool=12 lexicalPool=2 merged=12 after=3 +2026-10-18T15:40:30+09:00 2026-10-18T06:40:30.125Z INFO 11430 --- [docgrid] [nio-8080-exec-9] c.o.d.d.search.service.SearchFacade : [SEARCH] live check userId=2 before=3 after=3 liveMs=3 +2026-10-18T15:40:30+09:00 2026-10-18T06:40:30.130Z INFO 11430 --- [docgrid] [nio-8080-exec-9] c.o.d.d.search.service.SearchFacade : [SEARCH] done queryId=4 results=3 latencyMs=291 +2026-10-18T15:40:30+09:00 2026-10-18T06:40:30.132Z INFO 11430 --- [docgrid] [nio-8080-exec-9] c.o.d.domain.rag.service.RagFacade : [RAG] enqueued queryId=4 responseId=4 +2026-10-18T15:40:30+09:00 2026-10-18T06:40:30.411Z INFO 11430 --- [docgrid] [io-8080-exec-10] c.o.d.d.s.s.q.HybridSearchQueryService : [SEARCH] hybrid modelId=1 topK=3 terms=4 vectorPool=12 lexicalPool=4 merged=12 after=3 +2026-10-18T15:40:30+09:00 2026-10-18T06:40:30.414Z INFO 11430 --- [docgrid] [io-8080-exec-10] c.o.d.d.search.service.SearchFacade : [SEARCH] live check userId=2 before=3 after=3 liveMs=3 +2026-10-18T15:40:30+09:00 2026-10-18T06:40:30.418Z INFO 11430 --- [docgrid] [io-8080-exec-10] c.o.d.d.search.service.SearchFacade : [SEARCH] done queryId=5 results=3 latencyMs=265 +2026-10-18T15:40:30+09:00 2026-10-18T06:40:30.420Z INFO 11430 --- [docgrid] [io-8080-exec-10] c.o.d.domain.rag.service.RagFacade : [RAG] enqueued queryId=5 responseId=5 +2026-10-18T15:40:30+09:00 2026-10-18T06:40:30.673Z INFO 11430 --- [docgrid] [nio-8080-exec-2] c.o.d.d.s.s.q.HybridSearchQueryService : [SEARCH] hybrid modelId=1 topK=3 terms=2 vectorPool=12 lexicalPool=3 merged=12 after=3 +2026-10-18T15:40:30+09:00 2026-10-18T06:40:30.677Z INFO 11430 --- [docgrid] [nio-8080-exec-2] c.o.d.d.search.service.SearchFacade : [SEARCH] live check userId=2 before=3 after=3 liveMs=3 +2026-10-18T15:40:30+09:00 2026-10-18T06:40:30.684Z INFO 11430 --- [docgrid] [nio-8080-exec-2] c.o.d.d.search.service.SearchFacade : [SEARCH] done queryId=6 results=3 latencyMs=221 +2026-10-18T15:40:30+09:00 2026-10-18T06:40:30.687Z INFO 11430 --- [docgrid] [nio-8080-exec-2] c.o.d.domain.rag.service.RagFacade : [RAG] enqueued queryId=6 responseId=6 +2026-10-18T15:40:31+09:00 2026-10-18T06:40:31.039Z ERROR 11430 --- [docgrid] [ag-worker-job-1] c.o.d.domain.rag.service.OllamaClient : Ollama 서버 호출 실패: I/O error on POST request for "<설정된 서버> null +2026-10-18T15:40:31+09:00 2026-10-18T06:40:31.042Z ERROR 11430 --- [docgrid] [ag-worker-job-2] c.o.d.domain.rag.service.OllamaClient : Ollama 서버 호출 실패: I/O error on POST request for "<설정된 서버> null +2026-10-18T15:40:31+09:00 2026-10-18T06:40:31.044Z WARN 11430 --- [docgrid] [ag-worker-job-1] c.o.d.domain.rag.service.RagFacade : [RAG] fallback queryId=5 errorCode=RAG-001 +2026-10-18T15:40:31+09:00 2026-10-18T06:40:31.048Z WARN 11430 --- [docgrid] [ag-worker-job-2] c.o.d.domain.rag.service.RagFacade : [RAG] fallback queryId=4 errorCode=RAG-001 +2026-10-18T15:40:32+09:00 2026-10-18T06:40:32.045Z ERROR 11430 --- [docgrid] [ag-worker-job-2] c.o.d.domain.rag.service.OllamaClient : Ollama 서버 호출 실패: I/O error on POST request for "<설정된 서버> null +2026-10-18T15:40:32+09:00 2026-10-18T06:40:32.049Z WARN 11430 --- [docgrid] [ag-worker-job-2] c.o.d.domain.rag.service.RagFacade : [RAG] fallback queryId=6 errorCode=RAG-001 +2026-10-18T15:40:43+09:00 2026-10-18T06:40:43.438Z INFO 11430 --- [docgrid] [MessageBroker-1] o.s.w.s.c.WebSocketMessageBrokerStats : WebSocketSession[0 current WS(0)-HttpStream(0)-HttpPoll(0), 0 total, 0 closed abnormally (0 connect failure, 0 send limit, 0 transport error)], stompSubProtocol[processed CONNECT(0)-CONNECTED(0)-DISCONNECT(0)], stompBrokerRelay[null], inboundChannel[pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 0], outboundChannel[pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 0], sockJsScheduler[pool size = 4, active threads = 1, queued tasks = 12, completed tasks = 416] +2026-10-18T15:40:43+09:00 2026-10-18T06:40:43.678Z INFO 11430 --- [docgrid] [MessageBroker-2] c.o.d.d.w.l.WorkerLeaseRecoveryScheduler : Worker Lease 복구 주기를 완료했습니다. deadWorkers=0, candidates=0, recovered=0, skipped=0, failed=0 +2026-10-18T15:41:13+09:00 2026-10-18T06:41:13.683Z INFO 11430 --- [docgrid] [MessageBroker-3] c.o.d.d.w.l.WorkerLeaseRecoveryScheduler : Worker Lease 복구 주기를 완료했습니다. deadWorkers=0, candidates=0, recovered=0, skipped=0, failed=0 diff --git a/docs/test-results/demo-fresh-20261018/runs/39104533807-1/runtime/a7dc894111e946d9aac3f16b6080ce7f/events.jsonl b/docs/test-results/demo-fresh-20261018/runs/39104533807-1/runtime/a7dc894111e946d9aac3f16b6080ce7f/events.jsonl new file mode 100644 index 00000000..45be380e --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39104533807-1/runtime/a7dc894111e946d9aac3f16b6080ce7f/events.jsonl @@ -0,0 +1,5 @@ +{"timestamp": "2026-10-18T15:35:30+09:00", "message": "[시작] 로컬 시연 세션 a7dc894111e946d9aac3f16b6080ce7f · 범위 search"} +{"timestamp": "2026-10-18T15:39:51+09:00", "message": "[준비 완료] Web: <설정된 서버> · verify로 예제 시연을 검사하세요."} +{"timestamp": "2026-10-18T15:40:27+09:00", "message": "[검증 통과] 업로드·인덱싱·검색·원본 검사 완료. 기록: .demo/reports/aaad4b583437450b97df532bb67f6072/summary.json"} +{"timestamp": "2026-10-18T15:40:31+09:00", "message": "[검증 통과] 업로드·인덱싱·검색·원본 검사 완료. 기록: .demo/reports/0f2fe073c8404458ba5e8659304fc365/summary.json"} +{"timestamp": "2026-10-18T15:41:22+09:00", "message": "[종료 완료] 소유 서버·컨테이너 중지, 데이터·원본·모델 캐시 보존"} diff --git a/docs/test-results/demo-fresh-20261018/runs/39104533807-1/runtime/a7dc894111e946d9aac3f16b6080ce7f/frontend.log b/docs/test-results/demo-fresh-20261018/runs/39104533807-1/runtime/a7dc894111e946d9aac3f16b6080ce7f/frontend.log new file mode 100644 index 00000000..d47325da --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39104533807-1/runtime/a7dc894111e946d9aac3f16b6080ce7f/frontend.log @@ -0,0 +1,209 @@ +2026-10-18T15:39:44+09:00 +2026-10-18T15:39:44+09:00 > <이메일 생략> dev +2026-10-18T15:39:44+09:00 > WRANGLER_LOG_PATH=.wrangler/wrangler.log vinext dev --hostname 127.0.0.1 +2026-10-18T15:39:44+09:00 +2026-10-18T15:39:44+09:00 +2026-10-18T15:39:44+09:00 vinext dev (Vite 8.0.13) +2026-10-18T15:39:44+09:00 +2026-10-18T15:39:46+09:00 Using secrets defined in .env.local +2026-10-18T15:39:49+09:00 ➜ Local: <설정된 서버> +2026-10-18T15:39:49+09:00 ➜ Debug: <설정된 서버> +2026-10-18T15:39:50+09:00 GET /api/backend/departments 200 in 421ms +2026-10-18T15:39:51+09:00 GET /login 200 in 1.7s (compile: 1792305584.5s, render: 1.6s) +2026-10-18T15:39:52+09:00 GET /api/backend/departments 200 in 20ms +2026-10-18T15:39:52+09:00 GET /login 200 in 37ms (compile: 1792305584.4s, render: 24ms) +2026-10-18T15:39:53+09:00 POST /api/backend/auth/login 401 in 59ms +2026-10-18T15:39:53+09:00 POST /api/backend/auth/signup 201 in 138ms +2026-10-18T15:39:53+09:00 POST /api/backend/auth/login 200 in 178ms +2026-10-18T15:39:54+09:00 POST /api/backend/api/documents 201 in 696ms +2026-10-18T15:39:54+09:00 POST /api/backend/api/documents 201 in 51ms +2026-10-18T15:39:54+09:00 POST /api/backend/api/documents 201 in 55ms +2026-10-18T15:39:54+09:00 POST /api/backend/api/documents 201 in 50ms +2026-10-18T15:39:54+09:00 POST /api/backend/api/documents 201 in 45ms +2026-10-18T15:39:54+09:00 POST /api/backend/api/documents 201 in 48ms +2026-10-18T15:39:54+09:00 POST /api/backend/api/documents 201 in 46ms +2026-10-18T15:39:54+09:00 POST /api/backend/api/documents 201 in 44ms +2026-10-18T15:39:54+09:00 POST /api/backend/api/documents 201 in 52ms +2026-10-18T15:39:54+09:00 POST /api/backend/api/documents 201 in 50ms +2026-10-18T15:39:54+09:00 POST /api/backend/api/documents 201 in 47ms +2026-10-18T15:39:54+09:00 POST /api/backend/api/documents 201 in 41ms +2026-10-18T15:39:55+09:00 POST /api/backend/api/documents 201 in 42ms +2026-10-18T15:39:55+09:00 POST /api/backend/api/documents 201 in 41ms +2026-10-18T15:39:55+09:00 POST /api/backend/api/documents 201 in 45ms +2026-10-18T15:39:55+09:00 GET /api/backend/api/documents/3/status 200 in 44ms +2026-10-18T15:39:55+09:00 GET /api/backend/api/documents/4/status 200 in 23ms +2026-10-18T15:39:55+09:00 GET /api/backend/api/documents/5/status 200 in 23ms +2026-10-18T15:39:55+09:00 GET /api/backend/api/documents/6/status 200 in 23ms +2026-10-18T15:39:55+09:00 GET /api/backend/api/documents/7/status 200 in 24ms +2026-10-18T15:39:55+09:00 GET /api/backend/api/documents/8/status 200 in 21ms +2026-10-18T15:39:55+09:00 GET /api/backend/api/documents/9/status 200 in 20ms +2026-10-18T15:39:55+09:00 GET /api/backend/api/documents/10/status 200 in 25ms +2026-10-18T15:39:55+09:00 GET /api/backend/api/documents/11/status 200 in 26ms +2026-10-18T15:39:55+09:00 GET /api/backend/api/documents/12/status 200 in 29ms +2026-10-18T15:39:55+09:00 GET /api/backend/api/documents/13/status 200 in 22ms +2026-10-18T15:39:55+09:00 GET /api/backend/api/documents/14/status 200 in 22ms +2026-10-18T15:39:55+09:00 GET /api/backend/api/documents/15/status 200 in 20ms +2026-10-18T15:39:55+09:00 GET /api/backend/api/documents/16/status 200 in 21ms +2026-10-18T15:39:55+09:00 GET /api/backend/api/documents/17/status 200 in 21ms +2026-10-18T15:39:58+09:00 GET /api/backend/api/documents/3/status 200 in 28ms +2026-10-18T15:39:58+09:00 GET /api/backend/api/documents/4/status 200 in 21ms +2026-10-18T15:39:58+09:00 GET /api/backend/api/documents/5/status 200 in 22ms +2026-10-18T15:39:58+09:00 GET /api/backend/api/documents/6/status 200 in 22ms +2026-10-18T15:39:58+09:00 GET /api/backend/api/documents/7/status 200 in 24ms +2026-10-18T15:39:58+09:00 GET /api/backend/api/documents/8/status 200 in 21ms +2026-10-18T15:39:58+09:00 GET /api/backend/api/documents/9/status 200 in 20ms +2026-10-18T15:39:58+09:00 GET /api/backend/api/documents/10/status 200 in 22ms +2026-10-18T15:39:58+09:00 GET /api/backend/api/documents/11/status 200 in 34ms +2026-10-18T15:39:58+09:00 GET /api/backend/api/documents/12/status 200 in 23ms +2026-10-18T15:39:58+09:00 GET /api/backend/api/documents/13/status 200 in 45ms +2026-10-18T15:39:58+09:00 GET /api/backend/api/documents/14/status 200 in 29ms +2026-10-18T15:39:58+09:00 GET /api/backend/api/documents/15/status 200 in 27ms +2026-10-18T15:39:58+09:00 GET /api/backend/api/documents/16/status 200 in 23ms +2026-10-18T15:39:58+09:00 GET /api/backend/api/documents/17/status 200 in 29ms +2026-10-18T15:40:02+09:00 GET /api/backend/api/documents/3/status 200 in 73ms +2026-10-18T15:40:02+09:00 GET /api/backend/api/documents/4/status 200 in 46ms +2026-10-18T15:40:02+09:00 GET /api/backend/api/documents/5/status 200 in 33ms +2026-10-18T15:40:02+09:00 GET /api/backend/api/documents/6/status 200 in 27ms +2026-10-18T15:40:02+09:00 GET /api/backend/api/documents/7/status 200 in 31ms +2026-10-18T15:40:02+09:00 GET /api/backend/api/documents/8/status 200 in 32ms +2026-10-18T15:40:02+09:00 GET /api/backend/api/documents/9/status 200 in 35ms +2026-10-18T15:40:02+09:00 GET /api/backend/api/documents/10/status 200 in 31ms +2026-10-18T15:40:02+09:00 GET /api/backend/api/documents/11/status 200 in 25ms +2026-10-18T15:40:02+09:00 GET /api/backend/api/documents/12/status 200 in 37ms +2026-10-18T15:40:02+09:00 GET /api/backend/api/documents/13/status 200 in 47ms +2026-10-18T15:40:02+09:00 GET /api/backend/api/documents/14/status 200 in 49ms +2026-10-18T15:40:02+09:00 GET /api/backend/api/documents/15/status 200 in 31ms +2026-10-18T15:40:02+09:00 GET /api/backend/api/documents/16/status 200 in 41ms +2026-10-18T15:40:02+09:00 GET /api/backend/api/documents/17/status 200 in 39ms +2026-10-18T15:40:05+09:00 GET /api/backend/api/documents/4/status 200 in 31ms +2026-10-18T15:40:05+09:00 GET /api/backend/api/documents/5/status 200 in 28ms +2026-10-18T15:40:05+09:00 GET /api/backend/api/documents/6/status 200 in 51ms +2026-10-18T15:40:05+09:00 GET /api/backend/api/documents/7/status 200 in 64ms +2026-10-18T15:40:05+09:00 GET /api/backend/api/documents/8/status 200 in 51ms +2026-10-18T15:40:05+09:00 GET /api/backend/api/documents/9/status 200 in 34ms +2026-10-18T15:40:05+09:00 GET /api/backend/api/documents/10/status 200 in 40ms +2026-10-18T15:40:05+09:00 GET /api/backend/api/documents/11/status 200 in 32ms +2026-10-18T15:40:06+09:00 GET /api/backend/api/documents/12/status 200 in 39ms +2026-10-18T15:40:06+09:00 GET /api/backend/api/documents/13/status 200 in 30ms +2026-10-18T15:40:06+09:00 GET /api/backend/api/documents/14/status 200 in 31ms +2026-10-18T15:40:06+09:00 GET /api/backend/api/documents/15/status 200 in 27ms +2026-10-18T15:40:06+09:00 GET /api/backend/api/documents/16/status 200 in 55ms +2026-10-18T15:40:06+09:00 GET /api/backend/api/documents/17/status 200 in 28ms +2026-10-18T15:40:09+09:00 GET /api/backend/api/documents/6/status 200 in 37ms +2026-10-18T15:40:09+09:00 GET /api/backend/api/documents/7/status 200 in 35ms +2026-10-18T15:40:09+09:00 GET /api/backend/api/documents/8/status 200 in 43ms +2026-10-18T15:40:09+09:00 GET /api/backend/api/documents/9/status 200 in 47ms +2026-10-18T15:40:09+09:00 GET /api/backend/api/documents/10/status 200 in 40ms +2026-10-18T15:40:09+09:00 GET /api/backend/api/documents/11/status 200 in 31ms +2026-10-18T15:40:09+09:00 GET /api/backend/api/documents/12/status 200 in 29ms +2026-10-18T15:40:09+09:00 GET /api/backend/api/documents/13/status 200 in 25ms +2026-10-18T15:40:09+09:00 GET /api/backend/api/documents/14/status 200 in 25ms +2026-10-18T15:40:09+09:00 GET /api/backend/api/documents/15/status 200 in 31ms +2026-10-18T15:40:09+09:00 GET /api/backend/api/documents/16/status 200 in 36ms +2026-10-18T15:40:09+09:00 GET /api/backend/api/documents/17/status 200 in 55ms +2026-10-18T15:40:12+09:00 GET /api/backend/api/documents/8/status 200 in 50ms +2026-10-18T15:40:12+09:00 GET /api/backend/api/documents/9/status 200 in 29ms +2026-10-18T15:40:12+09:00 GET /api/backend/api/documents/10/status 200 in 55ms +2026-10-18T15:40:12+09:00 GET /api/backend/api/documents/11/status 200 in 34ms +2026-10-18T15:40:12+09:00 GET /api/backend/api/documents/12/status 200 in 33ms +2026-10-18T15:40:12+09:00 GET /api/backend/api/documents/13/status 200 in 39ms +2026-10-18T15:40:13+09:00 GET /api/backend/api/documents/14/status 200 in 34ms +2026-10-18T15:40:13+09:00 GET /api/backend/api/documents/15/status 200 in 67ms +2026-10-18T15:40:13+09:00 GET /api/backend/api/documents/16/status 200 in 37ms +2026-10-18T15:40:13+09:00 GET /api/backend/api/documents/17/status 200 in 24ms +2026-10-18T15:40:16+09:00 GET /api/backend/api/documents/9/status 200 in 34ms +2026-10-18T15:40:16+09:00 GET /api/backend/api/documents/10/status 200 in 29ms +2026-10-18T15:40:16+09:00 GET /api/backend/api/documents/11/status 200 in 32ms +2026-10-18T15:40:16+09:00 GET /api/backend/api/documents/12/status 200 in 32ms +2026-10-18T15:40:16+09:00 GET /api/backend/api/documents/13/status 200 in 38ms +2026-10-18T15:40:16+09:00 GET /api/backend/api/documents/14/status 200 in 36ms +2026-10-18T15:40:16+09:00 GET /api/backend/api/documents/15/status 200 in 31ms +2026-10-18T15:40:16+09:00 GET /api/backend/api/documents/16/status 200 in 38ms +2026-10-18T15:40:16+09:00 GET /api/backend/api/documents/17/status 200 in 24ms +2026-10-18T15:40:19+09:00 GET /api/backend/api/documents/11/status 200 in 25ms +2026-10-18T15:40:19+09:00 GET /api/backend/api/documents/12/status 200 in 25ms +2026-10-18T15:40:19+09:00 GET /api/backend/api/documents/13/status 200 in 25ms +2026-10-18T15:40:19+09:00 GET /api/backend/api/documents/14/status 200 in 38ms +2026-10-18T15:40:19+09:00 GET /api/backend/api/documents/15/status 200 in 28ms +2026-10-18T15:40:19+09:00 GET /api/backend/api/documents/16/status 200 in 34ms +2026-10-18T15:40:19+09:00 GET /api/backend/api/documents/17/status 200 in 26ms +2026-10-18T15:40:22+09:00 GET /api/backend/api/documents/12/status 200 in 24ms +2026-10-18T15:40:22+09:00 GET /api/backend/api/documents/14/status 200 in 22ms +2026-10-18T15:40:22+09:00 GET /api/backend/api/documents/15/status 200 in 19ms +2026-10-18T15:40:22+09:00 GET /api/backend/api/documents/16/status 200 in 24ms +2026-10-18T15:40:22+09:00 GET /api/backend/api/documents/17/status 200 in 29ms +2026-10-18T15:40:25+09:00 GET /api/backend/api/documents/16/status 200 in 19ms +2026-10-18T15:40:25+09:00 GET /api/backend/api/documents/17/status 200 in 23ms +2026-10-18T15:40:26+09:00 POST /api/backend/search 200 in 380ms +2026-10-18T15:40:26+09:00 POST /api/backend/search 200 in 322ms +2026-10-18T15:40:26+09:00 GET /api/backend/api/documents/8/content 200 in 22ms +2026-10-18T15:40:26+09:00 POST /api/backend/search 200 in 267ms +2026-10-18T15:40:26+09:00 GET /api/backend/api/documents/3/file 200 in 24ms +2026-10-18T15:40:26+09:00 GET /api/backend/api/documents/4/file 200 in 20ms +2026-10-18T15:40:26+09:00 GET /api/backend/api/documents/5/file 200 in 22ms +2026-10-18T15:40:27+09:00 GET /api/backend/api/documents/6/file 200 in 22ms +2026-10-18T15:40:27+09:00 GET /api/backend/api/documents/7/file 200 in 31ms +2026-10-18T15:40:27+09:00 GET /api/backend/api/documents/8/file 200 in 26ms +2026-10-18T15:40:27+09:00 GET /api/backend/api/documents/9/file 200 in 19ms +2026-10-18T15:40:27+09:00 GET /api/backend/api/documents/10/file 200 in 18ms +2026-10-18T15:40:27+09:00 GET /api/backend/api/documents/11/file 200 in 20ms +2026-10-18T15:40:27+09:00 GET /api/backend/api/documents/12/file 200 in 21ms +2026-10-18T15:40:27+09:00 GET /api/backend/api/documents/13/file 200 in 17ms +2026-10-18T15:40:27+09:00 GET /api/backend/api/documents/14/file 200 in 17ms +2026-10-18T15:40:27+09:00 GET /api/backend/api/documents/15/file 200 in 17ms +2026-10-18T15:40:27+09:00 GET /api/backend/api/documents/16/file 200 in 18ms +2026-10-18T15:40:27+09:00 GET /api/backend/api/documents/17/file 200 in 17ms +2026-10-18T15:40:27+09:00 GET /api/backend/departments 200 in 16ms +2026-10-18T15:40:28+09:00 GET /login 200 in 39ms (compile: 1792305584.4s, render: 27ms) +2026-10-18T15:40:29+09:00 POST /api/backend/auth/login 200 in 103ms +2026-10-18T15:40:29+09:00 POST /api/backend/api/documents 201 in 24ms +2026-10-18T15:40:29+09:00 POST /api/backend/api/documents 201 in 23ms +2026-10-18T15:40:29+09:00 POST /api/backend/api/documents 201 in 29ms +2026-10-18T15:40:29+09:00 POST /api/backend/api/documents 201 in 24ms +2026-10-18T15:40:29+09:00 POST /api/backend/api/documents 201 in 27ms +2026-10-18T15:40:29+09:00 POST /api/backend/api/documents 201 in 23ms +2026-10-18T15:40:29+09:00 POST /api/backend/api/documents 201 in 19ms +2026-10-18T15:40:29+09:00 POST /api/backend/api/documents 201 in 20ms +2026-10-18T15:40:29+09:00 POST /api/backend/api/documents 201 in 20ms +2026-10-18T15:40:29+09:00 POST /api/backend/api/documents 201 in 20ms +2026-10-18T15:40:29+09:00 POST /api/backend/api/documents 201 in 19ms +2026-10-18T15:40:29+09:00 POST /api/backend/api/documents 201 in 19ms +2026-10-18T15:40:29+09:00 POST /api/backend/api/documents 201 in 18ms +2026-10-18T15:40:29+09:00 POST /api/backend/api/documents 201 in 18ms +2026-10-18T15:40:29+09:00 POST /api/backend/api/documents 201 in 20ms +2026-10-18T15:40:29+09:00 GET /api/backend/api/documents/3/status 200 in 17ms +2026-10-18T15:40:29+09:00 GET /api/backend/api/documents/4/status 200 in 16ms +2026-10-18T15:40:29+09:00 GET /api/backend/api/documents/5/status 200 in 17ms +2026-10-18T15:40:29+09:00 GET /api/backend/api/documents/6/status 200 in 19ms +2026-10-18T15:40:29+09:00 GET /api/backend/api/documents/7/status 200 in 21ms +2026-10-18T15:40:29+09:00 GET /api/backend/api/documents/8/status 200 in 18ms +2026-10-18T15:40:29+09:00 GET /api/backend/api/documents/9/status 200 in 19ms +2026-10-18T15:40:29+09:00 GET /api/backend/api/documents/10/status 200 in 18ms +2026-10-18T15:40:29+09:00 GET /api/backend/api/documents/11/status 200 in 15ms +2026-10-18T15:40:29+09:00 GET /api/backend/api/documents/12/status 200 in 40ms +2026-10-18T15:40:29+09:00 GET /api/backend/api/documents/13/status 200 in 22ms +2026-10-18T15:40:29+09:00 GET /api/backend/api/documents/14/status 200 in 18ms +2026-10-18T15:40:29+09:00 GET /api/backend/api/documents/15/status 200 in 16ms +2026-10-18T15:40:29+09:00 GET /api/backend/api/documents/16/status 200 in 19ms +2026-10-18T15:40:29+09:00 GET /api/backend/api/documents/17/status 200 in 17ms +2026-10-18T15:40:30+09:00 POST /api/backend/search 200 in 315ms +2026-10-18T15:40:30+09:00 POST /api/backend/search 200 in 287ms +2026-10-18T15:40:30+09:00 GET /api/backend/api/documents/8/content 200 in 17ms +2026-10-18T15:40:30+09:00 POST /api/backend/search 200 in 247ms +2026-10-18T15:40:30+09:00 GET /api/backend/api/documents/3/file 200 in 20ms +2026-10-18T15:40:30+09:00 GET /api/backend/api/documents/4/file 200 in 17ms +2026-10-18T15:40:30+09:00 GET /api/backend/api/documents/5/file 200 in 16ms +2026-10-18T15:40:30+09:00 GET /api/backend/api/documents/6/file 200 in 18ms +2026-10-18T15:40:30+09:00 GET /api/backend/api/documents/7/file 200 in 17ms +2026-10-18T15:40:30+09:00 GET /api/backend/api/documents/8/file 200 in 17ms +2026-10-18T15:40:30+09:00 GET /api/backend/api/documents/9/file 200 in 24ms +2026-10-18T15:40:30+09:00 GET /api/backend/api/documents/10/file 200 in 17ms +2026-10-18T15:40:30+09:00 GET /api/backend/api/documents/11/file 200 in 19ms +2026-10-18T15:40:30+09:00 GET /api/backend/api/documents/12/file 200 in 15ms +2026-10-18T15:40:30+09:00 GET /api/backend/api/documents/13/file 200 in 16ms +2026-10-18T15:40:30+09:00 GET /api/backend/api/documents/14/file 200 in 15ms +2026-10-18T15:40:30+09:00 GET /api/backend/api/documents/15/file 200 in 15ms +2026-10-18T15:40:30+09:00 GET /api/backend/api/documents/16/file 200 in 18ms +2026-10-18T15:40:30+09:00 GET /api/backend/api/documents/17/file 200 in 18ms +2026-10-18T15:40:33+09:00 GET /login?returnTo=%2Fsearch 200 in 54ms (compile: 1792305584.4s, render: 32ms) +2026-10-18T15:41:19+09:00 ➜ Tunnel closed diff --git a/docs/test-results/demo-fresh-20261018/runs/39104533807-1/runtime/a7dc894111e946d9aac3f16b6080ce7f/install.log b/docs/test-results/demo-fresh-20261018/runs/39104533807-1/runtime/a7dc894111e946d9aac3f16b6080ce7f/install.log new file mode 100644 index 00000000..aa66b439 --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39104533807-1/runtime/a7dc894111e946d9aac3f16b6080ce7f/install.log @@ -0,0 +1,17 @@ +2026-10-18T15:35:34+09:00 npm warn deprecated @esbuild-kit/<이메일 생략>: Merged into tsx: <설정된 서버> +2026-10-18T15:35:34+09:00 npm warn deprecated @esbuild-kit/<이메일 생략>: Merged into tsx: <설정된 서버> +2026-10-18T15:35:49+09:00 +2026-10-18T15:35:49+09:00 added 502 packages, and audited 503 packages in 18s +2026-10-18T15:35:49+09:00 +2026-10-18T15:35:49+09:00 156 packages are looking for funding +2026-10-18T15:35:49+09:00 run `npm fund` for details +2026-10-18T15:35:49+09:00 +2026-10-18T15:35:49+09:00 30 vulnerabilities (1 low, 6 moderate, 23 high) +2026-10-18T15:35:49+09:00 +2026-10-18T15:35:49+09:00 To address issues that do not require attention, run: +2026-10-18T15:35:49+09:00 npm audit fix +2026-10-18T15:35:49+09:00 +2026-10-18T15:35:49+09:00 To address all issues (including breaking changes), run: +2026-10-18T15:35:49+09:00 npm audit fix --force +2026-10-18T15:35:49+09:00 +2026-10-18T15:35:49+09:00 Run `npm audit` for details. diff --git a/docs/test-results/demo-fresh-20261018/runs/39104533807-1/runtime/a7dc894111e946d9aac3f16b6080ce7f/services.log b/docs/test-results/demo-fresh-20261018/runs/39104533807-1/runtime/a7dc894111e946d9aac3f16b6080ce7f/services.log new file mode 100644 index 00000000..42da6b46 --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39104533807-1/runtime/a7dc894111e946d9aac3f16b6080ce7f/services.log @@ -0,0 +1,607 @@ +2026-10-18T15:35:49+09:00 [local-services] 로컬 PostgreSQL·Valkey·Embedding Provider를 시작합니다. +2026-10-18T15:35:50+09:00 postgres Pulling +2026-10-18T15:35:50+09:00 valkey Pulling +2026-10-18T15:35:51+09:00 4831516dd0cb Pulling fs layer +2026-10-18T15:35:51+09:00 9f4a0348ad2e Pulling fs layer +2026-10-18T15:35:51+09:00 6b6aac9d7476 Pulling fs layer +2026-10-18T15:35:51+09:00 d8a310896f84 Pulling fs layer +2026-10-18T15:35:51+09:00 99bb4ce30ad3 Pulling fs layer +2026-10-18T15:35:51+09:00 31b6f2223c4b Pulling fs layer +2026-10-18T15:35:51+09:00 9da35c01411f Pulling fs layer +2026-10-18T15:35:51+09:00 a6809e067bc1 Pulling fs layer +2026-10-18T15:35:51+09:00 10643155f463 Pulling fs layer +2026-10-18T15:35:51+09:00 a7ef49b2a615 Pulling fs layer +2026-10-18T15:35:51+09:00 29d37472e7c3 Pulling fs layer +2026-10-18T15:35:51+09:00 4d2363af1825 Pulling fs layer +2026-10-18T15:35:51+09:00 4a14fbbe260a Pulling fs layer +2026-10-18T15:35:51+09:00 8cced4a98c7e Pulling fs layer +2026-10-18T15:35:51+09:00 4909bfb5f5ed Pulling fs layer +2026-10-18T15:35:51+09:00 3e1ddef0ec36 Pulling fs layer +2026-10-18T15:35:51+09:00 d8a310896f84 Waiting +2026-10-18T15:35:51+09:00 99bb4ce30ad3 Waiting +2026-10-18T15:35:51+09:00 31b6f2223c4b Waiting +2026-10-18T15:35:51+09:00 9da35c01411f Waiting +2026-10-18T15:35:51+09:00 a6809e067bc1 Waiting +2026-10-18T15:35:51+09:00 10643155f463 Waiting +2026-10-18T15:35:51+09:00 a7ef49b2a615 Waiting +2026-10-18T15:35:51+09:00 29d37472e7c3 Waiting +2026-10-18T15:35:51+09:00 4909bfb5f5ed Waiting +2026-10-18T15:35:51+09:00 4d2363af1825 Waiting +2026-10-18T15:35:51+09:00 3e1ddef0ec36 Waiting +2026-10-18T15:35:51+09:00 4a14fbbe260a Waiting +2026-10-18T15:35:51+09:00 8cced4a98c7e Waiting +2026-10-18T15:35:51+09:00 e2de96513ba9 Already exists +2026-10-18T15:35:51+09:00 d78be5cc1e53 Pulling fs layer +2026-10-18T15:35:51+09:00 fe2c7735354a Pulling fs layer +2026-10-18T15:35:51+09:00 95121e5a56c0 Pulling fs layer +2026-10-18T15:35:51+09:00 d9f591c70342 Pulling fs layer +2026-10-18T15:35:51+09:00 4f4fb700ef54 Pulling fs layer +2026-10-18T15:35:51+09:00 4ed485d78f72 Pulling fs layer +2026-10-18T15:35:51+09:00 d78be5cc1e53 Waiting +2026-10-18T15:35:51+09:00 fe2c7735354a Waiting +2026-10-18T15:35:51+09:00 95121e5a56c0 Waiting +2026-10-18T15:35:51+09:00 d9f591c70342 Waiting +2026-10-18T15:35:51+09:00 4f4fb700ef54 Waiting +2026-10-18T15:35:51+09:00 4ed485d78f72 Waiting +2026-10-18T15:35:51+09:00 9f4a0348ad2e Downloading [==================================================>] 1.169kB/1.169kB +2026-10-18T15:35:51+09:00 6b6aac9d7476 Downloading [> ] 48.51kB/4.534MB +2026-10-18T15:35:51+09:00 9f4a0348ad2e Verifying Checksum +2026-10-18T15:35:51+09:00 9f4a0348ad2e Download complete +2026-10-18T15:35:51+09:00 4831516dd0cb Downloading [> ] 294.2kB/28.23MB +2026-10-18T15:35:51+09:00 6b6aac9d7476 Verifying Checksum +2026-10-18T15:35:51+09:00 6b6aac9d7476 Download complete +2026-10-18T15:35:51+09:00 4831516dd0cb Verifying Checksum +2026-10-18T15:35:51+09:00 4831516dd0cb Download complete +2026-10-18T15:35:51+09:00 4831516dd0cb Extracting [> ] 294.9kB/28.23MB +2026-10-18T15:35:51+09:00 d8a310896f84 Downloading [> ] 15.74kB/1.25MB +2026-10-18T15:35:51+09:00 4831516dd0cb Extracting [=========> ] 5.308MB/28.23MB +2026-10-18T15:35:51+09:00 d8a310896f84 Verifying Checksum +2026-10-18T15:35:51+09:00 d8a310896f84 Download complete +2026-10-18T15:35:51+09:00 99bb4ce30ad3 Downloading [> ] 81.28kB/8.066MB +2026-10-18T15:35:51+09:00 99bb4ce30ad3 Verifying Checksum +2026-10-18T15:35:51+09:00 99bb4ce30ad3 Download complete +2026-10-18T15:35:51+09:00 31b6f2223c4b Downloading [> ] 15.74kB/1.196MB +2026-10-18T15:35:51+09:00 31b6f2223c4b Verifying Checksum +2026-10-18T15:35:51+09:00 31b6f2223c4b Download complete +2026-10-18T15:35:51+09:00 4831516dd0cb Extracting [================> ] 9.142MB/28.23MB +2026-10-18T15:35:52+09:00 4831516dd0cb Extracting [=====================> ] 12.39MB/28.23MB +2026-10-18T15:35:52+09:00 9da35c01411f Downloading [==================================================>] 116B/116B +2026-10-18T15:35:52+09:00 9da35c01411f Verifying Checksum +2026-10-18T15:35:52+09:00 9da35c01411f Download complete +2026-10-18T15:35:52+09:00 a6809e067bc1 Downloading [==================================================>] 3.141kB/3.141kB +2026-10-18T15:35:52+09:00 a6809e067bc1 Download complete +2026-10-18T15:35:52+09:00 10643155f463 Downloading [> ] 528.3kB/112.8MB +2026-10-18T15:35:52+09:00 4831516dd0cb Extracting [====================================> ] 20.64MB/28.23MB +2026-10-18T15:35:52+09:00 10643155f463 Downloading [===> ] 7.907MB/112.8MB +2026-10-18T15:35:52+09:00 a7ef49b2a615 Downloading [================> ] 3.499kB/10.3kB +2026-10-18T15:35:52+09:00 a7ef49b2a615 Downloading [==================================================>] 10.3kB/10.3kB +2026-10-18T15:35:52+09:00 a7ef49b2a615 Verifying Checksum +2026-10-18T15:35:52+09:00 a7ef49b2a615 Download complete +2026-10-18T15:35:52+09:00 29d37472e7c3 Download complete +2026-10-18T15:35:52+09:00 10643155f463 Downloading [=======> ] 15.83MB/112.8MB +2026-10-18T15:35:52+09:00 4831516dd0cb Extracting [==========================================> ] 23.89MB/28.23MB +2026-10-18T15:35:52+09:00 10643155f463 Downloading [====================> ] 46.27MB/112.8MB +2026-10-18T15:35:52+09:00 4d2363af1825 Downloading [==================================================>] 168B/168B +2026-10-18T15:35:52+09:00 4d2363af1825 Verifying Checksum +2026-10-18T15:35:52+09:00 4d2363af1825 Download complete +2026-10-18T15:35:52+09:00 4831516dd0cb Extracting [===============================================> ] 26.54MB/28.23MB +2026-10-18T15:35:52+09:00 10643155f463 Downloading [==================================> ] 77.27MB/112.8MB +2026-10-18T15:35:52+09:00 4a14fbbe260a Downloading [=============================> ] 3.5kB/5.84kB +2026-10-18T15:35:52+09:00 4a14fbbe260a Download complete +2026-10-18T15:35:52+09:00 10643155f463 Downloading [================================================> ] 110.4MB/112.8MB +2026-10-18T15:35:52+09:00 10643155f463 Verifying Checksum +2026-10-18T15:35:52+09:00 10643155f463 Download complete +2026-10-18T15:35:52+09:00 4831516dd0cb Extracting [================================================> ] 27.13MB/28.23MB +2026-10-18T15:35:52+09:00 8cced4a98c7e Downloading [==================================================>] 186B/186B +2026-10-18T15:35:52+09:00 8cced4a98c7e Verifying Checksum +2026-10-18T15:35:52+09:00 8cced4a98c7e Download complete +2026-10-18T15:35:52+09:00 4909bfb5f5ed Downloading [=> ] 3.498kB/123.1kB +2026-10-18T15:35:52+09:00 4909bfb5f5ed Downloading [==================================================>] 123.1kB/123.1kB +2026-10-18T15:35:52+09:00 4909bfb5f5ed Verifying Checksum +2026-10-18T15:35:52+09:00 4909bfb5f5ed Download complete +2026-10-18T15:35:52+09:00 3e1ddef0ec36 Downloading [> ] 15.74kB/1.451MB +2026-10-18T15:35:52+09:00 3e1ddef0ec36 Verifying Checksum +2026-10-18T15:35:52+09:00 3e1ddef0ec36 Download complete +2026-10-18T15:35:52+09:00 4831516dd0cb Extracting [================================================> ] 27.43MB/28.23MB +2026-10-18T15:35:52+09:00 d78be5cc1e53 Downloading [==================================================>] 951B/951B +2026-10-18T15:35:52+09:00 d78be5cc1e53 Verifying Checksum +2026-10-18T15:35:52+09:00 d78be5cc1e53 Download complete +2026-10-18T15:35:52+09:00 d78be5cc1e53 Extracting [==================================================>] 951B/951B +2026-10-18T15:35:52+09:00 d78be5cc1e53 Extracting [==================================================>] 951B/951B +2026-10-18T15:35:52+09:00 fe2c7735354a Downloading [=> ] 15.79kB/666.5kB +2026-10-18T15:35:52+09:00 fe2c7735354a Downloading [==================================================>] 666.5kB/666.5kB +2026-10-18T15:35:52+09:00 fe2c7735354a Verifying Checksum +2026-10-18T15:35:52+09:00 fe2c7735354a Download complete +2026-10-18T15:35:53+09:00 4831516dd0cb Extracting [==================================================>] 28.23MB/28.23MB +2026-10-18T15:35:53+09:00 95121e5a56c0 Downloading [> ] 146.9kB/14.29MB +2026-10-18T15:35:53+09:00 d9f591c70342 Downloading [==================================================>] 140B/140B +2026-10-18T15:35:53+09:00 d9f591c70342 Verifying Checksum +2026-10-18T15:35:53+09:00 d9f591c70342 Download complete +2026-10-18T15:35:53+09:00 95121e5a56c0 Verifying Checksum +2026-10-18T15:35:53+09:00 95121e5a56c0 Download complete +2026-10-18T15:35:53+09:00 4f4fb700ef54 Downloading [==================================================>] 32B/32B +2026-10-18T15:35:53+09:00 4f4fb700ef54 Download complete +2026-10-18T15:35:53+09:00 4831516dd0cb Pull complete +2026-10-18T15:35:53+09:00 9f4a0348ad2e Extracting [==================================================>] 1.169kB/1.169kB +2026-10-18T15:35:53+09:00 9f4a0348ad2e Extracting [==================================================>] 1.169kB/1.169kB +2026-10-18T15:35:53+09:00 4ed485d78f72 Downloading [==================================================>] 668B/668B +2026-10-18T15:35:53+09:00 4ed485d78f72 Verifying Checksum +2026-10-18T15:35:53+09:00 4ed485d78f72 Download complete +2026-10-18T15:35:53+09:00 9f4a0348ad2e Pull complete +2026-10-18T15:35:53+09:00 6b6aac9d7476 Extracting [> ] 65.54kB/4.534MB +2026-10-18T15:35:53+09:00 6b6aac9d7476 Extracting [==> ] 262.1kB/4.534MB +2026-10-18T15:35:54+09:00 d78be5cc1e53 Pull complete +2026-10-18T15:35:54+09:00 6b6aac9d7476 Extracting [=================================> ] 3.08MB/4.534MB +2026-10-18T15:35:54+09:00 fe2c7735354a Extracting [==> ] 32.77kB/666.5kB +2026-10-18T15:35:54+09:00 6b6aac9d7476 Extracting [==================================================>] 4.534MB/4.534MB +2026-10-18T15:35:54+09:00 fe2c7735354a Extracting [==================================================>] 666.5kB/666.5kB +2026-10-18T15:35:54+09:00 fe2c7735354a Extracting [==================================================>] 666.5kB/666.5kB +2026-10-18T15:35:54+09:00 6b6aac9d7476 Pull complete +2026-10-18T15:35:54+09:00 d8a310896f84 Extracting [=> ] 32.77kB/1.25MB +2026-10-18T15:35:54+09:00 d8a310896f84 Extracting [==================================================>] 1.25MB/1.25MB +2026-10-18T15:35:54+09:00 d8a310896f84 Pull complete +2026-10-18T15:35:54+09:00 99bb4ce30ad3 Extracting [> ] 98.3kB/8.066MB +2026-10-18T15:35:54+09:00 fe2c7735354a Pull complete +2026-10-18T15:35:54+09:00 95121e5a56c0 Extracting [> ] 163.8kB/14.29MB +2026-10-18T15:35:54+09:00 99bb4ce30ad3 Extracting [===================> ] 3.146MB/8.066MB +2026-10-18T15:35:54+09:00 95121e5a56c0 Extracting [======================> ] 6.554MB/14.29MB +2026-10-18T15:35:54+09:00 99bb4ce30ad3 Extracting [=============================> ] 4.817MB/8.066MB +2026-10-18T15:35:54+09:00 95121e5a56c0 Extracting [===============================================> ] 13.6MB/14.29MB +2026-10-18T15:35:54+09:00 95121e5a56c0 Extracting [==================================================>] 14.29MB/14.29MB +2026-10-18T15:35:54+09:00 99bb4ce30ad3 Extracting [======================================> ] 6.291MB/8.066MB +2026-10-18T15:35:54+09:00 95121e5a56c0 Pull complete +2026-10-18T15:35:54+09:00 d9f591c70342 Extracting [==================================================>] 140B/140B +2026-10-18T15:35:54+09:00 d9f591c70342 Extracting [==================================================>] 140B/140B +2026-10-18T15:35:54+09:00 d9f591c70342 Pull complete +2026-10-18T15:35:54+09:00 4f4fb700ef54 Extracting [==================================================>] 32B/32B +2026-10-18T15:35:54+09:00 4f4fb700ef54 Extracting [==================================================>] 32B/32B +2026-10-18T15:35:54+09:00 4f4fb700ef54 Pull complete +2026-10-18T15:35:54+09:00 4ed485d78f72 Extracting [==================================================>] 668B/668B +2026-10-18T15:35:54+09:00 4ed485d78f72 Extracting [==================================================>] 668B/668B +2026-10-18T15:35:54+09:00 4ed485d78f72 Pull complete +2026-10-18T15:35:54+09:00 valkey Pulled +2026-10-18T15:35:54+09:00 99bb4ce30ad3 Extracting [==================================================>] 8.066MB/8.066MB +2026-10-18T15:35:54+09:00 99bb4ce30ad3 Pull complete +2026-10-18T15:35:54+09:00 31b6f2223c4b Extracting [=> ] 32.77kB/1.196MB +2026-10-18T15:35:54+09:00 31b6f2223c4b Extracting [==================================================>] 1.196MB/1.196MB +2026-10-18T15:35:54+09:00 31b6f2223c4b Extracting [==================================================>] 1.196MB/1.196MB +2026-10-18T15:35:54+09:00 31b6f2223c4b Pull complete +2026-10-18T15:35:54+09:00 9da35c01411f Extracting [==================================================>] 116B/116B +2026-10-18T15:35:54+09:00 9da35c01411f Extracting [==================================================>] 116B/116B +2026-10-18T15:35:54+09:00 9da35c01411f Pull complete +2026-10-18T15:35:54+09:00 a6809e067bc1 Extracting [==================================================>] 3.141kB/3.141kB +2026-10-18T15:35:54+09:00 a6809e067bc1 Extracting [==================================================>] 3.141kB/3.141kB +2026-10-18T15:35:54+09:00 a6809e067bc1 Pull complete +2026-10-18T15:35:54+09:00 10643155f463 Extracting [> ] 557.1kB/112.8MB +2026-10-18T15:35:54+09:00 10643155f463 Extracting [===> ] 7.242MB/112.8MB +2026-10-18T15:35:54+09:00 10643155f463 Extracting [====> ] 10.03MB/112.8MB +2026-10-18T15:35:55+09:00 10643155f463 Extracting [======> ] 14.48MB/112.8MB +2026-10-18T15:35:55+09:00 10643155f463 Extracting [========> ] 18.94MB/112.8MB +2026-10-18T15:35:55+09:00 10643155f463 Extracting [===========> ] 25.07MB/112.8MB +2026-10-18T15:35:55+09:00 10643155f463 Extracting [===============> ] 33.98MB/112.8MB +2026-10-18T15:35:55+09:00 10643155f463 Extracting [===================> ] 42.89MB/112.8MB +2026-10-18T15:35:55+09:00 10643155f463 Extracting [=======================> ] 52.36MB/112.8MB +2026-10-18T15:35:55+09:00 10643155f463 Extracting [=========================> ] 57.38MB/112.8MB +2026-10-18T15:35:55+09:00 10643155f463 Extracting [============================> ] 63.5MB/112.8MB +2026-10-18T15:35:55+09:00 10643155f463 Extracting [================================> ] 74.09MB/112.8MB +2026-10-18T15:35:56+09:00 10643155f463 Extracting [====================================> ] 83MB/112.8MB +2026-10-18T15:35:56+09:00 10643155f463 Extracting [========================================> ] 91.91MB/112.8MB +2026-10-18T15:35:56+09:00 10643155f463 Extracting [==========================================> ] 96.93MB/112.8MB +2026-10-18T15:35:56+09:00 10643155f463 Extracting [============================================> ] 100.8MB/112.8MB +2026-10-18T15:35:56+09:00 10643155f463 Extracting [==============================================> ] 104.7MB/112.8MB +2026-10-18T15:35:56+09:00 10643155f463 Extracting [===============================================> ] 107.5MB/112.8MB +2026-10-18T15:35:56+09:00 10643155f463 Extracting [================================================> ] 109.2MB/112.8MB +2026-10-18T15:35:56+09:00 10643155f463 Extracting [=================================================> ] 111.4MB/112.8MB +2026-10-18T15:35:57+09:00 10643155f463 Extracting [==================================================>] 112.8MB/112.8MB +2026-10-18T15:35:57+09:00 10643155f463 Pull complete +2026-10-18T15:35:57+09:00 a7ef49b2a615 Extracting [==================================================>] 10.3kB/10.3kB +2026-10-18T15:35:57+09:00 a7ef49b2a615 Extracting [==================================================>] 10.3kB/10.3kB +2026-10-18T15:35:57+09:00 a7ef49b2a615 Pull complete +2026-10-18T15:35:57+09:00 29d37472e7c3 Extracting [==================================================>] 128B/128B +2026-10-18T15:35:57+09:00 29d37472e7c3 Extracting [==================================================>] 128B/128B +2026-10-18T15:35:57+09:00 29d37472e7c3 Pull complete +2026-10-18T15:35:57+09:00 4d2363af1825 Extracting [==================================================>] 168B/168B +2026-10-18T15:35:57+09:00 4d2363af1825 Extracting [==================================================>] 168B/168B +2026-10-18T15:35:57+09:00 4d2363af1825 Pull complete +2026-10-18T15:35:57+09:00 4a14fbbe260a Extracting [==================================================>] 5.84kB/5.84kB +2026-10-18T15:35:57+09:00 4a14fbbe260a Extracting [==================================================>] 5.84kB/5.84kB +2026-10-18T15:35:57+09:00 4a14fbbe260a Pull complete +2026-10-18T15:35:57+09:00 8cced4a98c7e Extracting [==================================================>] 186B/186B +2026-10-18T15:35:57+09:00 8cced4a98c7e Extracting [==================================================>] 186B/186B +2026-10-18T15:35:57+09:00 8cced4a98c7e Pull complete +2026-10-18T15:35:57+09:00 4909bfb5f5ed Extracting [=============> ] 32.77kB/123.1kB +2026-10-18T15:35:57+09:00 4909bfb5f5ed Extracting [==================================================>] 123.1kB/123.1kB +2026-10-18T15:35:57+09:00 4909bfb5f5ed Pull complete +2026-10-18T15:35:57+09:00 3e1ddef0ec36 Extracting [=> ] 32.77kB/1.451MB +2026-10-18T15:35:57+09:00 3e1ddef0ec36 Extracting [==================================================>] 1.451MB/1.451MB +2026-10-18T15:35:57+09:00 3e1ddef0ec36 Pull complete +2026-10-18T15:35:57+09:00 postgres Pulled +2026-10-18T15:35:58+09:00 #1 [internal] load local bake definitions +2026-10-18T15:35:58+09:00 #1 reading from stdin 449B done +2026-10-18T15:35:58+09:00 #1 DONE 0.0s +2026-10-18T15:35:58+09:00 +2026-10-18T15:35:58+09:00 #2 [internal] load build definition from Dockerfile +2026-10-18T15:35:58+09:00 #2 transferring dockerfile: 500B 0.0s done +2026-10-18T15:35:58+09:00 #2 DONE 0.0s +2026-10-18T15:35:58+09:00 +2026-10-18T15:35:58+09:00 #3 [internal] load metadata for docker.io/library/python:3.11-slim +2026-10-18T15:35:58+09:00 #3 ... +2026-10-18T15:35:58+09:00 +2026-10-18T15:35:58+09:00 #4 [auth] library/python:pull token for registry-1.docker.io +2026-10-18T15:35:58+09:00 #4 DONE 0.0s +2026-10-18T15:35:58+09:00 +2026-10-18T15:35:58+09:00 #3 [internal] load metadata for docker.io/library/python:3.11-slim +2026-10-18T15:35:59+09:00 #3 DONE 0.9s +2026-10-18T15:35:59+09:00 +2026-10-18T15:35:59+09:00 #5 [internal] load .dockerignore +2026-10-18T15:35:59+09:00 #5 transferring context: 2B done +2026-10-18T15:35:59+09:00 #5 DONE 0.0s +2026-10-18T15:35:59+09:00 +2026-10-18T15:35:59+09:00 #6 [internal] load build context +2026-10-18T15:35:59+09:00 #6 transferring context: 16.83kB done +2026-10-18T15:35:59+09:00 #6 DONE 0.0s +2026-10-18T15:35:59+09:00 +2026-10-18T15:35:59+09:00 #7 [1/8] FROM docker.io/library/python:3.11-slim@sha256:e88e9763f943ec1834f992a4b51e0f24500486803e8bc534e5767af9ea65f6ce +2026-10-18T15:35:59+09:00 #7 resolve docker.io/library/python:3.11-slim@sha256:e88e9763f943ec1834f992a4b51e0f24500486803e8bc534e5767af9ea65f6ce done +2026-10-18T15:35:59+09:00 #7 sha256:e88e9763f943ec1834f992a4b51e0f24500486803e8bc534e5767af9ea65f6ce 10.37kB / 10.37kB done +2026-10-18T15:35:59+09:00 #7 sha256:e529028263dbe6910a2d96f7d2b8f5266385e917fd45d286ef166977c094a51e 1.75kB / 1.75kB done +2026-10-18T15:35:59+09:00 #7 sha256:541096ae9b05d3b850341b78790e2ed31e94d5aa0ea086933c6ff0c09ffa2e63 5.49kB / 5.49kB done +2026-10-18T15:35:59+09:00 #7 sha256:ecc510c1e359bdc007b39802570bb7e4dec7d6ebccf357c3201a74299113e05e 5.24MB / 29.84MB 0.1s +2026-10-18T15:35:59+09:00 #7 sha256:0f752a1982d6f819fc2c9e78ac1514c63f2f2e1dec7885ffd4cb6809ba4a26ca 0B / 1.29MB 0.1s +2026-10-18T15:35:59+09:00 #7 sha256:759a7f30c31818dda4c97b407b24d93da479c306568d185ced927e1a749164f1 0B / 14.46MB 0.1s +2026-10-18T15:35:59+09:00 #7 sha256:ecc510c1e359bdc007b39802570bb7e4dec7d6ebccf357c3201a74299113e05e 29.84MB / 29.84MB 0.2s done +2026-10-18T15:35:59+09:00 #7 sha256:0f752a1982d6f819fc2c9e78ac1514c63f2f2e1dec7885ffd4cb6809ba4a26ca 1.29MB / 1.29MB 0.2s done +2026-10-18T15:35:59+09:00 #7 sha256:496c1a902b3a93cea3e54b90b79dbcaa0e58ad90c3fe9dd0a43c9557dc47f17d 0B / 250B 0.2s +2026-10-18T15:35:59+09:00 #7 extracting sha256:ecc510c1e359bdc007b39802570bb7e4dec7d6ebccf357c3201a74299113e05e +2026-10-18T15:35:59+09:00 #7 sha256:759a7f30c31818dda4c97b407b24d93da479c306568d185ced927e1a749164f1 14.46MB / 14.46MB 0.3s done +2026-10-18T15:35:59+09:00 #7 sha256:496c1a902b3a93cea3e54b90b79dbcaa0e58ad90c3fe9dd0a43c9557dc47f17d 250B / 250B 0.3s done +2026-10-18T15:36:00+09:00 #7 extracting sha256:ecc510c1e359bdc007b39802570bb7e4dec7d6ebccf357c3201a74299113e05e 0.9s done +2026-10-18T15:36:00+09:00 #7 extracting sha256:0f752a1982d6f819fc2c9e78ac1514c63f2f2e1dec7885ffd4cb6809ba4a26ca +2026-10-18T15:36:00+09:00 #7 extracting sha256:0f752a1982d6f819fc2c9e78ac1514c63f2f2e1dec7885ffd4cb6809ba4a26ca 0.1s done +2026-10-18T15:36:00+09:00 #7 extracting sha256:759a7f30c31818dda4c97b407b24d93da479c306568d185ced927e1a749164f1 0.1s +2026-10-18T15:36:01+09:00 #7 extracting sha256:759a7f30c31818dda4c97b407b24d93da479c306568d185ced927e1a749164f1 0.7s done +2026-10-18T15:36:01+09:00 #7 extracting sha256:496c1a902b3a93cea3e54b90b79dbcaa0e58ad90c3fe9dd0a43c9557dc47f17d +2026-10-18T15:36:01+09:00 #7 extracting sha256:496c1a902b3a93cea3e54b90b79dbcaa0e58ad90c3fe9dd0a43c9557dc47f17d done +2026-10-18T15:36:01+09:00 #7 DONE 2.2s +2026-10-18T15:36:01+09:00 +2026-10-18T15:36:01+09:00 #8 [2/8] WORKDIR /app +2026-10-18T15:36:01+09:00 #8 DONE 0.0s +2026-10-18T15:36:01+09:00 +2026-10-18T15:36:01+09:00 #9 [3/8] COPY requirements.txt . +2026-10-18T15:36:01+09:00 #9 DONE 0.0s +2026-10-18T15:36:01+09:00 +2026-10-18T15:36:01+09:00 #10 [4/8] RUN pip install --no-cache-dir -r requirements.txt +2026-10-18T15:36:03+09:00 #10 1.539 Looking in indexes: <설정된 서버> <설정된 서버> +2026-10-18T15:36:03+09:00 #10 1.541 Ignoring torch: markers 'sys_platform != "linux" or platform_machine != "x86_64"' don't match your environment +2026-10-18T15:36:03+09:00 #10 1.901 Collecting fastapi==0.115.0 (from -r requirements.txt (line 4)) +2026-10-18T15:36:03+09:00 #10 1.923 Downloading fastapi-0.115.0-py3-none-any.whl.metadata (27 kB) +2026-10-18T15:36:03+09:00 #10 2.161 Collecting uvicorn==0.30.6 (from -r requirements.txt (line 5)) +2026-10-18T15:36:03+09:00 #10 2.164 Downloading uvicorn-0.30.6-py3-none-any.whl.metadata (6.6 kB) +2026-10-18T15:36:03+09:00 #10 2.382 Collecting FlagEmbedding==1.2.11 (from -r requirements.txt (line 6)) +2026-10-18T15:36:04+09:00 #10 2.386 Downloading FlagEmbedding-1.2.11.tar.gz (147 kB) +2026-10-18T15:36:04+09:00 #10 2.390 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 147.1/147.1 kB 90.0 MB/s eta 0:00:00 +2026-10-18T15:36:04+09:00 #10 2.417 Preparing metadata (setup.py): started +2026-10-18T15:36:04+09:00 #10 2.735 Preparing metadata (setup.py): finished with status 'done' +2026-10-18T15:36:04+09:00 #10 2.894 Collecting torch==2.4.1+cpu (from -r requirements.txt (line 9)) +2026-10-18T15:36:04+09:00 #10 2.948 Downloading <설정된 서버> (194.9 MB) +2026-10-18T15:36:05+09:00 #10 3.671 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 194.9/194.9 MB 278.9 MB/s eta 0:00:00 +2026-10-18T15:36:05+09:00 #10 4.193 Collecting transformers==4.44.2 (from -r requirements.txt (line 11)) +2026-10-18T15:36:05+09:00 #10 4.197 Downloading transformers-4.44.2-py3-none-any.whl.metadata (43 kB) +2026-10-18T15:36:05+09:00 #10 4.200 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 43.7/43.7 kB 263.9 MB/s eta 0:00:00 +2026-10-18T15:36:05+09:00 #10 4.440 Collecting peft==0.12.0 (from -r requirements.txt (line 12)) +2026-10-18T15:36:06+09:00 #10 4.444 Downloading peft-0.12.0-py3-none-any.whl.metadata (13 kB) +2026-10-18T15:36:06+09:00 #10 5.015 Collecting numpy==1.26.4 (from -r requirements.txt (line 13)) +2026-10-18T15:36:06+09:00 #10 5.019 Downloading numpy-1.26.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (61 kB) +2026-10-18T15:36:06+09:00 #10 5.021 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 61.0/61.0 kB 247.4 MB/s eta 0:00:00 +2026-10-18T15:36:06+09:00 #10 5.366 Collecting pyarrow==21.0.0 (from -r requirements.txt (line 15)) +2026-10-18T15:36:07+09:00 #10 5.371 Downloading pyarrow-21.0.0-cp311-cp311-manylinux_2_28_x86_64.whl.metadata (3.3 kB) +2026-10-18T15:36:07+09:00 #10 5.504 Collecting starlette<0.39.0,>=0.37.2 (from fastapi==0.115.0->-r requirements.txt (line 4)) +2026-10-18T15:36:07+09:00 #10 5.509 Downloading starlette-0.38.6-py3-none-any.whl.metadata (6.0 kB) +2026-10-18T15:36:07+09:00 #10 5.907 Collecting pydantic!=1.8,!=1.8.1,!=2.0.0,!=2.0.1,!=2.1.0,<3.0.0,>=1.7.4 (from fastapi==0.115.0->-r requirements.txt (line 4)) +2026-10-18T15:36:07+09:00 #10 5.910 Downloading pydantic-2.14.1-py3-none-any.whl.metadata (133 kB) +2026-10-18T15:36:07+09:00 #10 5.913 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 133.0/133.0 kB 276.8 MB/s eta 0:00:00 +2026-10-18T15:36:07+09:00 #10 5.959 Collecting typing-extensions>=4.8.0 (from fastapi==0.115.0->-r requirements.txt (line 4)) +2026-10-18T15:36:07+09:00 #10 5.962 Downloading typing_extensions-4.16.0-py3-none-any.whl.metadata (3.3 kB) +2026-10-18T15:36:07+09:00 #10 6.209 Collecting click>=7.0 (from uvicorn==0.30.6->-r requirements.txt (line 5)) +2026-10-18T15:36:07+09:00 #10 6.212 Downloading click-8.5.0-py3-none-any.whl.metadata (2.6 kB) +2026-10-18T15:36:07+09:00 #10 6.430 Collecting h11>=0.8 (from uvicorn==0.30.6->-r requirements.txt (line 5)) +2026-10-18T15:36:08+09:00 #10 6.433 Downloading h11-0.16.0-py3-none-any.whl.metadata (8.3 kB) +2026-10-18T15:36:08+09:00 #10 6.695 Collecting datasets (from FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:36:08+09:00 #10 6.699 Downloading datasets-5.1.0-py3-none-any.whl.metadata (24 kB) +2026-10-18T15:36:08+09:00 #10 6.945 Collecting accelerate>=0.20.1 (from FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:36:08+09:00 #10 6.949 Downloading accelerate-1.15.0-py3-none-any.whl.metadata (19 kB) +2026-10-18T15:36:08+09:00 #10 7.183 Collecting sentence_transformers (from FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:36:08+09:00 #10 7.188 Downloading sentence_transformers-6.1.0-py3-none-any.whl.metadata (20 kB) +2026-10-18T15:36:08+09:00 #10 7.266 Collecting filelock (from torch==2.4.1+cpu->-r requirements.txt (line 9)) +2026-10-18T15:36:08+09:00 #10 7.269 Downloading filelock-4.2.1-py3-none-any.whl.metadata (2.0 kB) +2026-10-18T15:36:08+09:00 #10 7.361 Collecting sympy (from torch==2.4.1+cpu->-r requirements.txt (line 9)) +2026-10-18T15:36:09+09:00 #10 7.364 Downloading sympy-1.14.0-py3-none-any.whl.metadata (12 kB) +2026-10-18T15:36:09+09:00 #10 7.423 Collecting networkx (from torch==2.4.1+cpu->-r requirements.txt (line 9)) +2026-10-18T15:36:09+09:00 #10 7.427 Downloading networkx-3.6.1-py3-none-any.whl.metadata (6.8 kB) +2026-10-18T15:36:09+09:00 #10 7.454 Collecting jinja2 (from torch==2.4.1+cpu->-r requirements.txt (line 9)) +2026-10-18T15:36:09+09:00 #10 7.458 Downloading <설정된 서버> (2.9 kB) +2026-10-18T15:36:09+09:00 #10 7.517 Collecting fsspec (from torch==2.4.1+cpu->-r requirements.txt (line 9)) +2026-10-18T15:36:09+09:00 #10 7.521 Downloading fsspec-2026.9.0-py3-none-any.whl.metadata (10 kB) +2026-10-18T15:36:09+09:00 #10 8.001 Collecting huggingface-hub<1.0,>=0.23.2 (from transformers==4.44.2->-r requirements.txt (line 11)) +2026-10-18T15:36:09+09:00 #10 8.005 Downloading huggingface_hub-0.36.2-py3-none-any.whl.metadata (15 kB) +2026-10-18T15:36:09+09:00 #10 8.022 Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.11/site-packages (from transformers==4.44.2->-r requirements.txt (line 11)) (26.3) +2026-10-18T15:36:09+09:00 #10 8.268 Collecting pyyaml>=5.1 (from transformers==4.44.2->-r requirements.txt (line 11)) +2026-10-18T15:36:09+09:00 #10 8.272 Downloading pyyaml-6.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (2.4 kB) +2026-10-18T15:36:10+09:00 #10 8.994 Collecting regex!=2019.12.17 (from transformers==4.44.2->-r requirements.txt (line 11)) +2026-10-18T15:36:10+09:00 #10 8.997 Downloading regex-2026.9.29-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (40 kB) +2026-10-18T15:36:10+09:00 #10 9.000 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 40.6/40.6 kB 264.5 MB/s eta 0:00:00 +2026-10-18T15:36:10+09:00 #10 9.040 Collecting requests (from transformers==4.44.2->-r requirements.txt (line 11)) +2026-10-18T15:36:10+09:00 #10 9.044 Downloading requests-2.34.2-py3-none-any.whl.metadata (4.8 kB) +2026-10-18T15:36:10+09:00 #10 9.388 Collecting safetensors>=0.4.1 (from transformers==4.44.2->-r requirements.txt (line 11)) +2026-10-18T15:36:11+09:00 #10 9.391 Downloading safetensors-0.8.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.2 kB) +2026-10-18T15:36:11+09:00 #10 9.833 Collecting tokenizers<0.20,>=0.19 (from transformers==4.44.2->-r requirements.txt (line 11)) +2026-10-18T15:36:11+09:00 #10 9.838 Downloading tokenizers-0.19.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (6.7 kB) +2026-10-18T15:36:11+09:00 #10 9.898 Collecting tqdm>=4.27 (from transformers==4.44.2->-r requirements.txt (line 11)) +2026-10-18T15:36:11+09:00 #10 9.902 Downloading tqdm-4.70.1-py3-none-any.whl.metadata (57 kB) +2026-10-18T15:36:11+09:00 #10 9.904 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 57.4/57.4 kB 270.9 MB/s eta 0:00:00 +2026-10-18T15:36:11+09:00 #10 10.21 Collecting psutil (from peft==0.12.0->-r requirements.txt (line 12)) +2026-10-18T15:36:11+09:00 #10 10.22 Downloading psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl.metadata (22 kB) +2026-10-18T15:36:12+09:00 #10 10.65 Collecting hf-xet<2.0.0,>=1.1.3 (from huggingface-hub<1.0,>=0.23.2->transformers==4.44.2->-r requirements.txt (line 11)) +2026-10-18T15:36:12+09:00 #10 10.66 Downloading hf_xet-1.7.0-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.metadata (4.9 kB) +2026-10-18T15:36:12+09:00 #10 10.96 Collecting annotated-types>=0.6.0 (from pydantic!=1.8,!=1.8.1,!=2.0.0,!=2.0.1,!=2.1.0,<3.0.0,>=1.7.4->fastapi==0.115.0->-r requirements.txt (line 4)) +2026-10-18T15:36:12+09:00 #10 10.96 Downloading annotated_types-0.8.0-py3-none-any.whl.metadata (15 kB) +2026-10-18T15:36:13+09:00 #10 12.03 Collecting pydantic-core==2.50.1 (from pydantic!=1.8,!=1.8.1,!=2.0.0,!=2.0.1,!=2.1.0,<3.0.0,>=1.7.4->fastapi==0.115.0->-r requirements.txt (line 4)) +2026-10-18T15:36:13+09:00 #10 12.03 Downloading pydantic_core-2.50.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (6.5 kB) +2026-10-18T15:36:13+09:00 #10 12.26 Collecting typing-inspection>=0.4.4 (from pydantic!=1.8,!=1.8.1,!=2.0.0,!=2.0.1,!=2.1.0,<3.0.0,>=1.7.4->fastapi==0.115.0->-r requirements.txt (line 4)) +2026-10-18T15:36:13+09:00 #10 12.26 Downloading typing_inspection-0.4.4-py3-none-any.whl.metadata (2.6 kB) +2026-10-18T15:36:14+09:00 #10 12.53 Collecting anyio<5,>=3.4.0 (from starlette<0.39.0,>=0.37.2->fastapi==0.115.0->-r requirements.txt (line 4)) +2026-10-18T15:36:14+09:00 #10 12.53 Downloading anyio-4.15.1-py3-none-any.whl.metadata (4.7 kB) +2026-10-18T15:36:14+09:00 #10 12.68 INFO: pip is looking at multiple versions of datasets to determine which version is compatible with other requirements. This could take a while. +2026-10-18T15:36:14+09:00 #10 12.68 Collecting datasets (from FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:36:14+09:00 #10 12.69 Downloading datasets-5.0.1-py3-none-any.whl.metadata (23 kB) +2026-10-18T15:36:14+09:00 #10 13.00 Collecting dill<0.4.2,>=0.3.0 (from datasets->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:36:14+09:00 #10 13.00 Downloading dill-0.4.1-py3-none-any.whl.metadata (10 kB) +2026-10-18T15:36:14+09:00 #10 13.35 Collecting pandas (from datasets->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:36:15+09:00 #10 13.35 Downloading pandas-3.0.6-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.metadata (79 kB) +2026-10-18T15:36:15+09:00 #10 13.35 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 79.5/79.5 kB 298.6 MB/s eta 0:00:00 +2026-10-18T15:36:15+09:00 #10 13.74 Collecting httpx<1.0.0 (from datasets->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:36:15+09:00 #10 13.74 Downloading httpx-0.28.1-py3-none-any.whl.metadata (7.1 kB) +2026-10-18T15:36:15+09:00 #10 14.13 Collecting xxhash (from datasets->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:36:15+09:00 #10 14.14 Downloading xxhash-4.0.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (17 kB) +2026-10-18T15:36:15+09:00 #10 14.37 Collecting multiprocess<0.70.20 (from datasets->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:36:16+09:00 #10 14.37 Downloading multiprocess-0.70.19-py311-none-any.whl.metadata (7.5 kB) +2026-10-18T15:36:16+09:00 #10 14.40 Collecting fsspec (from torch==2.4.1+cpu->-r requirements.txt (line 9)) +2026-10-18T15:36:16+09:00 #10 14.40 Downloading fsspec-2026.6.0-py3-none-any.whl.metadata (10 kB) +2026-10-18T15:36:16+09:00 #10 14.64 Collecting charset_normalizer<4,>=2 (from requests->transformers==4.44.2->-r requirements.txt (line 11)) +2026-10-18T15:36:16+09:00 #10 14.65 Downloading charset_normalizer-3.5.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (46 kB) +2026-10-18T15:36:16+09:00 #10 14.65 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 46.4/46.4 kB 189.9 MB/s eta 0:00:00 +2026-10-18T15:36:16+09:00 #10 14.68 Collecting idna<4,>=2.5 (from requests->transformers==4.44.2->-r requirements.txt (line 11)) +2026-10-18T15:36:16+09:00 #10 14.68 Downloading idna-3.20-py3-none-any.whl.metadata (7.2 kB) +2026-10-18T15:36:16+09:00 #10 14.73 Collecting urllib3<3,>=1.26 (from requests->transformers==4.44.2->-r requirements.txt (line 11)) +2026-10-18T15:36:16+09:00 #10 14.73 Downloading urllib3-2.8.0-py3-none-any.whl.metadata (7.4 kB) +2026-10-18T15:36:16+09:00 #10 14.76 Collecting certifi>=2023.5.7 (from requests->transformers==4.44.2->-r requirements.txt (line 11)) +2026-10-18T15:36:16+09:00 #10 14.77 Downloading certifi-2026.7.22-py3-none-any.whl.metadata (2.5 kB) +2026-10-18T15:36:16+09:00 #10 14.85 Collecting MarkupSafe>=2.0 (from jinja2->torch==2.4.1+cpu->-r requirements.txt (line 9)) +2026-10-18T15:36:16+09:00 #10 14.86 Downloading markupsafe-3.0.4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (2.7 kB) +2026-10-18T15:36:16+09:00 #10 14.95 INFO: pip is looking at multiple versions of sentence-transformers to determine which version is compatible with other requirements. This could take a while. +2026-10-18T15:36:16+09:00 #10 14.95 Collecting sentence_transformers (from FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:36:16+09:00 #10 14.96 Downloading sentence_transformers-6.0.1-py3-none-any.whl.metadata (20 kB) +2026-10-18T15:36:16+09:00 #10 14.98 Downloading sentence_transformers-6.0.0-py3-none-any.whl.metadata (20 kB) +2026-10-18T15:36:16+09:00 #10 15.01 Downloading sentence_transformers-5.7.0-py3-none-any.whl.metadata (18 kB) +2026-10-18T15:36:16+09:00 #10 15.40 Collecting scikit-learn>=0.22.0 (from sentence_transformers->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:36:17+09:00 #10 15.40 Downloading scikit_learn-1.9.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.metadata (9.3 kB) +2026-10-18T15:36:17+09:00 #10 15.75 Collecting scipy>=1.0.0 (from sentence_transformers->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:36:17+09:00 #10 15.76 Downloading scipy-1.17.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.metadata (62 kB) +2026-10-18T15:36:17+09:00 #10 15.76 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 62.1/62.1 kB 278.4 MB/s eta 0:00:00 +2026-10-18T15:36:17+09:00 #10 15.82 Collecting mpmath<1.4,>=1.1.0 (from sympy->torch==2.4.1+cpu->-r requirements.txt (line 9)) +2026-10-18T15:36:17+09:00 #10 15.83 Downloading mpmath-1.3.0-py3-none-any.whl.metadata (8.6 kB) +2026-10-18T15:36:18+09:00 #10 16.73 Collecting aiohttp!=4.0.0a0,!=4.0.0a1 (from fsspec[http]<=2026.6.0,>=2023.1.0->datasets->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:36:18+09:00 #10 16.74 Downloading aiohttp-3.14.5-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (8.3 kB) +2026-10-18T15:36:18+09:00 #10 16.97 Collecting httpcore==1.* (from httpx<1.0.0->datasets->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:36:18+09:00 #10 16.98 Downloading httpcore-1.0.9-py3-none-any.whl.metadata (21 kB) +2026-10-18T15:36:18+09:00 #10 17.15 Collecting joblib>=1.4.0 (from scikit-learn>=0.22.0->sentence_transformers->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:36:18+09:00 #10 17.16 Downloading joblib-1.6.0-py3-none-any.whl.metadata (6.5 kB) +2026-10-18T15:36:18+09:00 #10 17.30 Collecting narwhals>=2.0.1 (from scikit-learn>=0.22.0->sentence_transformers->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:36:18+09:00 #10 17.32 Downloading narwhals-2.27.1-py3-none-any.whl.metadata (15 kB) +2026-10-18T15:36:19+09:00 #10 17.53 Collecting threadpoolctl>=3.5.0 (from scikit-learn>=0.22.0->sentence_transformers->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:36:19+09:00 #10 17.54 Downloading threadpoolctl-3.7.0-py3-none-any.whl.metadata (24 kB) +2026-10-18T15:36:19+09:00 #10 17.90 Collecting python-dateutil>=2.8.2 (from pandas->datasets->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:36:19+09:00 #10 17.90 Downloading python_dateutil-2.9.0.post0-py2.py3-none-any.whl.metadata (8.4 kB) +2026-10-18T15:36:19+09:00 #10 18.22 Collecting aiohappyeyeballs>=2.5.0 (from aiohttp!=4.0.0a0,!=4.0.0a1->fsspec[http]<=2026.6.0,>=2023.1.0->datasets->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:36:19+09:00 #10 18.22 Downloading aiohappyeyeballs-2.7.1-py3-none-any.whl.metadata (5.9 kB) +2026-10-18T15:36:19+09:00 #10 18.43 Collecting aiosignal>=1.4.0 (from aiohttp!=4.0.0a0,!=4.0.0a1->fsspec[http]<=2026.6.0,>=2023.1.0->datasets->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:36:20+09:00 #10 18.44 Downloading aiosignal-1.4.0-py3-none-any.whl.metadata (3.7 kB) +2026-10-18T15:36:20+09:00 #10 18.65 Collecting attrs>=17.3.0 (from aiohttp!=4.0.0a0,!=4.0.0a1->fsspec[http]<=2026.6.0,>=2023.1.0->datasets->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:36:20+09:00 #10 18.68 Downloading attrs-26.1.0-py3-none-any.whl.metadata (8.8 kB) +2026-10-18T15:36:20+09:00 #10 18.96 Collecting frozenlist>=1.1.1 (from aiohttp!=4.0.0a0,!=4.0.0a1->fsspec[http]<=2026.6.0,>=2023.1.0->datasets->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:36:20+09:00 #10 18.97 Downloading frozenlist-1.8.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl.metadata (20 kB) +2026-10-18T15:36:21+09:00 #10 19.66 Collecting multidict<8.0,>=4.5 (from aiohttp!=4.0.0a0,!=4.0.0a1->fsspec[http]<=2026.6.0,>=2023.1.0->datasets->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:36:21+09:00 #10 19.67 Downloading multidict-7.1.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (6.2 kB) +2026-10-18T15:36:21+09:00 #10 19.94 Collecting propcache>=0.2.0 (from aiohttp!=4.0.0a0,!=4.0.0a1->fsspec[http]<=2026.6.0,>=2023.1.0->datasets->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:36:21+09:00 #10 19.95 Downloading propcache-0.5.4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (25 kB) +2026-10-18T15:36:21+09:00 #10 20.46 Collecting yarl<2.0,>=1.25.1 (from aiohttp!=4.0.0a0,!=4.0.0a1->fsspec[http]<=2026.6.0,>=2023.1.0->datasets->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:36:22+09:00 #10 20.46 Downloading yarl-1.25.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (111 kB) +2026-10-18T15:36:22+09:00 #10 20.46 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 111.6/111.6 kB 321.5 MB/s eta 0:00:00 +2026-10-18T15:36:22+09:00 #10 20.72 Collecting cloudpickle>=3.0 (from joblib>=1.4.0->scikit-learn>=0.22.0->sentence_transformers->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:36:22+09:00 #10 20.72 Downloading cloudpickle-3.1.2-py3-none-any.whl.metadata (7.1 kB) +2026-10-18T15:36:22+09:00 #10 20.98 Collecting six>=1.5 (from python-dateutil>=2.8.2->pandas->datasets->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:36:22+09:00 #10 20.98 Downloading six-1.17.0-py2.py3-none-any.whl.metadata (1.7 kB) +2026-10-18T15:36:22+09:00 #10 21.11 Downloading fastapi-0.115.0-py3-none-any.whl (94 kB) +2026-10-18T15:36:22+09:00 #10 21.11 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 94.6/94.6 kB 241.5 MB/s eta 0:00:00 +2026-10-18T15:36:22+09:00 #10 21.11 Downloading uvicorn-0.30.6-py3-none-any.whl (62 kB) +2026-10-18T15:36:22+09:00 #10 21.11 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 62.8/62.8 kB 278.9 MB/s eta 0:00:00 +2026-10-18T15:36:22+09:00 #10 21.12 Downloading transformers-4.44.2-py3-none-any.whl (9.5 MB) +2026-10-18T15:36:22+09:00 #10 21.17 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.5/9.5 MB 188.1 MB/s eta 0:00:00 +2026-10-18T15:36:22+09:00 #10 21.18 Downloading peft-0.12.0-py3-none-any.whl (296 kB) +2026-10-18T15:36:22+09:00 #10 21.18 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 296.4/296.4 kB 326.0 MB/s eta 0:00:00 +2026-10-18T15:36:22+09:00 #10 21.18 Downloading numpy-1.26.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (18.3 MB) +2026-10-18T15:36:22+09:00 #10 21.27 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 18.3/18.3 MB 238.7 MB/s eta 0:00:00 +2026-10-18T15:36:22+09:00 #10 21.27 Downloading pyarrow-21.0.0-cp311-cp311-manylinux_2_28_x86_64.whl (42.8 MB) +2026-10-18T15:36:23+09:00 #10 21.55 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 42.8/42.8 MB 214.9 MB/s eta 0:00:00 +2026-10-18T15:36:23+09:00 #10 21.56 Downloading accelerate-1.15.0-py3-none-any.whl (394 kB) +2026-10-18T15:36:23+09:00 #10 21.56 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 394.3/394.3 kB 327.4 MB/s eta 0:00:00 +2026-10-18T15:36:23+09:00 #10 21.56 Downloading click-8.5.0-py3-none-any.whl (125 kB) +2026-10-18T15:36:23+09:00 #10 21.57 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 125.3/125.3 kB 293.9 MB/s eta 0:00:00 +2026-10-18T15:36:23+09:00 #10 21.57 Downloading h11-0.16.0-py3-none-any.whl (37 kB) +2026-10-18T15:36:23+09:00 #10 21.57 Downloading huggingface_hub-0.36.2-py3-none-any.whl (566 kB) +2026-10-18T15:36:23+09:00 #10 21.58 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 566.4/566.4 kB 324.5 MB/s eta 0:00:00 +2026-10-18T15:36:23+09:00 #10 21.58 Downloading pydantic-2.14.1-py3-none-any.whl (488 kB) +2026-10-18T15:36:23+09:00 #10 21.58 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 488.1/488.1 kB 345.3 MB/s eta 0:00:00 +2026-10-18T15:36:23+09:00 #10 21.58 Downloading pydantic_core-2.50.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.2 MB) +2026-10-18T15:36:23+09:00 #10 21.59 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.2/2.2 MB 300.5 MB/s eta 0:00:00 +2026-10-18T15:36:23+09:00 #10 21.60 Downloading pyyaml-6.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (806 kB) +2026-10-18T15:36:23+09:00 #10 21.61 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 806.6/806.6 kB 119.1 MB/s eta 0:00:00 +2026-10-18T15:36:23+09:00 #10 21.61 Downloading regex-2026.9.29-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (804 kB) +2026-10-18T15:36:23+09:00 #10 21.62 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 805.0/805.0 kB 265.8 MB/s eta 0:00:00 +2026-10-18T15:36:23+09:00 #10 21.62 Downloading safetensors-0.8.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (516 kB) +2026-10-18T15:36:23+09:00 #10 21.63 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 516.0/516.0 kB 302.4 MB/s eta 0:00:00 +2026-10-18T15:36:23+09:00 #10 21.63 Downloading starlette-0.38.6-py3-none-any.whl (71 kB) +2026-10-18T15:36:23+09:00 #10 21.63 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 71.5/71.5 kB 253.7 MB/s eta 0:00:00 +2026-10-18T15:36:23+09:00 #10 21.64 Downloading tokenizers-0.19.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.6 MB) +2026-10-18T15:36:23+09:00 #10 21.66 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.6/3.6 MB 171.8 MB/s eta 0:00:00 +2026-10-18T15:36:23+09:00 #10 21.67 Downloading tqdm-4.70.1-py3-none-any.whl (80 kB) +2026-10-18T15:36:23+09:00 #10 21.67 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 80.2/80.2 kB 309.5 MB/s eta 0:00:00 +2026-10-18T15:36:23+09:00 #10 21.67 Downloading typing_extensions-4.16.0-py3-none-any.whl (45 kB) +2026-10-18T15:36:23+09:00 #10 21.67 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 45.6/45.6 kB 254.5 MB/s eta 0:00:00 +2026-10-18T15:36:23+09:00 #10 21.68 Downloading datasets-5.0.1-py3-none-any.whl (559 kB) +2026-10-18T15:36:23+09:00 #10 21.68 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 559.1/559.1 kB 244.7 MB/s eta 0:00:00 +2026-10-18T15:36:23+09:00 #10 21.69 Downloading fsspec-2026.6.0-py3-none-any.whl (203 kB) +2026-10-18T15:36:23+09:00 #10 21.69 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 203.9/203.9 kB 343.0 MB/s eta 0:00:00 +2026-10-18T15:36:23+09:00 #10 21.69 Downloading requests-2.34.2-py3-none-any.whl (73 kB) +2026-10-18T15:36:23+09:00 #10 21.69 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 73.1/73.1 kB 258.0 MB/s eta 0:00:00 +2026-10-18T15:36:23+09:00 #10 21.70 Downloading filelock-4.2.1-py3-none-any.whl (162 kB) +2026-10-18T15:36:23+09:00 #10 21.70 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 162.5/162.5 kB 299.3 MB/s eta 0:00:00 +2026-10-18T15:36:23+09:00 #10 21.70 Downloading <설정된 서버> (134 kB) +2026-10-18T15:36:23+09:00 #10 21.70 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 134.9/134.9 kB 293.2 MB/s eta 0:00:00 +2026-10-18T15:36:23+09:00 #10 21.71 Downloading networkx-3.6.1-py3-none-any.whl (2.1 MB) +2026-10-18T15:36:23+09:00 #10 21.72 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1/2.1 MB 197.6 MB/s eta 0:00:00 +2026-10-18T15:36:23+09:00 #10 21.73 Downloading psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl (155 kB) +2026-10-18T15:36:23+09:00 #10 21.73 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 155.6/155.6 kB 328.2 MB/s eta 0:00:00 +2026-10-18T15:36:23+09:00 #10 21.73 Downloading sentence_transformers-5.7.0-py3-none-any.whl (611 kB) +2026-10-18T15:36:23+09:00 #10 21.74 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 611.3/611.3 kB 309.2 MB/s eta 0:00:00 +2026-10-18T15:36:23+09:00 #10 21.74 Downloading sympy-1.14.0-py3-none-any.whl (6.3 MB) +2026-10-18T15:36:23+09:00 #10 21.77 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.3/6.3 MB 298.8 MB/s eta 0:00:00 +2026-10-18T15:36:23+09:00 #10 21.77 Downloading annotated_types-0.8.0-py3-none-any.whl (13 kB) +2026-10-18T15:36:23+09:00 #10 21.77 Downloading anyio-4.15.1-py3-none-any.whl (132 kB) +2026-10-18T15:36:23+09:00 #10 21.77 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 132.1/132.1 kB 266.2 MB/s eta 0:00:00 +2026-10-18T15:36:23+09:00 #10 21.78 Downloading certifi-2026.7.22-py3-none-any.whl (136 kB) +2026-10-18T15:36:23+09:00 #10 21.78 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 137.0/137.0 kB 333.8 MB/s eta 0:00:00 +2026-10-18T15:36:23+09:00 #10 21.78 Downloading charset_normalizer-3.5.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (269 kB) +2026-10-18T15:36:23+09:00 #10 21.79 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 270.0/270.0 kB 308.3 MB/s eta 0:00:00 +2026-10-18T15:36:23+09:00 #10 21.79 Downloading dill-0.4.1-py3-none-any.whl (120 kB) +2026-10-18T15:36:23+09:00 #10 21.79 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 120.0/120.0 kB 329.7 MB/s eta 0:00:00 +2026-10-18T15:36:23+09:00 #10 21.79 Downloading hf_xet-1.7.0-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (4.2 MB) +2026-10-18T15:36:23+09:00 #10 21.81 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.2/4.2 MB 266.9 MB/s eta 0:00:00 +2026-10-18T15:36:23+09:00 #10 21.82 Downloading httpx-0.28.1-py3-none-any.whl (73 kB) +2026-10-18T15:36:23+09:00 #10 21.82 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 73.5/73.5 kB 305.4 MB/s eta 0:00:00 +2026-10-18T15:36:23+09:00 #10 21.82 Downloading httpcore-1.0.9-py3-none-any.whl (78 kB) +2026-10-18T15:36:23+09:00 #10 21.82 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 78.8/78.8 kB 304.1 MB/s eta 0:00:00 +2026-10-18T15:36:23+09:00 #10 21.83 Downloading idna-3.20-py3-none-any.whl (69 kB) +2026-10-18T15:36:23+09:00 #10 21.83 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 69.6/69.6 kB 250.9 MB/s eta 0:00:00 +2026-10-18T15:36:23+09:00 #10 21.83 Downloading markupsafe-3.0.4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (22 kB) +2026-10-18T15:36:23+09:00 #10 21.83 Downloading mpmath-1.3.0-py3-none-any.whl (536 kB) +2026-10-18T15:36:23+09:00 #10 21.84 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 536.2/536.2 kB 262.3 MB/s eta 0:00:00 +2026-10-18T15:36:23+09:00 #10 21.84 Downloading multiprocess-0.70.19-py311-none-any.whl (144 kB) +2026-10-18T15:36:23+09:00 #10 21.85 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 144.5/144.5 kB 314.6 MB/s eta 0:00:00 +2026-10-18T15:36:23+09:00 #10 21.85 Downloading scikit_learn-1.9.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (9.3 MB) +2026-10-18T15:36:23+09:00 #10 21.89 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.3/9.3 MB 250.8 MB/s eta 0:00:00 +2026-10-18T15:36:23+09:00 #10 21.89 Downloading scipy-1.17.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (35.3 MB) +2026-10-18T15:36:23+09:00 #10 22.02 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 35.3/35.3 MB 302.2 MB/s eta 0:00:00 +2026-10-18T15:36:23+09:00 #10 22.02 Downloading typing_inspection-0.4.4-py3-none-any.whl (14 kB) +2026-10-18T15:36:23+09:00 #10 22.02 Downloading urllib3-2.8.0-py3-none-any.whl (135 kB) +2026-10-18T15:36:23+09:00 #10 22.03 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 135.7/135.7 kB 327.2 MB/s eta 0:00:00 +2026-10-18T15:36:23+09:00 #10 22.03 Downloading pandas-3.0.6-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (11.1 MB) +2026-10-18T15:36:23+09:00 #10 22.07 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 11.1/11.1 MB 295.6 MB/s eta 0:00:00 +2026-10-18T15:36:23+09:00 #10 22.07 Downloading xxhash-4.0.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (261 kB) +2026-10-18T15:36:23+09:00 #10 22.07 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 261.0/261.0 kB 329.8 MB/s eta 0:00:00 +2026-10-18T15:36:23+09:00 #10 22.08 Downloading aiohttp-3.14.5-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (1.9 MB) +2026-10-18T15:36:23+09:00 #10 22.09 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.9/1.9 MB 249.3 MB/s eta 0:00:00 +2026-10-18T15:36:23+09:00 #10 22.09 Downloading joblib-1.6.0-py3-none-any.whl (306 kB) +2026-10-18T15:36:23+09:00 #10 22.09 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 306.1/306.1 kB 339.8 MB/s eta 0:00:00 +2026-10-18T15:36:23+09:00 #10 22.10 Downloading narwhals-2.27.1-py3-none-any.whl (483 kB) +2026-10-18T15:36:23+09:00 #10 22.10 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 483.2/483.2 kB 344.8 MB/s eta 0:00:00 +2026-10-18T15:36:23+09:00 #10 22.10 Downloading python_dateutil-2.9.0.post0-py2.py3-none-any.whl (229 kB) +2026-10-18T15:36:23+09:00 #10 22.10 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 229.9/229.9 kB 349.8 MB/s eta 0:00:00 +2026-10-18T15:36:23+09:00 #10 22.11 Downloading threadpoolctl-3.7.0-py3-none-any.whl (26 kB) +2026-10-18T15:36:23+09:00 #10 22.11 Downloading aiohappyeyeballs-2.7.1-py3-none-any.whl (15 kB) +2026-10-18T15:36:23+09:00 #10 22.11 Downloading aiosignal-1.4.0-py3-none-any.whl (7.5 kB) +2026-10-18T15:36:23+09:00 #10 22.12 Downloading attrs-26.1.0-py3-none-any.whl (67 kB) +2026-10-18T15:36:23+09:00 #10 22.12 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 67.5/67.5 kB 279.9 MB/s eta 0:00:00 +2026-10-18T15:36:23+09:00 #10 22.12 Downloading cloudpickle-3.1.2-py3-none-any.whl (22 kB) +2026-10-18T15:36:23+09:00 #10 22.13 Downloading frozenlist-1.8.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (231 kB) +2026-10-18T15:36:23+09:00 #10 22.13 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 231.1/231.1 kB 245.6 MB/s eta 0:00:00 +2026-10-18T15:36:23+09:00 #10 22.13 Downloading multidict-7.1.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (480 kB) +2026-10-18T15:36:23+09:00 #10 22.14 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 480.4/480.4 kB 336.2 MB/s eta 0:00:00 +2026-10-18T15:36:23+09:00 #10 22.14 Downloading propcache-0.5.4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (235 kB) +2026-10-18T15:36:23+09:00 #10 22.14 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 235.4/235.4 kB 331.0 MB/s eta 0:00:00 +2026-10-18T15:36:23+09:00 #10 22.15 Downloading six-1.17.0-py2.py3-none-any.whl (11 kB) +2026-10-18T15:36:23+09:00 #10 22.15 Downloading yarl-1.25.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (117 kB) +2026-10-18T15:36:23+09:00 #10 22.15 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 117.7/117.7 kB 186.5 MB/s eta 0:00:00 +2026-10-18T15:36:23+09:00 #10 22.38 Building wheels for collected packages: FlagEmbedding +2026-10-18T15:36:24+09:00 #10 22.39 Building wheel for FlagEmbedding (setup.py): started +2026-10-18T15:36:24+09:00 #10 22.66 Building wheel for FlagEmbedding (setup.py): finished with status 'done' +2026-10-18T15:36:24+09:00 #10 22.66 Created wheel for FlagEmbedding: filename=flagembedding-1.2.11-py3-none-any.whl size=171233 sha256=e0599ec9e354476a738470530d082956ad51beeb097284fad08395bc9cdcb051 +2026-10-18T15:36:24+09:00 #10 22.66 Stored in directory: /tmp/pip-ephem-wheel-cache-7i9yea58/wheels/cc/30/56/331f855b95583721e80ba4d5630f701387dcade9d050c88d9d +2026-10-18T15:36:24+09:00 #10 22.66 Successfully built FlagEmbedding +2026-10-18T15:36:25+09:00 #10 23.53 Installing collected packages: mpmath, xxhash, urllib3, typing-extensions, tqdm, threadpoolctl, sympy, six, safetensors, regex, pyyaml, pyarrow, psutil, propcache, numpy, networkx, narwhals, multidict, MarkupSafe, idna, hf-xet, h11, fsspec, frozenlist, filelock, dill, cloudpickle, click, charset_normalizer, certifi, attrs, annotated-types, aiohappyeyeballs, yarl, uvicorn, typing-inspection, scipy, requests, python-dateutil, pydantic-core, multiprocess, joblib, jinja2, httpcore, anyio, aiosignal, torch, starlette, scikit-learn, pydantic, pandas, huggingface-hub, httpx, aiohttp, tokenizers, fastapi, accelerate, transformers, datasets, sentence_transformers, peft, FlagEmbedding +2026-10-18T15:37:00+09:00 #10 58.83 Successfully installed FlagEmbedding-1.2.11 MarkupSafe-3.0.4 accelerate-1.15.0 aiohappyeyeballs-2.7.1 aiohttp-3.14.5 aiosignal-1.4.0 annotated-types-0.8.0 anyio-4.15.1 attrs-26.1.0 certifi-2026.7.22 charset_normalizer-3.5.2 click-8.5.0 cloudpickle-3.1.2 datasets-5.0.1 dill-0.4.1 fastapi-0.115.0 filelock-4.2.1 frozenlist-1.8.0 fsspec-2026.6.0 h11-0.16.0 hf-xet-1.7.0 httpcore-1.0.9 httpx-0.28.1 huggingface-hub-0.36.2 idna-3.20 jinja2-3.1.6 joblib-1.6.0 mpmath-1.3.0 multidict-7.1.0 multiprocess-0.70.19 narwhals-2.27.1 networkx-3.6.1 numpy-1.26.4 pandas-3.0.6 peft-0.12.0 propcache-0.5.4 psutil-7.2.2 pyarrow-21.0.0 pydantic-2.14.1 pydantic-core-2.50.1 python-dateutil-2.9.0.post0 pyyaml-6.0.3 regex-2026.9.29 requests-2.34.2 safetensors-0.8.0 scikit-learn-1.9.1 scipy-1.17.1 sentence_transformers-5.7.0 six-1.17.0 starlette-0.38.6 sympy-1.14.0 threadpoolctl-3.7.0 tokenizers-0.19.1 torch-2.4.1+cpu tqdm-4.70.1 transformers-4.44.2 typing-extensions-4.16.0 typing-inspection-0.4.4 urllib3-2.8.0 uvicorn-0.30.6 xxhash-4.0.1 yarl-1.25.1 +2026-10-18T15:37:00+09:00 #10 58.83 WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: <설정된 서버> +2026-10-18T15:37:00+09:00 #10 58.94 +2026-10-18T15:37:00+09:00 #10 58.94 [notice] A new release of pip is available: 24.0 -> 26.2.1 +2026-10-18T15:37:00+09:00 #10 58.94 [notice] To update, run: pip install --upgrade pip +2026-10-18T15:37:04+09:00 #10 DONE 63.3s +2026-10-18T15:37:04+09:00 +2026-10-18T15:37:04+09:00 #11 [5/8] COPY requirements-observability.txt . +2026-10-18T15:37:04+09:00 #11 DONE 0.0s +2026-10-18T15:37:04+09:00 +2026-10-18T15:37:04+09:00 #12 [6/8] RUN pip install --no-cache-dir -r requirements-observability.txt +2026-10-18T15:37:05+09:00 #12 0.597 Collecting prometheus-client==0.25.0 (from -r requirements-observability.txt (line 1)) +2026-10-18T15:37:05+09:00 #12 0.637 Downloading prometheus_client-0.25.0-py3-none-any.whl.metadata (2.1 kB) +2026-10-18T15:37:05+09:00 #12 0.651 Downloading prometheus_client-0.25.0-py3-none-any.whl (64 kB) +2026-10-18T15:37:05+09:00 #12 0.662 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 64.2/64.2 kB 6.2 MB/s eta 0:00:00 +2026-10-18T15:37:06+09:00 #12 1.461 Installing collected packages: prometheus-client +2026-10-18T15:37:06+09:00 #12 1.509 Successfully installed prometheus-client-0.25.0 +2026-10-18T15:37:06+09:00 #12 1.510 WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: <설정된 서버> +2026-10-18T15:37:06+09:00 #12 1.634 +2026-10-18T15:37:06+09:00 #12 1.634 [notice] A new release of pip is available: 24.0 -> 26.2.1 +2026-10-18T15:37:06+09:00 #12 1.634 [notice] To update, run: pip install --upgrade pip +2026-10-18T15:37:06+09:00 #12 DONE 1.7s +2026-10-18T15:37:06+09:00 +2026-10-18T15:37:06+09:00 #13 [7/8] RUN python -c "from FlagEmbedding import BGEM3FlagModel" +2026-10-18T15:37:10+09:00 #13 DONE 4.4s +2026-10-18T15:37:11+09:00 +2026-10-18T15:37:11+09:00 #14 [8/8] COPY main.py . +2026-10-18T15:37:11+09:00 #14 DONE 0.0s +2026-10-18T15:37:11+09:00 +2026-10-18T15:37:11+09:00 #15 exporting to image +2026-10-18T15:37:11+09:00 #15 exporting layers +2026-10-18T15:37:19+09:00 #15 exporting layers 8.4s done +2026-10-18T15:37:19+09:00 #15 writing image sha256:8e58ee069b38f6d0557cacd4d8e0510ee793b4f9082bbf654a96879d1c8a5300 done +2026-10-18T15:37:19+09:00 #15 naming to docker.io/library/docgrid-embedding-server done +2026-10-18T15:37:19+09:00 #15 DONE 8.4s +2026-10-18T15:37:19+09:00 +2026-10-18T15:37:19+09:00 #16 resolving provenance for metadata file +2026-10-18T15:37:19+09:00 #16 DONE 0.0s +2026-10-18T15:37:19+09:00 embedding-server Built +2026-10-18T15:37:19+09:00 Network docgrid_docgrid-local Creating +2026-10-18T15:37:19+09:00 Network docgrid_docgrid-local Created +2026-10-18T15:37:19+09:00 Volume "docgrid_huggingface-cache" Creating +2026-10-18T15:37:19+09:00 Volume "docgrid_huggingface-cache" Created +2026-10-18T15:37:19+09:00 Volume "docgrid_valkey-data" Creating +2026-10-18T15:37:19+09:00 Volume "docgrid_valkey-data" Created +2026-10-18T15:37:19+09:00 Volume "docgrid_postgres17_data" Creating +2026-10-18T15:37:19+09:00 Volume "docgrid_postgres17_data" Created +2026-10-18T15:37:19+09:00 Container docgrid-embedding Creating +2026-10-18T15:37:19+09:00 Container docgrid-postgres17 Creating +2026-10-18T15:37:19+09:00 Container docgrid-valkey Creating +2026-10-18T15:37:19+09:00 Container docgrid-valkey Created +2026-10-18T15:37:19+09:00 Container docgrid-postgres17 Created +2026-10-18T15:37:19+09:00 Container docgrid-embedding Created +2026-10-18T15:37:19+09:00 Container docgrid-postgres17 Starting +2026-10-18T15:37:19+09:00 Container docgrid-valkey Starting +2026-10-18T15:37:19+09:00 Container docgrid-embedding Starting +2026-10-18T15:37:20+09:00 Container docgrid-embedding Started +2026-10-18T15:37:20+09:00 Container docgrid-valkey Started +2026-10-18T15:37:20+09:00 Container docgrid-postgres17 Started +2026-10-18T15:37:23+09:00 [OK] 대상 PostgreSQL 준비 완료 +2026-10-18T15:37:23+09:00 [OK] Valkey 준비 완료 +2026-10-18T15:38:08+09:00 [OK] Embedding Provider 준비 완료 +2026-10-18T15:38:08+09:00 [OK] 대상 PostgreSQL 인증·pgvector 0.8.1 확인 +2026-10-18T15:38:08+09:00 [OK] Valkey 연결 가능 +2026-10-18T15:38:08+09:00 [OK] Embedding Provider 준비 완료 (<설정된 서버>) +2026-10-18T15:38:08+09:00 [OK] 검색 범위 준비 완료 · 생성 답변은 미검증 diff --git a/docs/test-results/demo-fresh-20261018/runs/39104533807-1/runtime/a7dc894111e946d9aac3f16b6080ce7f/verify-9a71bc5be2594dfba7dc3ffd99833f81.log b/docs/test-results/demo-fresh-20261018/runs/39104533807-1/runtime/a7dc894111e946d9aac3f16b6080ce7f/verify-9a71bc5be2594dfba7dc3ffd99833f81.log new file mode 100644 index 00000000..613eb1e5 --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39104533807-1/runtime/a7dc894111e946d9aac3f16b6080ce7f/verify-9a71bc5be2594dfba7dc3ffd99833f81.log @@ -0,0 +1,49 @@ +2026-10-18T15:40:28+09:00 [실행] 20261018T154028995634+0900 · 범위 search +2026-10-18T15:40:29+09:00 [계정] 로그인 완료 +2026-10-18T15:40:29+09:00 [업로드] 1/15 · 문서 3 +2026-10-18T15:40:29+09:00 [업로드] 2/15 · 문서 4 +2026-10-18T15:40:29+09:00 [업로드] 3/15 · 문서 5 +2026-10-18T15:40:29+09:00 [업로드] 4/15 · 문서 6 +2026-10-18T15:40:29+09:00 [업로드] 5/15 · 문서 7 +2026-10-18T15:40:29+09:00 [업로드] 6/15 · 문서 8 +2026-10-18T15:40:29+09:00 [업로드] 7/15 · 문서 9 +2026-10-18T15:40:29+09:00 [업로드] 8/15 · 문서 10 +2026-10-18T15:40:29+09:00 [업로드] 9/15 · 문서 11 +2026-10-18T15:40:29+09:00 [업로드] 10/15 · 문서 12 +2026-10-18T15:40:29+09:00 [업로드] 11/15 · 문서 13 +2026-10-18T15:40:29+09:00 [업로드] 12/15 · 문서 14 +2026-10-18T15:40:29+09:00 [업로드] 13/15 · 문서 15 +2026-10-18T15:40:29+09:00 [업로드] 14/15 · 문서 16 +2026-10-18T15:40:29+09:00 [업로드] 15/15 · 문서 17 +2026-10-18T15:40:29+09:00 [인덱싱] INDEXED 15/15 · 처리 중 0 · 대기 0 · 실패 0 (0.3초) +2026-10-18T15:40:30+09:00 [검색] 통과: 결과 3건, 기대 문서 포함 여부 확인 +2026-10-18T15:40:30+09:00 [RAG] 미검증: search 범위에서는 생성 답변 성공을 주장하지 않습니다. +2026-10-18T15:40:30+09:00 [질문 1] 검색 PASS · 생성 답변 NOT_RUN +2026-10-18T15:40:30+09:00 [검색] 통과: 결과 3건, 기대 문서 포함 여부 확인 +2026-10-18T15:40:30+09:00 [RAG] 미검증: search 범위에서는 생성 답변 성공을 주장하지 않습니다. +2026-10-18T15:40:30+09:00 [질문 2] 검색 PASS · 생성 답변 NOT_RUN +2026-10-18T15:40:30+09:00 [검색] 통과: 결과 3건, 기대 문서 포함 여부 확인 +2026-10-18T15:40:30+09:00 [RAG] 미검증: search 범위에서는 생성 답변 성공을 주장하지 않습니다. +2026-10-18T15:40:30+09:00 [질문 3] 검색 PASS · 생성 답변 NOT_RUN +2026-10-18T15:40:30+09:00 [원본] 문서 3: PASS +2026-10-18T15:40:30+09:00 [원본] 문서 4: PASS +2026-10-18T15:40:30+09:00 [원본] 문서 5: PASS +2026-10-18T15:40:30+09:00 [원본] 문서 6: PASS +2026-10-18T15:40:30+09:00 [원본] 문서 7: PASS +2026-10-18T15:40:30+09:00 [원본] 문서 8: PASS +2026-10-18T15:40:30+09:00 [원본] 문서 9: PASS +2026-10-18T15:40:30+09:00 [원본] 문서 10: PASS +2026-10-18T15:40:30+09:00 [원본] 문서 11: PASS +2026-10-18T15:40:30+09:00 [원본] 문서 12: PASS +2026-10-18T15:40:30+09:00 [원본] 문서 13: PASS +2026-10-18T15:40:30+09:00 [원본] 문서 14: PASS +2026-10-18T15:40:30+09:00 [원본] 문서 15: PASS +2026-10-18T15:40:30+09:00 [원본] 문서 16: PASS +2026-10-18T15:40:30+09:00 [원본] 문서 17: PASS +2026-10-18T15:40:30+09:00 [업로드] PASS · 15/15 +2026-10-18T15:40:30+09:00 [인덱싱] PASS · 15/15 +2026-10-18T15:40:30+09:00 [검색] PASS · 3/3 +2026-10-18T15:40:30+09:00 [원본 해시] PASS · 15/15 +2026-10-18T15:40:30+09:00 [생성 답변·인용] NOT_RUN · 0/0 +2026-10-18T15:40:30+09:00 [문서 ID 재사용] PASS · 15/15 +2026-10-18T15:40:30+09:00 [최종] 종료 코드 0 diff --git a/docs/test-results/demo-fresh-20261018/runs/39104533807-1/runtime/a7dc894111e946d9aac3f16b6080ce7f/verify-a54e5866f909483fb8c9fbf6a08fa754.log b/docs/test-results/demo-fresh-20261018/runs/39104533807-1/runtime/a7dc894111e946d9aac3f16b6080ce7f/verify-a54e5866f909483fb8c9fbf6a08fa754.log new file mode 100644 index 00000000..a73e5e65 --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39104533807-1/runtime/a7dc894111e946d9aac3f16b6080ce7f/verify-a54e5866f909483fb8c9fbf6a08fa754.log @@ -0,0 +1,58 @@ +2026-10-18T15:39:53+09:00 [실행] 20261018T153953335897+0900 · 범위 search +2026-10-18T15:39:53+09:00 [계정] 회원가입 완료 +2026-10-18T15:39:53+09:00 [계정] 로그인 완료 +2026-10-18T15:39:54+09:00 [업로드] 1/15 · 문서 3 +2026-10-18T15:39:54+09:00 [업로드] 2/15 · 문서 4 +2026-10-18T15:39:54+09:00 [업로드] 3/15 · 문서 5 +2026-10-18T15:39:54+09:00 [업로드] 4/15 · 문서 6 +2026-10-18T15:39:54+09:00 [업로드] 5/15 · 문서 7 +2026-10-18T15:39:54+09:00 [업로드] 6/15 · 문서 8 +2026-10-18T15:39:54+09:00 [업로드] 7/15 · 문서 9 +2026-10-18T15:39:54+09:00 [업로드] 8/15 · 문서 10 +2026-10-18T15:39:54+09:00 [업로드] 9/15 · 문서 11 +2026-10-18T15:39:54+09:00 [업로드] 10/15 · 문서 12 +2026-10-18T15:39:54+09:00 [업로드] 11/15 · 문서 13 +2026-10-18T15:39:54+09:00 [업로드] 12/15 · 문서 14 +2026-10-18T15:39:55+09:00 [업로드] 13/15 · 문서 15 +2026-10-18T15:39:55+09:00 [업로드] 14/15 · 문서 16 +2026-10-18T15:39:55+09:00 [업로드] 15/15 · 문서 17 +2026-10-18T15:39:55+09:00 [인덱싱] INDEXED 0/15 · 처리 중 0 · 대기 15 · 실패 0 (0.4초) +2026-10-18T15:40:02+09:00 [인덱싱] INDEXED 1/15 · 처리 중 2 · 대기 12 · 실패 0 (7.5초) +2026-10-18T15:40:06+09:00 [인덱싱] INDEXED 3/15 · 처리 중 2 · 대기 10 · 실패 0 (11.1초) +2026-10-18T15:40:09+09:00 [인덱싱] INDEXED 5/15 · 처리 중 1 · 대기 9 · 실패 0 (14.6초) +2026-10-18T15:40:13+09:00 [인덱싱] INDEXED 6/15 · 처리 중 2 · 대기 7 · 실패 0 (18.0초) +2026-10-18T15:40:16+09:00 [인덱싱] INDEXED 8/15 · 처리 중 1 · 대기 6 · 실패 0 (21.4초) +2026-10-18T15:40:19+09:00 [인덱싱] INDEXED 10/15 · 처리 중 1 · 대기 4 · 실패 0 (24.6초) +2026-10-18T15:40:22+09:00 [인덱싱] INDEXED 13/15 · 처리 중 1 · 대기 1 · 실패 0 (27.7초) +2026-10-18T15:40:25+09:00 [인덱싱] INDEXED 15/15 · 처리 중 0 · 대기 0 · 실패 0 (30.8초) +2026-10-18T15:40:26+09:00 [검색] 통과: 결과 3건, 기대 문서 포함 여부 확인 +2026-10-18T15:40:26+09:00 [RAG] 미검증: search 범위에서는 생성 답변 성공을 주장하지 않습니다. +2026-10-18T15:40:26+09:00 [질문 1] 검색 PASS · 생성 답변 NOT_RUN +2026-10-18T15:40:26+09:00 [검색] 통과: 결과 3건, 기대 문서 포함 여부 확인 +2026-10-18T15:40:26+09:00 [RAG] 미검증: search 범위에서는 생성 답변 성공을 주장하지 않습니다. +2026-10-18T15:40:26+09:00 [질문 2] 검색 PASS · 생성 답변 NOT_RUN +2026-10-18T15:40:26+09:00 [검색] 통과: 결과 3건, 기대 문서 포함 여부 확인 +2026-10-18T15:40:26+09:00 [RAG] 미검증: search 범위에서는 생성 답변 성공을 주장하지 않습니다. +2026-10-18T15:40:26+09:00 [질문 3] 검색 PASS · 생성 답변 NOT_RUN +2026-10-18T15:40:26+09:00 [원본] 문서 3: PASS +2026-10-18T15:40:26+09:00 [원본] 문서 4: PASS +2026-10-18T15:40:26+09:00 [원본] 문서 5: PASS +2026-10-18T15:40:27+09:00 [원본] 문서 6: PASS +2026-10-18T15:40:27+09:00 [원본] 문서 7: PASS +2026-10-18T15:40:27+09:00 [원본] 문서 8: PASS +2026-10-18T15:40:27+09:00 [원본] 문서 9: PASS +2026-10-18T15:40:27+09:00 [원본] 문서 10: PASS +2026-10-18T15:40:27+09:00 [원본] 문서 11: PASS +2026-10-18T15:40:27+09:00 [원본] 문서 12: PASS +2026-10-18T15:40:27+09:00 [원본] 문서 13: PASS +2026-10-18T15:40:27+09:00 [원본] 문서 14: PASS +2026-10-18T15:40:27+09:00 [원본] 문서 15: PASS +2026-10-18T15:40:27+09:00 [원본] 문서 16: PASS +2026-10-18T15:40:27+09:00 [원본] 문서 17: PASS +2026-10-18T15:40:27+09:00 [업로드] PASS · 15/15 +2026-10-18T15:40:27+09:00 [인덱싱] PASS · 15/15 +2026-10-18T15:40:27+09:00 [검색] PASS · 3/3 +2026-10-18T15:40:27+09:00 [원본 해시] PASS · 15/15 +2026-10-18T15:40:27+09:00 [생성 답변·인용] NOT_RUN · 0/0 +2026-10-18T15:40:27+09:00 [문서 ID 재사용] NOT_RUN · 0/0 +2026-10-18T15:40:27+09:00 [최종] 종료 코드 0 diff --git a/docs/test-results/demo-fresh-20261018/runs/39104533807-1/summary.json b/docs/test-results/demo-fresh-20261018/runs/39104533807-1/summary.json new file mode 100644 index 00000000..e7bd0b86 --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39104533807-1/summary.json @@ -0,0 +1,117 @@ +{ + "runId": "39104533807-1", + "revision": "ae146127179227f74205e189f7fd49dbe59a77fd", + "environment": "GitHub hosted Ubuntu 24.04 · actual PostgreSQL/Valkey/BGE-M3 · no Ollama", + "results": [ + { + "id": "preflight", + "purpose": "독립 실행기의 새 환경 확인", + "timestamp": "2026-10-18T15:35:26+09:00", + "verdict": "PASS", + "existingContainers": 0, + "existingImageCount": 6, + "existingVolumes": 0, + "environmentFilesInitiallyPresent": 0, + "workload": { + "documents": 15, + "searchQuestions": 3, + "browserSessions": 1 + } + }, + { + "id": "concurrent-start", + "purpose": "진행 중 start의 잠금으로 두 번째 start 거부", + "timestamp": "2026-10-18T15:35:31+09:00", + "verdict": "PASS", + "exitCode": 1, + "expectedExitCode": 1, + "elapsedSeconds": 0.114, + "log": "concurrent-start.log" + }, + { + "id": "cold-start", + "purpose": "모델·의존성 최초 준비를 포함한 전체 기동", + "timestamp": "2026-10-18T15:39:51+09:00", + "verdict": "PASS", + "exitCode": 0, + "expectedExitCode": 0, + "elapsedSeconds": 265.87, + "log": "cold-start.log" + }, + { + "id": "verify-first", + "purpose": "실제 모델 인덱싱·검색·프록시·원본 대조", + "timestamp": "2026-10-18T15:40:27+09:00", + "verdict": "PASS", + "exitCode": 0, + "expectedExitCode": 0, + "elapsedSeconds": 35.68, + "log": "verify-first.log" + }, + { + "id": "first-result", + "purpose": "예제 필수 단계 수와 이전 원장 문서 ID 검사", + "timestamp": "2026-10-18T15:40:27+09:00", + "verdict": "PASS", + "counts": { + "upload": 15, + "indexing": 15, + "search": 3, + "download": 15 + }, + "rag": "NOT_RUN" + }, + { + "id": "verify-replay", + "purpose": "같은 계정 재실행과 문서 ID 재사용", + "timestamp": "2026-10-18T15:40:31+09:00", + "verdict": "PASS", + "exitCode": 0, + "expectedExitCode": 0, + "elapsedSeconds": 3.527, + "log": "verify-replay.log" + }, + { + "id": "replay-result", + "purpose": "예제 필수 단계 수와 이전 원장 문서 ID 검사", + "timestamp": "2026-10-18T15:40:31+09:00", + "verdict": "PASS", + "counts": { + "upload": 15, + "indexing": 15, + "search": 3, + "download": 15, + "replay": 15 + }, + "rag": "NOT_RUN" + }, + { + "id": "browser", + "purpose": "실제 Chromium 로그인·질문 전송·원본 다운로드 해시", + "timestamp": "2026-10-18T15:41:19+09:00", + "verdict": "FAIL", + "exitCode": 1, + "expectedExitCode": 0, + "elapsedSeconds": 48.381, + "log": "browser.log" + }, + { + "id": "incomplete", + "purpose": "현재 회차의 완료 여부", + "timestamp": "2026-10-18T15:41:19+09:00", + "verdict": "FAIL", + "at": "browser", + "errorType": "RuntimeError" + }, + { + "id": "always-cleanup", + "purpose": "시험 중단·완료 후 소유 자원 종료", + "timestamp": "2026-10-18T15:41:22+09:00", + "verdict": "PASS", + "exitCode": 0, + "expectedExitCode": 0, + "elapsedSeconds": 3.422, + "log": "always-cleanup.log" + } + ] +} \ No newline at end of file diff --git a/docs/test-results/demo-fresh-20261018/runs/39104533807-1/verify-first.log b/docs/test-results/demo-fresh-20261018/runs/39104533807-1/verify-first.log new file mode 100644 index 00000000..67416de1 --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39104533807-1/verify-first.log @@ -0,0 +1,10 @@ +실행 ID: 39104533807-1/verify-first +목적: 실제 모델 인덱싱·검색·프록시·원본 대조 +시작: 2026-10-18T15:39:51+09:00 +장소: 독립 GitHub hosted 실행기 +기대 종료 코드: 0 +절차: ./scripts/demo.py verify --timeout 900 +2026-10-18T15:40:27+09:00 [검증 통과] 업로드·인덱싱·검색·원본 검사 완료. 기록: .demo/reports/aaad4b583437450b97df532bb67f6072/summary.json +종료: 2026-10-18T15:40:27+09:00 +실제 종료 코드: 0 +소요 시간: 35.68초 diff --git a/docs/test-results/demo-fresh-20261018/runs/39104533807-1/verify-replay.log b/docs/test-results/demo-fresh-20261018/runs/39104533807-1/verify-replay.log new file mode 100644 index 00000000..3200ab61 --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39104533807-1/verify-replay.log @@ -0,0 +1,10 @@ +실행 ID: 39104533807-1/verify-replay +목적: 같은 계정 재실행과 문서 ID 재사용 +시작: 2026-10-18T15:40:27+09:00 +장소: 독립 GitHub hosted 실행기 +기대 종료 코드: 0 +절차: ./scripts/demo.py verify --timeout 900 +2026-10-18T15:40:31+09:00 [검증 통과] 업로드·인덱싱·검색·원본 검사 완료. 기록: .demo/reports/0f2fe073c8404458ba5e8659304fc365/summary.json +종료: 2026-10-18T15:40:31+09:00 +실제 종료 코드: 0 +소요 시간: 3.527초 diff --git a/docs/test-results/demo-fresh-20261018/runs/39105008958-1/always-cleanup.log b/docs/test-results/demo-fresh-20261018/runs/39105008958-1/always-cleanup.log new file mode 100644 index 00000000..cfef2983 --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39105008958-1/always-cleanup.log @@ -0,0 +1,10 @@ +실행 ID: 39105008958-1/always-cleanup +목적: 시험 중단·완료 후 소유 자원 종료 +시작: 2026-10-18T15:47:55+09:00 +장소: 독립 GitHub hosted 실행기 +기대 종료 코드: 0 +절차: ./scripts/demo.py stop +2026-10-18T15:47:58+09:00 [종료 완료] 소유 서버·컨테이너 중지, 데이터·원본·모델 캐시 보존 +종료: 2026-10-18T15:47:58+09:00 +실제 종료 코드: 0 +소요 시간: 2.818초 diff --git a/docs/test-results/demo-fresh-20261018/runs/39105008958-1/browser.log b/docs/test-results/demo-fresh-20261018/runs/39105008958-1/browser.log new file mode 100644 index 00000000..1e742d7c --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39105008958-1/browser.log @@ -0,0 +1,10 @@ +실행 ID: 39105008958-1/browser +목적: 실제 Chromium 로그인·질문 전송·원본 다운로드 해시 +시작: 2026-10-18T15:47:08+09:00 +장소: 독립 GitHub hosted 실행기 +기대 종료 코드: 0 +절차: node scripts/demo/browser_smoke.cjs <실행기 작업공간>/.demo/reproduction/39105008958-1/browser +2026-10-18T15:47:55+09:00 {"verdict":"FAIL","stage":"login-navigation","errorType":"TimeoutError"} +종료: 2026-10-18T15:47:55+09:00 +실제 종료 코드: 1 +소요 시간: 47.036초 diff --git a/docs/test-results/demo-fresh-20261018/runs/39105008958-1/browser/failure.png b/docs/test-results/demo-fresh-20261018/runs/39105008958-1/browser/failure.png new file mode 100644 index 0000000000000000000000000000000000000000..7a048e8cbe6ad856a68c3031886786382d136d01 GIT binary patch literal 281292 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%0AW$Lr zLnQ2nec<swvw#q3nCDi~7T|b*4Bm1zG$8`r$H80B3UKg>pY7MOcHYfGi%q-<beN&# z+yaKLL0;s9A&w?XrJJv_7x=0z{myC2<*~;pibtne5M&$}lLZdGW3J!w6M!+$ZN);d z7YQwnNbD^B1aaA=ZmIbBHf&uEaSgkiUN~4s5d%)L0ay<3-~2XJxkz>9s>zAS&PCn# zUS)d^-cV|C+ZDkH+NF7v#x0YWQ$b}32P`Lg_8C>f;O`pT*TJ2PtpR_vkG6s9jZfb$ z>f9IJOx!bD>~I2|S6LbXCVfTbuO|3swQesfA0l~3q^H1^N$XC2zacG8NHhjyu$P^M zhIs;c_m6fOE1gVR>c&vMB8{1*88g7i>kiS#c6_0K*y}PAeXU)9!r%Sny>;1|7AdvH z(r1fyyIQsp?R<@OweN2VASh;-%H*^WmCxA1rhG5nzqY@r&8^(z+FvH8c4RII-zzhn zZd}yfns<+;Q(tv((MvBHX@s%0$#Z!Oc))YpzRIGmdfqb3nlAXe4q8s9FD&ct1r1Y{ z7AEz@OM#qjv;6dCqqdvhJNE7@_E$URr*L&$nOW9;aJ+oOX~wStKba@hsHy(qp#BfF z5DmBNE_t*QVy97o=qLUkw9X^H`rBlUFJ1hzY>H#|*4XVD4#ia`aR-9qewuNW7KLTB zyN`Z#?$+}x<;|@)Zzyeu&*UjbD{S{9zZUIOspMKY-v-5-WCpC48o_=511dq9Gwanl zqM*}l)t^tM>>I$?>;+wgv#vLFh?8y=Al46wnX$yA;`h|?({Zgw``X&(4x=uQ>bg|7 zjI$|?7pFJ~L-~NMH_-iz@>Yc(sL^%ZB^>@h<myBncI<44Qb6D;fdPuEYvO&H>SFLW zLw!tZ3zH<_PlcDIKXh+sFfe1)Dx^~r#|3U~hv(8ByNn0Li7h#0oozqJg%GQJUrFX$ zxC%5o85?8jc*?m}X}GRxy+JR8BZt=-8OAx1<q(_aWZYP!;%C;lEt_FYygpl7e5fdv zaQcJVypHjHrBw^NyRX%lPL$)!)T=_{I@Q<oThhu)p%Zf&^n3dLMj_68Z>Y&)`jeoB z_GpN{8(rr_uA6_yACW)c-zWFtlh`B?M1$h0k{E*Cz7fwAstQDEFg}RsVIwmGKD;S4 zUcUEh2re*QH%<04FnkusaxY|J`v%(a?f#Oq*FXywHw}!99b1H#`*d6FON@;LlrvnZ zGt;J6Z(jM<z9#iWz-@%IAzT_12}IiFVUj+=a@-n6YVV9u7g<IDhPr4+h4^xS+j8mg z+%zrS)3-|w8lT!}B%yTwn<Y9iv%KdRt+J8ez;}10R3IHr&Z|OpUi`uRk%^!+HGj5F zfwS)yz;w3qhsCW4suVTz7}+kpwhiB|*v69wleRn)F8++~ms+j~wPN@XbZX{WTsR-F z88HJmn*yHB`dnor&Jnn!ILy9@nTzag;ERux7KsaW5IF3(7Iwr3ME^Cru4Vc8{8l(4 zy%&AT7d;8|+tzDI=n))-(j6K@I_Nim)9lR&9-E!CzkXX~e&!8*9Ma|$Jd?SwSi4)! z+1e}P)Yi|#sM&14c6qxcCpFZ~$`vPkR8(K$ZtGllGoDMNQb}8dg(;bn*K4Fxn09#v zl3``?=^y-oxB0<>bPQUJ#*X8QvD5e3a@0Tzw{cYF9GbhSgxF}^R%Cs+rP0E->aGi8 z&o^V{h>;I7t#D7*n!}()rok^!mdH}}%0P4AbM;g;XGs<f8It-{eFd!@V@Bb4V)G?! z$3H!a@Byl)<hg2Nq%0Efx#;u0QLs*HuoZVm7&W!ge8pHxh$<EJ&7RD_S11y5FJM$U zrxdrZKJ^(bTSFO3F9jRIYt}(tP0W3tYUH!Rk39j%&Dv~R<kcI<midkNMO)k@>9(<A z^ZcDCUV<bn-y4Yy`(P2hui^j=cIR~w?PMlWhbYc5M{;lS-S-5zeE&xRPLO{oO2!#p z68e-&Z399ZCAlL;mK{HqlUMjP<c`JjgvWMz9)Cf+Ehv)BA>3d6;w?H&@L8vb!sT0k z?aQ*}<Ka5!Wfr(r*Yz5OpJQp=l(R%aF)Oh8)57avpx<WFQ1LCvo8n`1n2A#)c0233 zI_v7_APjL;Yvy`cH3Qz`@Lx(%EP(o-uq+>CAo2Uai!la5;6bOBbeC9|iQ6<~%)AwM zG;<v<4OvJ5(4AkM>f*NJ0!|p9mm^`B$!5CpUNfYw*Hyi(hiR5rIo((B+~&`AuCCw; zrvUulxM5d2KJyPFvap8U{w}86KVN9FZL&U%@RkhvY8HQMuKSf{$jjR@rI_3s{#t4E z7tgOqui+dSevGbt<P$Y7C-_col2i8iBhd$&L1yXG%Nv3UPoB3LMO&N+sQ4?yB<37x zwAmEjIRJbzz282d1Pv2seBY^x?s6JtUgsV20f%U>C_PIiYb<H;HjgIxXl~k>W0j|{ zGA`5Ed^*biXy=wwsvG}+#Qg6s&|epgab+iG0vpKGiC{-T;t7Y`XTH8%_JRE+-Fvk` z`YYQ!MbFd{ZB@giKvyDusz1w3=rXCTfrF1b8+yZa;?5Qqrlam=*0F<VtB%`<8Jc-j z9Y->ITqB+mPh&OhZK58^UaRB`jjQ9oEZZ18_9vsvoxRwKRjQ21=C<?(-JR}O5ftdo z{~F^ERKo+-?s)z4vA5tJcIsbL)ATowz!tCANtC0G+r)S-1<ns`!gi^$$s^16FoSpp zSvU8*{q9nhLMuC9_f~We{7u>mUFZe{ZZPitVH3*@G)psz?4#`&$Y}Zed;y39abV$4 zOvCrF-58_u=#I0+K@JFBfbg-uF3!3><GA*8h0HLZU$1BT1oZB~Fogij1pF<!vs1Sf z1H)s1=qBh)@$yOSg07+(901-T=D6Ai;7GDCy3mslAk^;!e-MVxFNdyK0I|DuFx0u( z^7)a=Z@40O%V-&W1-OpTz23lDLLzp&VS6aV@ksb7;A}bWsvC(v>$QApo>`RT|92CL zITg8@j0@P0=eq|ew)7u1YFQOgjYNt=&zG|Nus&C{KH#Zh1f(vK60!ylK=&$M+4ah_ z#VuYp;`{etJLuNG+Jx`b)`eXJp<zeM9Jmd#!DS~lRRV~S6j7MJsQX;^8ql@&D=g2_ zJ#WIj40+U3o<5_nW|xNGTdERs$(x<w0@CfhYG_U7m_6atoq40^1Y?(J+YM8ta6>q0 zakDM~OzbZ)Iv#O*zhRX{Oy3V=(f)H63x?$-rxv-EgQ%D}7<e2-PjY@2wuO<h&~~xi zL25Xgw~x%fC@Z(lF3P2)PyXz(r<JkinWihb8~J&Q)5q1h#0-V=gtIC1p-Q(C5}_<o z3${%&Qve{-38WNyUgAojQ)4!c_?rRJ5m12n$moaeIp+1r+L}}wdlw#W%dGmb@?)lD zcg7kfE?h3#Mu<E6N)?FBsre=(0fwGLf28NZD_+3yI!>J#{!c3QIt{H47M5u~xkyN= z5Zr8FeL-MGoF}+Ajt#CG`WWop;$NU#Q#-Mi^51a$9F0s{^iZlgtc(zgjl;BwJt}x? zEJ*I6Tv*ohWCSPd34TGqXMAUBYxM1!<sXSQVK&)-w>j7y8eQERQ&;@sdm9tu+Bn59 z2f+86odWS7{J`FIHS{9AnpXR8<|^*yJCfrJ`%HX1emenqflxS3zV4j?oOlEEAm@A= z`AyJfZ>;n61q*%~2_0TP+EmZ-N68&t<9%R<X81lbC>jgEK=JA#h)U8Uv({B|{9hl% z<9vP{kvITq7kZgdex0-61NplJz-jt#Yr|H@>Ml64t~U^u*-c|e8V0{r+HwM34eq}- zhCj~2Um;GrBf5u$=#YGM%SV0x`D^%Zxz11`4tt=(wy>kY;sdjQ?sua>B3#JfY5VlS zs^>R614BqY4UTfokgUZ$Omm+O>gBeI8SUu83Hz-Kp<`uJV;frE^NISha@!3M9Ufap z#s7MUc9!FdC(u6&7&y8|#O9wUKh)okuof_3k4V++`qY*aZYwvTozZT)acnxYe=OA{ zL)TC~JRBpQ+edVG+2*g>VnIVM)e-ZC&7J7ZQ)|74B(s3|gJa)?k46$do))Ay%o7PP zss<JQDwBN70`%SHYbB;f)$T3zt#fejA1ybj!!{Vb59=7w+82TZPwY!E{b1}c+#n88 zv-R58?nAQ|o6c$^;;z*SIom99;KS>s90X&x6v4GF#$mPQdi_SUjo!BNNfL~#)Vz!? zz&ZEAdr$n`-ivWh@Koo)?L#U04@qChrHp~6<)&o>90kE$RkeImS7-<6-T8QV4Eg_j zs~&=~-Y1SrTri2GTgUIlyO$@QewyK;S_k#7(^CF%yoa0o@%^vo(DK8a!&9EfhLo-$ z_}@9H&tD!}<k~%5ib=b#)g$S=(RD+2oN1-$WJkB<DIS%`xoC8+gPki<VA5VkV(4vv zPMNVh_F5O;L4qr%1h1wbTBqKB1)h|*9P8$7qmy(4ntNcD_`W(YngzB~w->z|Uw&}~ z-D~nZ18p5{0b4&$Df;jEKulCl;LXSeAV$TwPu(udK5Y@QkgI$qSM#+dOa5xq2tUTB zfN^=$a<%VS$kw)eY)4t>s?ia=nrZsfS14HWq@e~yp0myOW!t#CLZnIOK90vfYV)2> z<H+wO9YXNuje#4s(zeQsCV!-vnk=XeG4<r>r*LkPdi4%m^x~TvcJ@8z?z=K=Qpvhf zXT<hS(Kay>zlA0@EEj}0Ploz$I+OP_crT1Mv`&_%kq1SUanotw{`i*k%KSji>jK8j zfeW`y%ilQ5<!>c5CEEa&i5Qw=jaR~B<D5PK1!wAdg?g$o>*WApbKJt4?3$%jV=o3+ znT3DYX$3}wA0MgQ(v@20X@TlDPYv;p?<w$P2}IfQ0JL%CBk$I#6LYbqhM(dVBT-?p ziOKP0ptx?AyRRR5yJ&u<$t=FDxVt^cKCx>(7ke|~`|_7q-?!ztk8($4rk?kDfXzgz z%z@)$)__ciE{EhT*bBPt?LI;Q7A-4=Jt%h_Q>SqAcQQ!_Vr4oNutrb*!PXd_ROs$$ z%-tBZ(|cML;`xNsTkB<r1*gcHi*KqAuf6C6ydtjtbmhF{wNB;otJ#|U`OdsL6mYVt zeCOhDOYzEi@aTfRKN#7qKNrD68vn*mUGXeJ%XQ-U@pLXFqP1H@{`|KOq|^CB)^AJ@ z2NY9&Jxn-WdHsi7@y*C9PuHtP2xi?ju6Zw`{IUpknac1Hff;ax957s#8R`Pi1Y&$D z`f72oRP!nnftoK5Sj$hj_|t!yTX|~GGI-qjeBjrj|K2(jgUt$1UuM`NeyYsS`_C)@ za8-;rRTgP|__X$_fdPS4hF!1Yx5Z)Ci=D3cDi8n9{tniin`0u^&92wXadkjU7y`e_ zaix3M{Ctyu{7r!FHUY8ku9fhvy<C{E6spe=R;dlZw1#o>_lIbu9i)nbre5T(V_u$~ z=jHjE-o)&)$FX;{5Dfz#CN9BH1fwTdv-;Ko%lB?$?sY~5l38`FG5wAw`DI*&F9e@? z1imRNhjlVFv_^+(jG$1*d)x%E+CT>`low>nvqb%)<kqw>nsz}jRZUP!7FmaDh~}PG zoL`geLm7ac=~z5@dn3gc*ya;d;OlXdAPvZjM->+5k;kL>?G=wR9gz>jMYA>n%I)#r zN~)mRkYrgd<@54|uO8q|V$zJaRmX6up1;Bz<qzA8A5kv~vBIca>3t7c1nW;_-r2EC zu!!+pm6dvcA7mIaRT`y|8cuud-!0+)j>o25y?cB&-+Ken?GYG+botEj>9+Lyda#-& zla905<nrC0{{&M7A*K-{>96f4OIe|X*|%(ZW=ZY8e(*+o(W8t}#|2_TPM+O)B&fMV zyaHKzXjba8^oT;X$>n5>QbcKS2729D=b9zxcPx%-(2Wx~towMp1@Ie8jSP>Kcc@4T zxl+iOcue1uX9r!1VFzMk3-`x+ffr4HtDU&!fR0UZ*vSsZ^(w>SbX~wyF7Se}f4%&2 z7qOYXI|#Ux&bl0fUVUT#rE)TaRYWaAkJiW_NX?5CSt7NEBKS^@i$2Pht&li*Z68bj zoh%#_DG#zw50^9_*uuxEFMp&)WuU=py^uAXsQf+HMNu4V3+!DLbjSRemsus_h2>-^ z*-;<nj_gKsB$h*uk-9xzsj|%4&@Ps`0hsy`nH*R)Y?swtg<{%8?io%65lu@=eYTxU z1s}-N4d804hGEWP(;B5!Y|ahUX7AROE~nTrME63!Ww7TxW?Y}~06Ur%?=ltM+UMF| zG*cB!9z9;zLWAq97q9AaA6CwY@ej_-scu1ZV~hUIzez6G3(}VJo@R?So@8#c(Hs8D zPEC}KTk^Pfr&X!Tc&=L0(buwlKovOC$C|6=bFN|+TIfu`$%sSf^^AO_U&v2O)`~OV z5|B(s#64tWb2D~Px>ZK&mZpz0acbVnGdrww$ck<TiZHP!nA?(b#U=jP@_b0+O8?#d zkI^Kvq?7LG1E%-S!|oy+e}|KWY^|fq;zGWaVP`9;v%UGz#gzg(3q<w8ot5wPW{t8U z+;D`Q67G3eK;7N|@oBs5f3Yi<Lc$qu>B77A>ykaBa^0UvoXAk6a1p>bj)6B}y}|wt zPj?kvxxXtnu?O5fp|PesX>p?3egFF1K>V@qd*yAP!#+O6>!+_yCeuEmibm8^kQxY_ zfEmcBgt}+;(bu}^g9hAaT2?sv3sN3EZqaxiug(sc6alY|lmm37$P#r4y|?Xkp*ja- zgMJAzr5p$Ni-4W#LJuBfh)~oo`dwZ+sQ7I}jQikZ=LoY$$`*V#CHQDWe0HGi?#2!S zWEU*b@-iX}F0@~NWb4|r8GTX>Z}yU1t4}*QA>16^2jmCzsA7wSDnz>nv@0HuFc4_= z^J=MBRWF)*zbJD*hc*L)8%lckoR@N#tBJf^$}UcVe+iq~l3M6hINZz07@?~%2MV7X ziq84Leh`0Hei+K;EJos+u_thT6?pV@N=HZP<?(W#jSK?xb+7n*Hq&goo|B|r9CW}v z;+wE}16}Yvvr<E*El?GXA{Wd%U3P)x5KL?odgoJBFG<ZTo@5fJYhmE-`j8I)7V%Ej zfZUkrV@+o%x+o#BT*<ZPQBn$t6a`~4YX6}avwYUV&-*AwojG{$J>eRDm5O^bOOm$c zkBr%nsk`>ou{A7yGNCc1kmY^Q=6|yym&hL8^$}D$H`f0#Z3|<n@}v(<f1X4UCX4Th z5Pr1o%|_!M{I&_8w=d^{>;2?C0&{MK#FvS`fLAh{_4`~o4HHgsy9<kdD1u&&;;O)G zzHpL2B=2{#T=qo~a#_9CH}x{9)r6zo6rEP{7u1;C=0wP;^tGWME#23$OH1qHj!SmE zDu82c5vWNRHl=lC0l(r3T3V;PyoJmyuKS5N`@66diUK117Yxaxn|{6&e-Z8SO-3!J z7q(x6^i9K~k|?k6maPefRQ@c%<r*W92-cKUGFj?Rw+?sVu&XF!oT2=sT^x9fHgZrK z9)JN{)d4PG7wa&LH00(FCdQD(%P#vYu%ZonH}BN207zebbq9Wb#@&C%b2KjsFL`Pj z+i~&fIV>Z3o97N>lD8hn$}iE(D~3=!%N8$)?T?~SbB?PVeiD3FTrH-@Hh#}cVg{W^ z%sLbEVmH2U3!^0{`nE2Ti*eG|lDfSw@=EAU?V>I9-${W)mtsjyrGs}C@-s#mQ~Sr& zE}s+NVrh2CwR=;(M!lO}E%VInf!*nQ#oTo?TRykuU9MW}A|W>ME}YL?=jss?t)oLf z+}R)w$M7dJb!d*^rw4}oGvwUNh6c^&N3i=~gWQ7fFQp}?)qjBHtyNTuB4U|$*(fn1 zE>E~1(`8$jr}1`a=<n0&F}JX6@}gt%PRuME6(Pb8)(vnsJxg});1~T>rzkAIbWvh$ z8|Tls(y=cGP%-g)gtt`(^yn?<>Fc8N+iay$Io=Eo6($P{U@l(@PZl{vDO98C^{1Pk z#QzsQb>`2zPa_8;;vI`bc7Lmg{*{!x$>dHSb(d>b(?0wIH#<Q)&*7;MVo4lml2iyN zzUqcy&XJfmt{5=Bvlnsvp#1VP^x_nTBxya${`BZDV%?(UHf}P_6?M5d!N9b_+tkN@ zUsC&Kd{|b%ncVfoR`<vd2Yv`}Rc_h9GNp(<PRT??=`KP}DsAeIXmyuPGAa+{(I?ee z`6)o(9owu5?K)R*zZr+tE9BkuvlQqKN6S$(5cHpf3Z=qHs2LO6pSR<nBtzb%7m%rG zL47i_;w-3a?TY_Zk&yyq(5(SAnwA;ha6&p(VUwNka;54{h6{ykasU%`H-XjpCD!z| zt0omkQh>SUVf4?z90@ubH61#0fy~_Xm$`p2(>ZcVJ4Ny_>3cGj@x<w#;P!_Lg78k| zj?J4V8|unkIjzYc`Iu>T-YWM9Ke}~qpM>hfx2z1tGj42EFAqw%XYq3$fsQ@-!XDt7 zx)r~{mOlanJ;?XU@C}52GkW3~Augx!UX#-|nLZAY9#$Bu{nM)6n32)aV=2JqLvv~0 z#dnm0i6^*!np#j+=*@Y#qIO2s47-hYcM(i!m4vG^m@dA#K(i?C<!R@QBz>E&>M~Ww zbYL|fZW3WrpDc=nbQV5!>yDfiq(!>iZGlG{4XqMq{jFpY)Fqm#u6hM^$eRZW0}Y68 zh}>g+L{z3n1=w5~owW1s&D?_q>>TUBq(D=8VTo_Ak@VoQ;t8ig+<k(Diz%;!jKz;c zrjJF2%N{>azW*`;`-%`F9<DDFXY3`YQm2w}Ehw^aHQjQ&3ng9vhCF`X`GW|up7s&_ zJGtpy%Z^Z8e-8JFhM9b98|mAN5-gq|GF=b2f_FiX6(OX58Vr9mAad1Lj$e;k!bJxB zRfhLYkCsC>%vv|6;t+~U`{!@s0#54`cU{$?+h90&`*w~l^c;5I2|X=+eJmZ&$#AJK zxCiNVMqHxG{qy{;69D*q5GVdz2yvARJ38b;Tt2A70(a;Ek%vT5jun6l1I0DaW-1!C zUG9Xqj_ieP?tz3h4}kbCX=wMKxIa4A_DjaOCdhrN!~q7??Viw)=y1>Im&EA7Um!Xa zQE0{)f%5JdeM{j>+wWzy>WMQ&*|n<&QPT3iOZsZQWnw)Bx=V2{e;PhPfY#PNY#BT5 z8y-lBMz6hL<0pA0ue+82J%>ai5l$2paj$1j=REw=IQG9A5tMU^6qH7wAmm)nTs~4f zb|&lnl(;+=wenVAxIQs)kHz@t>mG~$Kzr==m=9xUw6hrdGq)Yq8mcb&cju4k&-2(a z%f2`(Jiuy-wye;`RZVWayfo1gRkPCUG14WVA$j;Cr9elrCSOF_al62z7?GZ#!BL}( z)%(Ta&lx~~W=hfbRy(H}GMgAR6}E<61Mx})+V5YH!ws!q6$i>yLLcL=<C+o644U4V z{W5h+m3%p<&ft#zo$u}~(G!t(E&#aYeAW*KdaSv|zE^htoJr{$){!!_)JHA9JWG@p zkbiU%zAax9%X%*v9B0{bMt@ab+HzBAL;ukE)wyW8r@Hjl^ZuV$raW;#wfZY4s+ge{ z4!MMGNg~1UYLCRt1s$bE>`bobx4VY45<hNQI8uC7hpolnuj5+c4Nr!2!TW%VV>ut$ zdxY8pf?PC|Unj&VxMQ?0b6i0S1i{lMvqia1=R*Z}bw?LB3q6@**hn<MRs&9s@h8QZ zn1SoULQ5<kWF;PXv10MagzzHif;a51+wFBhiU9l^nt�UPbs#H0?jmC7gf9fb*6( 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�wx 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 n}M_!5BBg34B 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%0D8gbM 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 literal 0 HcmV?d00001 diff --git a/docs/test-results/demo-fresh-20261018/runs/39105008958-1/browser/summary.json b/docs/test-results/demo-fresh-20261018/runs/39105008958-1/browser/summary.json new file mode 100644 index 00000000..737bca53 --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39105008958-1/browser/summary.json @@ -0,0 +1,9 @@ +{ + "verdict": "FAIL", + "stage": "login-navigation", + "errorType": "TimeoutError", + "message": "page.waitForURL: Timeout 45000ms exceeded.\n=========================== logs ===========================\nwaiting for navigation to \"**/search\" until \"load\"\n navigated to \"http://127.0.0.1:3000/login?email=<인증정보생략>&password=<인증정보생략> 생략>\"\n navigated to \"http://127.0.0.1:3000/login?email=<인증정보생략>&password=<인증정보생략> 생략>\"\n============================================================", + "pageErrors": [], + "pagePath": "/login", + "alerts": [] +} \ No newline at end of file diff --git a/docs/test-results/demo-fresh-20261018/runs/39105008958-1/cold-start.log b/docs/test-results/demo-fresh-20261018/runs/39105008958-1/cold-start.log new file mode 100644 index 00000000..ca4e8bcf --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39105008958-1/cold-start.log @@ -0,0 +1,11 @@ +실행 ID: 39105008958-1/cold-start +목적: 모델·의존성 최초 준비를 포함한 전체 기동 +시작: 2026-10-18T15:43:13+09:00 +장소: 독립 GitHub hosted 실행기 +기대 종료 코드: 0 +절차: ./scripts/demo.py start --timeout 1200 +2026-10-18T15:43:17+09:00 [시작] 로컬 시연 세션 0b33fe3a31414ff28fc8f089dbf5c65c · 범위 search +2026-10-18T15:46:36+09:00 [준비 완료] Web: <설정된 서버> · verify로 예제 시연을 검사하세요. +종료: 2026-10-18T15:46:36+09:00 +실제 종료 코드: 0 +소요 시간: 203.438초 diff --git a/docs/test-results/demo-fresh-20261018/runs/39105008958-1/concurrent-start.log b/docs/test-results/demo-fresh-20261018/runs/39105008958-1/concurrent-start.log new file mode 100644 index 00000000..cb8bd92a --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39105008958-1/concurrent-start.log @@ -0,0 +1,10 @@ +실행 ID: 39105008958-1/concurrent-start +목적: 진행 중 start의 잠금으로 두 번째 start 거부 +시작: 2026-10-18T15:43:17+09:00 +장소: 독립 GitHub hosted 실행기 +기대 종료 코드: 1 +절차: ./scripts/demo.py start +2026-10-18T15:43:17+09:00 [실패] 다른 시작·검증·종료 명령이 실행 중입니다. +종료: 2026-10-18T15:43:17+09:00 +실제 종료 코드: 1 +소요 시간: 0.114초 diff --git a/docs/test-results/demo-fresh-20261018/runs/39105008958-1/first-result/events.jsonl b/docs/test-results/demo-fresh-20261018/runs/39105008958-1/first-result/events.jsonl new file mode 100644 index 00000000..368dc6b4 --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39105008958-1/first-result/events.jsonl @@ -0,0 +1,56 @@ +{"timestamp": "2026-10-18T15:46:37.727+09:00", "message": "[실행] 20261018T154637726025+0900 · 범위 search"} +{"timestamp": "2026-10-18T15:46:37.893+09:00", "message": "[계정] 회원가입 완료"} +{"timestamp": "2026-10-18T15:46:38.016+09:00", "message": "[계정] 로그인 완료"} +{"timestamp": "2026-10-18T15:46:38.477+09:00", "message": "[업로드] 1/15 · 문서 3"} +{"timestamp": "2026-10-18T15:46:38.510+09:00", "message": "[업로드] 2/15 · 문서 4"} +{"timestamp": "2026-10-18T15:46:38.544+09:00", "message": "[업로드] 3/15 · 문서 5"} +{"timestamp": "2026-10-18T15:46:38.586+09:00", "message": "[업로드] 4/15 · 문서 6"} +{"timestamp": "2026-10-18T15:46:38.619+09:00", "message": "[업로드] 5/15 · 문서 7"} +{"timestamp": "2026-10-18T15:46:38.650+09:00", "message": "[업로드] 6/15 · 문서 8"} +{"timestamp": "2026-10-18T15:46:38.679+09:00", "message": "[업로드] 7/15 · 문서 9"} +{"timestamp": "2026-10-18T15:46:38.711+09:00", "message": "[업로드] 8/15 · 문서 10"} +{"timestamp": "2026-10-18T15:46:38.743+09:00", "message": "[업로드] 9/15 · 문서 11"} +{"timestamp": "2026-10-18T15:46:38.773+09:00", "message": "[업로드] 10/15 · 문서 12"} +{"timestamp": "2026-10-18T15:46:38.802+09:00", "message": "[업로드] 11/15 · 문서 13"} +{"timestamp": "2026-10-18T15:46:38.852+09:00", "message": "[업로드] 12/15 · 문서 14"} +{"timestamp": "2026-10-18T15:46:38.885+09:00", "message": "[업로드] 13/15 · 문서 15"} +{"timestamp": "2026-10-18T15:46:38.916+09:00", "message": "[업로드] 14/15 · 문서 16"} +{"timestamp": "2026-10-18T15:46:38.942+09:00", "message": "[업로드] 15/15 · 문서 17"} +{"timestamp": "2026-10-18T15:46:39.192+09:00", "message": "[인덱싱] INDEXED 0/15 · 처리 중 0 · 대기 15 · 실패 0 (0.2초)"} +{"timestamp": "2026-10-18T15:46:49.139+09:00", "message": "[인덱싱] INDEXED 0/15 · 처리 중 2 · 대기 13 · 실패 0 (10.2초)"} +{"timestamp": "2026-10-18T15:46:52.549+09:00", "message": "[인덱싱] INDEXED 3/15 · 처리 중 1 · 대기 11 · 실패 0 (13.6초)"} +{"timestamp": "2026-10-18T15:46:55.855+09:00", "message": "[인덱싱] INDEXED 5/15 · 처리 중 2 · 대기 8 · 실패 0 (16.9초)"} +{"timestamp": "2026-10-18T15:46:59.125+09:00", "message": "[인덱싱] INDEXED 7/15 · 처리 중 2 · 대기 6 · 실패 0 (20.2초)"} +{"timestamp": "2026-10-18T15:47:02.366+09:00", "message": "[인덱싱] INDEXED 11/15 · 처리 중 1 · 대기 3 · 실패 0 (23.4초)"} +{"timestamp": "2026-10-18T15:47:05.416+09:00", "message": "[인덱싱] INDEXED 15/15 · 처리 중 0 · 대기 0 · 실패 0 (26.5초)"} +{"timestamp": "2026-10-18T15:47:05.659+09:00", "message": "[검색] 통과: 결과 3건, 기대 문서 포함 여부 확인"} +{"timestamp": "2026-10-18T15:47:05.660+09:00", "message": "[RAG] 미검증: search 범위에서는 생성 답변 성공을 주장하지 않습니다."} +{"timestamp": "2026-10-18T15:47:05.660+09:00", "message": "[질문 1] 검색 PASS · 생성 답변 NOT_RUN"} +{"timestamp": "2026-10-18T15:47:05.838+09:00", "message": "[검색] 통과: 결과 3건, 기대 문서 포함 여부 확인"} +{"timestamp": "2026-10-18T15:47:05.838+09:00", "message": "[RAG] 미검증: search 범위에서는 생성 답변 성공을 주장하지 않습니다."} +{"timestamp": "2026-10-18T15:47:05.861+09:00", "message": "[질문 2] 검색 PASS · 생성 답변 NOT_RUN"} +{"timestamp": "2026-10-18T15:47:06.019+09:00", "message": "[검색] 통과: 결과 3건, 기대 문서 포함 여부 확인"} +{"timestamp": "2026-10-18T15:47:06.019+09:00", "message": "[RAG] 미검증: search 범위에서는 생성 답변 성공을 주장하지 않습니다."} +{"timestamp": "2026-10-18T15:47:06.019+09:00", "message": "[질문 3] 검색 PASS · 생성 답변 NOT_RUN"} +{"timestamp": "2026-10-18T15:47:06.035+09:00", "message": "[원본] 문서 3: PASS"} +{"timestamp": "2026-10-18T15:47:06.047+09:00", "message": "[원본] 문서 4: PASS"} +{"timestamp": "2026-10-18T15:47:06.058+09:00", "message": "[원본] 문서 5: PASS"} +{"timestamp": "2026-10-18T15:47:06.070+09:00", "message": "[원본] 문서 6: PASS"} +{"timestamp": "2026-10-18T15:47:06.082+09:00", "message": "[원본] 문서 7: PASS"} +{"timestamp": "2026-10-18T15:47:06.095+09:00", "message": "[원본] 문서 8: PASS"} +{"timestamp": "2026-10-18T15:47:06.109+09:00", "message": "[원본] 문서 9: PASS"} +{"timestamp": "2026-10-18T15:47:06.123+09:00", "message": "[원본] 문서 10: PASS"} +{"timestamp": "2026-10-18T15:47:06.135+09:00", "message": "[원본] 문서 11: PASS"} +{"timestamp": "2026-10-18T15:47:06.145+09:00", "message": "[원본] 문서 12: PASS"} +{"timestamp": "2026-10-18T15:47:06.157+09:00", "message": "[원본] 문서 13: PASS"} +{"timestamp": "2026-10-18T15:47:06.169+09:00", "message": "[원본] 문서 14: PASS"} +{"timestamp": "2026-10-18T15:47:06.181+09:00", "message": "[원본] 문서 15: PASS"} +{"timestamp": "2026-10-18T15:47:06.194+09:00", "message": "[원본] 문서 16: PASS"} +{"timestamp": "2026-10-18T15:47:06.206+09:00", "message": "[원본] 문서 17: PASS"} +{"timestamp": "2026-10-18T15:47:06.206+09:00", "message": "[업로드] PASS · 15/15"} +{"timestamp": "2026-10-18T15:47:06.206+09:00", "message": "[인덱싱] PASS · 15/15"} +{"timestamp": "2026-10-18T15:47:06.206+09:00", "message": "[검색] PASS · 3/3"} +{"timestamp": "2026-10-18T15:47:06.206+09:00", "message": "[원본 해시] PASS · 15/15"} +{"timestamp": "2026-10-18T15:47:06.206+09:00", "message": "[생성 답변·인용] NOT_RUN · 0/0"} +{"timestamp": "2026-10-18T15:47:06.206+09:00", "message": "[문서 ID 재사용] NOT_RUN · 0/0"} +{"timestamp": "2026-10-18T15:47:06.206+09:00", "message": "[최종] 종료 코드 0"} diff --git a/docs/test-results/demo-fresh-20261018/runs/39105008958-1/first-result/summary.json b/docs/test-results/demo-fresh-20261018/runs/39105008958-1/first-result/summary.json new file mode 100644 index 00000000..8ce1dba7 --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39105008958-1/first-result/summary.json @@ -0,0 +1,86 @@ +{ + "schemaVersion": 1, + "runId": "20261018T154637726025+0900", + "revision": "148ae4c04dd1301094cdb0c67fa1086293f217bf", + "scope": "search", + "startedAt": "2026-10-18T15:46:37.727+09:00", + "stages": { + "upload": { + "status": "PASS", + "passed": 15, + "expected": 15 + }, + "indexing": { + "status": "PASS", + "passed": 15, + "expected": 15 + }, + "search": { + "status": "PASS", + "passed": 3, + "expected": 3 + }, + "download": { + "status": "PASS", + "passed": 15, + "expected": 15 + }, + "rag": { + "status": "NOT_RUN", + "passed": 0, + "expected": 0 + }, + "replay": { + "status": "NOT_RUN", + "passed": 0, + "expected": 0 + } + }, + "documents": { + "b8dae14d4ba98ceda83e672be41d20895a70ee01f4cf128a0431d137ea581304": 3, + "924112041275f193f2296a55ba5ea098e14ff98b8908eff2051e37b8c2848fb3": 4, + "82d7205d795868938f73eb871b0ca29aff632ce5948e0a5c60d7614222265379": 5, + "f0fb63cf9f42118f799082c74d8d1237434313270ff6b9ac12bb05d1d2955d9a": 6, + "6672c9b2faa6d5b1d04bd287d7a7a71746262c6fb126333f217249aacef6caeb": 7, + "3295bab5db9c7ddcd5a6d8e141b25960f167e553b03f80abaaabcc7670cf7760": 8, + "d5e11dad0ac802f01925eaac1c98efff483616ca0bb02f4be098bcbe1e2d315b": 9, + "ece687b9507957c5bc1ba7e0deff426e8803b81332e0cd507b3558974bdd78b0": 10, + "1830ee48e2942f6e80c5d72f26917ea5384e5c6ff2ca10c4b2ff2c2739e61547": 11, + "6d383df3849d304aa941d6733a0e8205c024d9fa2cfb37d21880af32f7c5c43d": 12, + "a5635fe4c4f3f60d0aa52e3cf7e493da741f6e7e8b15adef534f50030cdafa03": 13, + "fab797bb45eef73ace164770c5fc8d47c8e1c9378e87c1aa296b706759b30831": 14, + "c1bc83a520b4b05557ef8cbf48da15b82a16df02c04274c56cf4604ff9ee50b3": 15, + "d1e0658cf5d053175cab29dff6d21667c5e8527def7c6acc6c0efb814baf6285": 16, + "0bebba1fec7239ddd92b23f81b3b35910ae1d031ac02b5432cd460b1d9445244": 17 + }, + "queries": [ + { + "number": 1, + "expectedDocumentId": 3, + "search": "PASS", + "rag": "NOT_RUN", + "queryId": 1 + }, + { + "number": 2, + "expectedDocumentId": 8, + "search": "PASS", + "rag": "NOT_RUN", + "queryId": 2 + }, + { + "number": 3, + "expectedDocumentId": 13, + "search": "PASS", + "rag": "NOT_RUN", + "queryId": 3 + } + ], + "corpusSha256": "e27ae024506149089279f92b88e13262fa96d651f00e360b2815bc96d648e70d", + "targetFingerprint": "710f80b15be84b1c810005d494cc5c8ecd79a67a3d6300c8ba885f1540ef7474", + "topK": 3, + "checksSha256": "103c1585e7dd2b45f03eb9ba61463bb9a8647efa8026b270c41a45c8eb677c6c", + "exitCode": 0, + "finishedAt": "2026-10-18T15:47:06.206+09:00", + "elapsedSeconds": 28.481 +} \ No newline at end of file diff --git a/docs/test-results/demo-fresh-20261018/runs/39105008958-1/replay-result/events.jsonl b/docs/test-results/demo-fresh-20261018/runs/39105008958-1/replay-result/events.jsonl new file mode 100644 index 00000000..c724f7ad --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39105008958-1/replay-result/events.jsonl @@ -0,0 +1,49 @@ +{"timestamp": "2026-10-18T15:47:07.362+09:00", "message": "[실행] 20261018T154707361229+0900 · 범위 search"} +{"timestamp": "2026-10-18T15:47:07.463+09:00", "message": "[계정] 로그인 완료"} +{"timestamp": "2026-10-18T15:47:07.479+09:00", "message": "[업로드] 1/15 · 문서 3"} +{"timestamp": "2026-10-18T15:47:07.494+09:00", "message": "[업로드] 2/15 · 문서 4"} +{"timestamp": "2026-10-18T15:47:07.512+09:00", "message": "[업로드] 3/15 · 문서 5"} +{"timestamp": "2026-10-18T15:47:07.528+09:00", "message": "[업로드] 4/15 · 문서 6"} +{"timestamp": "2026-10-18T15:47:07.542+09:00", "message": "[업로드] 5/15 · 문서 7"} +{"timestamp": "2026-10-18T15:47:07.554+09:00", "message": "[업로드] 6/15 · 문서 8"} +{"timestamp": "2026-10-18T15:47:07.565+09:00", "message": "[업로드] 7/15 · 문서 9"} +{"timestamp": "2026-10-18T15:47:07.576+09:00", "message": "[업로드] 8/15 · 문서 10"} +{"timestamp": "2026-10-18T15:47:07.590+09:00", "message": "[업로드] 9/15 · 문서 11"} +{"timestamp": "2026-10-18T15:47:07.601+09:00", "message": "[업로드] 10/15 · 문서 12"} +{"timestamp": "2026-10-18T15:47:07.613+09:00", "message": "[업로드] 11/15 · 문서 13"} +{"timestamp": "2026-10-18T15:47:07.626+09:00", "message": "[업로드] 12/15 · 문서 14"} +{"timestamp": "2026-10-18T15:47:07.640+09:00", "message": "[업로드] 13/15 · 문서 15"} +{"timestamp": "2026-10-18T15:47:07.654+09:00", "message": "[업로드] 14/15 · 문서 16"} +{"timestamp": "2026-10-18T15:47:07.669+09:00", "message": "[업로드] 15/15 · 문서 17"} +{"timestamp": "2026-10-18T15:47:07.856+09:00", "message": "[인덱싱] INDEXED 15/15 · 처리 중 0 · 대기 0 · 실패 0 (0.2초)"} +{"timestamp": "2026-10-18T15:47:08.053+09:00", "message": "[검색] 통과: 결과 3건, 기대 문서 포함 여부 확인"} +{"timestamp": "2026-10-18T15:47:08.053+09:00", "message": "[RAG] 미검증: search 범위에서는 생성 답변 성공을 주장하지 않습니다."} +{"timestamp": "2026-10-18T15:47:08.053+09:00", "message": "[질문 1] 검색 PASS · 생성 답변 NOT_RUN"} +{"timestamp": "2026-10-18T15:47:08.231+09:00", "message": "[검색] 통과: 결과 3건, 기대 문서 포함 여부 확인"} +{"timestamp": "2026-10-18T15:47:08.231+09:00", "message": "[RAG] 미검증: search 범위에서는 생성 답변 성공을 주장하지 않습니다."} +{"timestamp": "2026-10-18T15:47:08.245+09:00", "message": "[질문 2] 검색 PASS · 생성 답변 NOT_RUN"} +{"timestamp": "2026-10-18T15:47:08.397+09:00", "message": "[검색] 통과: 결과 3건, 기대 문서 포함 여부 확인"} +{"timestamp": "2026-10-18T15:47:08.397+09:00", "message": "[RAG] 미검증: search 범위에서는 생성 답변 성공을 주장하지 않습니다."} +{"timestamp": "2026-10-18T15:47:08.397+09:00", "message": "[질문 3] 검색 PASS · 생성 답변 NOT_RUN"} +{"timestamp": "2026-10-18T15:47:08.411+09:00", "message": "[원본] 문서 3: PASS"} +{"timestamp": "2026-10-18T15:47:08.428+09:00", "message": "[원본] 문서 4: PASS"} +{"timestamp": "2026-10-18T15:47:08.440+09:00", "message": "[원본] 문서 5: PASS"} +{"timestamp": "2026-10-18T15:47:08.451+09:00", "message": "[원본] 문서 6: PASS"} +{"timestamp": "2026-10-18T15:47:08.506+09:00", "message": "[원본] 문서 7: PASS"} +{"timestamp": "2026-10-18T15:47:08.524+09:00", "message": "[원본] 문서 8: PASS"} +{"timestamp": "2026-10-18T15:47:08.536+09:00", "message": "[원본] 문서 9: PASS"} +{"timestamp": "2026-10-18T15:47:08.546+09:00", "message": "[원본] 문서 10: PASS"} +{"timestamp": "2026-10-18T15:47:08.564+09:00", "message": "[원본] 문서 11: PASS"} +{"timestamp": "2026-10-18T15:47:08.576+09:00", "message": "[원본] 문서 12: PASS"} +{"timestamp": "2026-10-18T15:47:08.587+09:00", "message": "[원본] 문서 13: PASS"} +{"timestamp": "2026-10-18T15:47:08.597+09:00", "message": "[원본] 문서 14: PASS"} +{"timestamp": "2026-10-18T15:47:08.607+09:00", "message": "[원본] 문서 15: PASS"} +{"timestamp": "2026-10-18T15:47:08.620+09:00", "message": "[원본] 문서 16: PASS"} +{"timestamp": "2026-10-18T15:47:08.632+09:00", "message": "[원본] 문서 17: PASS"} +{"timestamp": "2026-10-18T15:47:08.632+09:00", "message": "[업로드] PASS · 15/15"} +{"timestamp": "2026-10-18T15:47:08.632+09:00", "message": "[인덱싱] PASS · 15/15"} +{"timestamp": "2026-10-18T15:47:08.632+09:00", "message": "[검색] PASS · 3/3"} +{"timestamp": "2026-10-18T15:47:08.632+09:00", "message": "[원본 해시] PASS · 15/15"} +{"timestamp": "2026-10-18T15:47:08.632+09:00", "message": "[생성 답변·인용] NOT_RUN · 0/0"} +{"timestamp": "2026-10-18T15:47:08.632+09:00", "message": "[문서 ID 재사용] PASS · 15/15"} +{"timestamp": "2026-10-18T15:47:08.632+09:00", "message": "[최종] 종료 코드 0"} diff --git a/docs/test-results/demo-fresh-20261018/runs/39105008958-1/replay-result/summary.json b/docs/test-results/demo-fresh-20261018/runs/39105008958-1/replay-result/summary.json new file mode 100644 index 00000000..773ed133 --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39105008958-1/replay-result/summary.json @@ -0,0 +1,86 @@ +{ + "schemaVersion": 1, + "runId": "20261018T154707361229+0900", + "revision": "148ae4c04dd1301094cdb0c67fa1086293f217bf", + "scope": "search", + "startedAt": "2026-10-18T15:47:07.362+09:00", + "stages": { + "upload": { + "status": "PASS", + "passed": 15, + "expected": 15 + }, + "indexing": { + "status": "PASS", + "passed": 15, + "expected": 15 + }, + "search": { + "status": "PASS", + "passed": 3, + "expected": 3 + }, + "download": { + "status": "PASS", + "passed": 15, + "expected": 15 + }, + "rag": { + "status": "NOT_RUN", + "passed": 0, + "expected": 0 + }, + "replay": { + "status": "PASS", + "passed": 15, + "expected": 15 + } + }, + "documents": { + "b8dae14d4ba98ceda83e672be41d20895a70ee01f4cf128a0431d137ea581304": 3, + "924112041275f193f2296a55ba5ea098e14ff98b8908eff2051e37b8c2848fb3": 4, + "82d7205d795868938f73eb871b0ca29aff632ce5948e0a5c60d7614222265379": 5, + "f0fb63cf9f42118f799082c74d8d1237434313270ff6b9ac12bb05d1d2955d9a": 6, + "6672c9b2faa6d5b1d04bd287d7a7a71746262c6fb126333f217249aacef6caeb": 7, + "3295bab5db9c7ddcd5a6d8e141b25960f167e553b03f80abaaabcc7670cf7760": 8, + "d5e11dad0ac802f01925eaac1c98efff483616ca0bb02f4be098bcbe1e2d315b": 9, + "ece687b9507957c5bc1ba7e0deff426e8803b81332e0cd507b3558974bdd78b0": 10, + "1830ee48e2942f6e80c5d72f26917ea5384e5c6ff2ca10c4b2ff2c2739e61547": 11, + "6d383df3849d304aa941d6733a0e8205c024d9fa2cfb37d21880af32f7c5c43d": 12, + "a5635fe4c4f3f60d0aa52e3cf7e493da741f6e7e8b15adef534f50030cdafa03": 13, + "fab797bb45eef73ace164770c5fc8d47c8e1c9378e87c1aa296b706759b30831": 14, + "c1bc83a520b4b05557ef8cbf48da15b82a16df02c04274c56cf4604ff9ee50b3": 15, + "d1e0658cf5d053175cab29dff6d21667c5e8527def7c6acc6c0efb814baf6285": 16, + "0bebba1fec7239ddd92b23f81b3b35910ae1d031ac02b5432cd460b1d9445244": 17 + }, + "queries": [ + { + "number": 1, + "expectedDocumentId": 3, + "search": "PASS", + "rag": "NOT_RUN", + "queryId": 4 + }, + { + "number": 2, + "expectedDocumentId": 8, + "search": "PASS", + "rag": "NOT_RUN", + "queryId": 5 + }, + { + "number": 3, + "expectedDocumentId": 13, + "search": "PASS", + "rag": "NOT_RUN", + "queryId": 6 + } + ], + "corpusSha256": "e27ae024506149089279f92b88e13262fa96d651f00e360b2815bc96d648e70d", + "targetFingerprint": "710f80b15be84b1c810005d494cc5c8ecd79a67a3d6300c8ba885f1540ef7474", + "topK": 3, + "checksSha256": "103c1585e7dd2b45f03eb9ba61463bb9a8647efa8026b270c41a45c8eb677c6c", + "exitCode": 0, + "finishedAt": "2026-10-18T15:47:08.632+09:00", + "elapsedSeconds": 1.272 +} \ No newline at end of file diff --git a/docs/test-results/demo-fresh-20261018/runs/39105008958-1/runtime/0b33fe3a31414ff28fc8f089dbf5c65c/backend.log b/docs/test-results/demo-fresh-20261018/runs/39105008958-1/runtime/0b33fe3a31414ff28fc8f089dbf5c65c/backend.log new file mode 100644 index 00000000..81744066 --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39105008958-1/runtime/0b33fe3a31414ff28fc8f089dbf5c65c/backend.log @@ -0,0 +1,289 @@ +2026-10-18T15:45:12+09:00 Downloading <설정된 서버> +2026-10-18T15:45:14+09:00 .............10%.............20%.............30%.............40%.............50%.............60%..............70%.............80%.............90%.............100% +2026-10-18T15:45:15+09:00 +2026-10-18T15:45:15+09:00 Welcome to Gradle 8.14.5! +2026-10-18T15:45:15+09:00 +2026-10-18T15:45:15+09:00 Here are the highlights of this release: +2026-10-18T15:45:15+09:00 - Java 24 support +2026-10-18T15:45:15+09:00 - GraalVM Native Image toolchain selection +2026-10-18T15:45:15+09:00 - Enhancements to test reporting +2026-10-18T15:45:15+09:00 - Build Authoring improvements +2026-10-18T15:45:15+09:00 +2026-10-18T15:45:15+09:00 For more details see <설정된 서버> +2026-10-18T15:45:15+09:00 +2026-10-18T15:45:15+09:00 To honour the JVM settings for this build a single-use Daemon process will be forked. For more on this, please refer to <설정된 서버> in the Gradle documentation. +2026-10-18T15:45:16+09:00 Daemon will be stopped at the end of the build +2026-10-18T15:46:24+09:00 > Task :compileJava +2026-10-18T15:46:24+09:00 > Task :processResources +2026-10-18T15:46:24+09:00 > Task :classes +2026-10-18T15:46:24+09:00 > Task :resolveMainClassName +2026-10-18T15:46:26+09:00 +2026-10-18T15:46:26+09:00 > Task :bootRun +2026-10-18T15:46:26+09:00 Standard Commons Logging discovery in action with spring-jcl: please remove commons-logging.jar from classpath in order to avoid potential conflicts +2026-10-18T15:46:26+09:00 Standard Commons Logging discovery in action with spring-jcl: please remove commons-logging.jar from classpath in order to avoid potential conflicts +2026-10-18T15:46:26+09:00 +2026-10-18T15:46:26+09:00 . ____ _ __ _ _ +2026-10-18T15:46:26+09:00 /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ +2026-10-18T15:46:26+09:00 ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ +2026-10-18T15:46:26+09:00 \\/ ___)| |_)| | | | | || (_| | ) ) ) ) +2026-10-18T15:46:26+09:00 ' |____| .__|_| |_|_| |_\__, | / / / / +2026-10-18T15:46:26+09:00 =========|_|==============|___/=/_/_/_/ +2026-10-18T15:46:26+09:00 +2026-10-18T15:46:26+09:00 :: Spring Boot :: (v3.5.16) +2026-10-18T15:46:26+09:00 +2026-10-18T15:46:26+09:00 2026-10-18T06:46:25.329Z INFO 9946 --- [docgrid] [ restartedMain] c.opensource.docgrid.DocgridApplication : Starting DocgridApplication using Java 17.0.20.1 with PID 9946 (<작업공간>/backend/build/classes/java/main started by runner in <작업공간>) +2026-10-18T15:46:26+09:00 2026-10-18T06:46:25.331Z INFO 9946 --- [docgrid] [ restartedMain] c.opensource.docgrid.DocgridApplication : The following 1 profile is active: "local" +2026-10-18T15:46:26+09:00 2026-10-18T06:46:25.356Z INFO 9946 --- [docgrid] [ restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable +2026-10-18T15:46:26+09:00 2026-10-18T06:46:25.356Z INFO 9946 --- [docgrid] [ restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' +2026-10-18T15:46:26+09:00 2026-10-18T06:46:26.088Z INFO 9946 --- [docgrid] [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode +2026-10-18T15:46:26+09:00 2026-10-18T06:46:26.089Z INFO 9946 --- [docgrid] [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2026-10-18T15:46:26+09:00 2026-10-18T06:46:26.192Z INFO 9946 --- [docgrid] [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 98 ms. Found 31 JPA repository interfaces. +2026-10-18T15:46:26+09:00 2026-10-18T06:46:26.199Z INFO 9946 --- [docgrid] [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode +2026-10-18T15:46:26+09:00 2026-10-18T06:46:26.199Z INFO 9946 --- [docgrid] [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode. +2026-10-18T15:46:26+09:00 2026-10-18T06:46:26.214Z INFO 9946 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.collection.repository.CollectionDocumentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:46:26+09:00 2026-10-18T06:46:26.214Z INFO 9946 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.collection.repository.CollectionRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:46:26+09:00 2026-10-18T06:46:26.215Z INFO 9946 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.document.repository.DocumentChunkRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:46:26+09:00 2026-10-18T06:46:26.215Z INFO 9946 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.document.repository.DocumentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:46:26+09:00 2026-10-18T06:46:26.215Z INFO 9946 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.document.repository.DocumentVersionRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:46:26+09:00 2026-10-18T06:46:26.215Z INFO 9946 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.document.repository.FileObjectRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:46:26+09:00 2026-10-18T06:46:26.215Z INFO 9946 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.embedding.repository.EmbeddingJobRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:46:26+09:00 2026-10-18T06:46:26.215Z INFO 9946 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.embedding.repository.EmbeddingModelRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:46:26+09:00 2026-10-18T06:46:26.215Z INFO 9946 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.embedding.repository.EmbeddingRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:46:26+09:00 2026-10-18T06:46:26.216Z INFO 9946 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.permission.repository.CollectionPermissionRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:46:26+09:00 2026-10-18T06:46:26.216Z INFO 9946 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.permission.repository.DocumentPermissionRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:46:26+09:00 2026-10-18T06:46:26.216Z INFO 9946 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.permission.repository.UserDocumentAccessCacheRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:46:26+09:00 2026-10-18T06:46:26.216Z INFO 9946 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.rag.repository.RagResponseRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:46:26+09:00 2026-10-18T06:46:26.216Z INFO 9946 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.rag.repository.ResponseCitationRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:46:26+09:00 2026-10-18T06:46:26.216Z INFO 9946 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.search.repository.SearchConversationRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:46:26+09:00 2026-10-18T06:46:26.217Z INFO 9946 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.search.repository.SearchQueryRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:46:26+09:00 2026-10-18T06:46:26.217Z INFO 9946 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.search.repository.SearchResultRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:46:26+09:00 2026-10-18T06:46:26.217Z INFO 9946 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.search.repository.VectorSearchRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:46:26+09:00 2026-10-18T06:46:26.217Z INFO 9946 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.sync.repository.SyncAdminActionRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:46:26+09:00 2026-10-18T06:46:26.217Z INFO 9946 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.sync.repository.SyncConsistencyIssueRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:46:26+09:00 2026-10-18T06:46:26.217Z INFO 9946 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.sync.repository.SyncEventDeliveryAttemptRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:46:26+09:00 2026-10-18T06:46:26.217Z INFO 9946 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.sync.repository.SyncOutboxEventRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:46:26+09:00 2026-10-18T06:46:26.218Z INFO 9946 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.sync.repository.SyncReconciliationRunRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:46:26+09:00 2026-10-18T06:46:26.218Z INFO 9946 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.user.repository.DepartmentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:46:26+09:00 2026-10-18T06:46:26.218Z INFO 9946 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.user.repository.McpAccessTokenRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:46:26+09:00 2026-10-18T06:46:26.218Z INFO 9946 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.user.repository.RoleRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:46:26+09:00 2026-10-18T06:46:26.218Z INFO 9946 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.user.repository.UserRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:46:26+09:00 2026-10-18T06:46:26.218Z INFO 9946 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.user.repository.UserRoleRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:46:26+09:00 2026-10-18T06:46:26.218Z INFO 9946 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.worker.repository.EmbeddingJobAttemptRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:46:26+09:00 2026-10-18T06:46:26.218Z INFO 9946 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.worker.repository.IndexingEventRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:46:26+09:00 2026-10-18T06:46:26.219Z INFO 9946 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.worker.repository.WorkerNodeRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:46:26+09:00 2026-10-18T06:46:26.219Z INFO 9946 --- [docgrid] [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 15 ms. Found 0 Redis repository interfaces. +2026-10-18T15:46:26+09:00 2026-10-18T06:46:26.475Z WARN 9946 --- [docgrid] [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.ai.mcp.server.common.autoconfigure.annotations.McpServerAnnotationScannerAutoConfiguration' of type [org.springframework.ai.mcp.server.common.autoconfigure.annotations.McpServerAnnotationScannerAutoConfiguration] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying). Is this bean getting eagerly injected/applied to a currently created BeanPostProcessor [serverAnnotatedMethodBeanPostProcessor]? Check the corresponding BeanPostProcessor declaration and its dependencies/advisors. If this bean does not have to be post-processed, declare it with ROLE_INFRASTRUCTURE. +2026-10-18T15:46:26+09:00 2026-10-18T06:46:26.476Z WARN 9946 --- [docgrid] [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'serverAnnotatedBeanRegistry' of type [org.springframework.ai.mcp.server.common.autoconfigure.annotations.McpServerAnnotationScannerAutoConfiguration$ServerMcpAnnotatedBeans] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying). Is this bean getting eagerly injected/applied to a currently created BeanPostProcessor [serverAnnotatedMethodBeanPostProcessor]? Check the corresponding BeanPostProcessor declaration and its dependencies/advisors. If this bean does not have to be post-processed, declare it with ROLE_INFRASTRUCTURE. +2026-10-18T15:46:26+09:00 2026-10-18T06:46:26.480Z WARN 9946 --- [docgrid] [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'stringOrNumberMigrationVersionConverter' of type [org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration$StringOrNumberToMigrationVersionConverter] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying). Is this bean getting eagerly injected/applied to a currently created BeanPostProcessor [serverAnnotatedMethodBeanPostProcessor]? Check the corresponding BeanPostProcessor declaration and its dependencies/advisors. If this bean does not have to be post-processed, declare it with ROLE_INFRASTRUCTURE. +2026-10-18T15:46:26+09:00 2026-10-18T06:46:26.482Z WARN 9946 --- [docgrid] [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'spring.ai.mcp.server.annotation-scanner-org.springframework.ai.mcp.server.common.autoconfigure.annotations.McpServerAnnotationScannerProperties' of type [org.springframework.ai.mcp.server.common.autoconfigure.annotations.McpServerAnnotationScannerProperties] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying). Is this bean getting eagerly injected/applied to a currently created BeanPostProcessor [serverAnnotatedMethodBeanPostProcessor]? Check the corresponding BeanPostProcessor declaration and its dependencies/advisors. If this bean does not have to be post-processed, declare it with ROLE_INFRASTRUCTURE. +2026-10-18T15:46:26+09:00 2026-10-18T06:46:26.774Z INFO 9946 --- [docgrid] [ restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port 8080 (http) +2026-10-18T15:46:26+09:00 2026-10-18T06:46:26.783Z INFO 9946 --- [docgrid] [ restartedMain] o.apache.catalina.core.StandardService : Starting service [Tomcat] +2026-10-18T15:46:26+09:00 2026-10-18T06:46:26.784Z INFO 9946 --- [docgrid] [ restartedMain] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.55] +2026-10-18T15:46:26+09:00 2026-10-18T06:46:26.814Z INFO 9946 --- [docgrid] [ restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext +2026-10-18T15:46:26+09:00 2026-10-18T06:46:26.815Z INFO 9946 --- [docgrid] [ restartedMain] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1458 ms +2026-10-18T15:46:26+09:00 Standard Commons Logging discovery in action with spring-jcl: please remove commons-logging.jar from classpath in order to avoid potential conflicts +2026-10-18T15:46:27+09:00 2026-10-18T06:46:26.998Z INFO 9946 --- [docgrid] [ restartedMain] com.zaxxer.hikari.HikariDataSource : docgrid-local-db-pool - Starting... +2026-10-18T15:46:27+09:00 2026-10-18T06:46:27.184Z INFO 9946 --- [docgrid] [ restartedMain] com.zaxxer.hikari.pool.HikariPool : docgrid-local-db-pool - Added connection org.postgresql.jdbc.PgConnection@26d752a1 +2026-10-18T15:46:27+09:00 2026-10-18T06:46:27.185Z INFO 9946 --- [docgrid] [ restartedMain] com.zaxxer.hikari.HikariDataSource : docgrid-local-db-pool - Start completed. +2026-10-18T15:46:27+09:00 2026-10-18T06:46:27.202Z INFO 9946 --- [docgrid] [ restartedMain] org.flywaydb.core.FlywayExecutor : Database: jdbc:postgresql://127.0.0.1:55432/app?currentSchema=public&sslmode=disable (PostgreSQL 17.8) +2026-10-18T15:46:27+09:00 2026-10-18T06:46:27.239Z INFO 9946 --- [docgrid] [ restartedMain] o.f.c.i.s.JdbcTableSchemaHistory : Schema history table "public"."flyway_schema_history" does not exist yet +2026-10-18T15:46:27+09:00 2026-10-18T06:46:27.242Z INFO 9946 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbValidate : Successfully validated 54 migrations (execution time 00:00.026s) +2026-10-18T15:46:27+09:00 2026-10-18T06:46:27.249Z INFO 9946 --- [docgrid] [ restartedMain] o.f.c.i.s.JdbcTableSchemaHistory : Creating Schema History table "public"."flyway_schema_history" ... +2026-10-18T15:46:27+09:00 2026-10-18T06:46:27.286Z INFO 9946 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Current version of schema "public": << Empty Schema >> +2026-10-18T15:46:27+09:00 2026-10-18T06:46:27.289Z INFO 9946 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "1 - init schema" +2026-10-18T15:46:27+09:00 2026-10-18T06:46:27.300Z INFO 9946 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "2 - create departments" +2026-10-18T15:46:27+09:00 2026-10-18T06:46:27.308Z INFO 9946 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "3 - create users" +2026-10-18T15:46:27+09:00 2026-10-18T06:46:27.315Z INFO 9946 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "4 - create file objects" +2026-10-18T15:46:27+09:00 2026-10-18T06:46:27.323Z INFO 9946 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "5 - create documents" +2026-10-18T15:46:27+09:00 2026-10-18T06:46:27.330Z INFO 9946 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "6 - create document versions" +2026-10-18T15:46:27+09:00 2026-10-18T06:46:27.339Z INFO 9946 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "7 - create collections" +2026-10-18T15:46:27+09:00 2026-10-18T06:46:27.345Z INFO 9946 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "8 - create collection documents" +2026-10-18T15:46:27+09:00 2026-10-18T06:46:27.352Z INFO 9946 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "9 - create roles" +2026-10-18T15:46:27+09:00 2026-10-18T06:46:27.357Z INFO 9946 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "10 - create user roles" +2026-10-18T15:46:27+09:00 2026-10-18T06:46:27.363Z INFO 9946 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "11 - create collection permissions" +2026-10-18T15:46:27+09:00 2026-10-18T06:46:27.372Z INFO 9946 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "12 - create document permissions" +2026-10-18T15:46:27+09:00 2026-10-18T06:46:27.380Z INFO 9946 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "13 - create user document access cache" +2026-10-18T15:46:27+09:00 2026-10-18T06:46:27.384Z WARN 9946 --- [docgrid] [ restartedMain] o.f.c.i.s.DefaultSqlScriptExecutor : DB: identifier "uk_user_document_access_cache_user_id_document_id_source_type_source_id" will be truncated to "uk_user_document_access_cache_user_id_document_id_source_type_s" (SQL State: 42622 - Error Code: 0) +2026-10-18T15:46:27+09:00 2026-10-18T06:46:27.389Z INFO 9946 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "14 - create embedding models" +2026-10-18T15:46:27+09:00 2026-10-18T06:46:27.396Z INFO 9946 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "15 - create document chunks" +2026-10-18T15:46:27+09:00 2026-10-18T06:46:27.402Z INFO 9946 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "16 - create embeddings" +2026-10-18T15:46:27+09:00 2026-10-18T06:46:27.409Z INFO 9946 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "17 - create worker nodes" +2026-10-18T15:46:27+09:00 2026-10-18T06:46:27.415Z INFO 9946 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "18 - create embedding jobs" +2026-10-18T15:46:27+09:00 2026-10-18T06:46:27.421Z INFO 9946 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "19 - create embedding job attempts" +2026-10-18T15:46:27+09:00 2026-10-18T06:46:27.426Z INFO 9946 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "20 - create indexing events" +2026-10-18T15:46:27+09:00 2026-10-18T06:46:27.433Z INFO 9946 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "21 - create search queries" +2026-10-18T15:46:27+09:00 2026-10-18T06:46:27.440Z INFO 9946 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "22 - create search results" +2026-10-18T15:46:27+09:00 2026-10-18T06:46:27.446Z INFO 9946 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "23 - create rag responses" +2026-10-18T15:46:27+09:00 2026-10-18T06:46:27.453Z INFO 9946 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "24 - create response citations" +2026-10-18T15:46:27+09:00 2026-10-18T06:46:27.459Z INFO 9946 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "25 - create failover events" +2026-10-18T15:46:27+09:00 2026-10-18T06:46:27.466Z INFO 9946 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "26 - create mcp access tokens" +2026-10-18T15:46:27+09:00 2026-10-18T06:46:27.472Z INFO 9946 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "27 - add embedding model constraints" +2026-10-18T15:46:27+09:00 2026-10-18T06:46:27.477Z INFO 9946 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "28 - seed roles departments admin" +2026-10-18T15:46:27+09:00 2026-10-18T06:46:27.481Z INFO 9946 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "29 - add file object deduplication constraint" +2026-10-18T15:46:27+09:00 2026-10-18T06:46:27.485Z INFO 9946 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "30 - add document version upload metadata" +2026-10-18T15:46:27+09:00 2026-10-18T06:46:27.491Z INFO 9946 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "31 - add worker instance id" +2026-10-18T15:46:27+09:00 2026-10-18T06:46:27.495Z INFO 9946 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "32 - convert vector columns to pgvector" +2026-10-18T15:46:27+09:00 2026-10-18T06:46:27.502Z INFO 9946 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "33 - add embedding job claim token" +2026-10-18T15:46:27+09:00 2026-10-18T06:46:27.505Z INFO 9946 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "34 - add claim token to embedding job attempts" +2026-10-18T15:46:27+09:00 2026-10-18T06:46:27.508Z INFO 9946 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "35 - add embedding job next retry at" +2026-10-18T15:46:27+09:00 2026-10-18T06:46:27.512Z INFO 9946 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "36 - create sync outbox events" +2026-10-18T15:46:27+09:00 2026-10-18T06:46:27.518Z INFO 9946 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "37 - create sync consistency issues" +2026-10-18T15:46:27+09:00 2026-10-18T06:46:27.526Z INFO 9946 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "38 - create sync admin actions" +2026-10-18T15:46:27+09:00 2026-10-18T06:46:27.531Z INFO 9946 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "39 - create sync event delivery attempts" +2026-10-18T15:46:27+09:00 2026-10-18T06:46:27.537Z INFO 9946 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "40 - alter rag responses answer text nullable" +2026-10-18T15:46:27+09:00 2026-10-18T06:46:27.540Z INFO 9946 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "41 - create search conversations" +2026-10-18T15:46:27+09:00 2026-10-18T06:46:27.543Z INFO 9946 --- [docgrid] [ restartedMain] o.f.c.i.s.DefaultSqlScriptExecutor : +--------+ +2026-10-18T15:46:27+09:00 | setval | +2026-10-18T15:46:27+09:00 +--------+ +2026-10-18T15:46:27+09:00 | 1 | +2026-10-18T15:46:27+09:00 +--------+ +2026-10-18T15:46:27+09:00 +2026-10-18T15:46:27+09:00 2026-10-18T06:46:27.547Z INFO 9946 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "42 - create collection closure" +2026-10-18T15:46:27+09:00 2026-10-18T06:46:27.551Z INFO 9946 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "43 - add rag responses claimed at" +2026-10-18T15:46:27+09:00 2026-10-18T06:46:27.554Z INFO 9946 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "44 - create ha probe writes" +2026-10-18T15:46:27+09:00 2026-10-18T06:46:27.558Z INFO 9946 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "45 - create ha probe idempotent writes" +2026-10-18T15:46:27+09:00 2026-10-18T06:46:27.561Z INFO 9946 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "46 - enable pg trgm chunk text index" +2026-10-18T15:46:27+09:00 2026-10-18T06:46:27.569Z INFO 9946 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "47 - create initial upload requests" +2026-10-18T15:46:27+09:00 2026-10-18T06:46:27.573Z INFO 9946 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "48 - track initial upload candidates" +2026-10-18T15:46:27+09:00 2026-10-18T06:46:27.578Z INFO 9946 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "49 - create version upload requests" +2026-10-18T15:46:27+09:00 2026-10-18T06:46:27.582Z INFO 9946 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "50 - track version upload candidates" +2026-10-18T15:46:27+09:00 2026-10-18T06:46:27.588Z INFO 9946 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "51 - add rag response claim lease" +2026-10-18T15:46:27+09:00 2026-10-18T06:46:27.592Z INFO 9946 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "52 - create permission revocation requests" +2026-10-18T15:46:27+09:00 2026-10-18T06:46:27.596Z INFO 9946 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" with repeatable migration "seed bge m3 embedding model" +2026-10-18T15:46:27+09:00 2026-10-18T06:46:27.602Z INFO 9946 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" with repeatable migration "seed test fixtures" +2026-10-18T15:46:27+09:00 2026-10-18T06:46:27.617Z INFO 9946 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Successfully applied 54 migrations to schema "public", now at version v52 (execution time 00:00.126s) +2026-10-18T15:46:27+09:00 2026-10-18T06:46:27.673Z INFO 9946 --- [docgrid] [ restartedMain] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default] +2026-10-18T15:46:27+09:00 2026-10-18T06:46:27.703Z INFO 9946 --- [docgrid] [ restartedMain] org.hibernate.Version : HHH000412: Hibernate ORM core version 6.6.53.Final +2026-10-18T15:46:27+09:00 2026-10-18T06:46:27.718Z INFO 9946 --- [docgrid] [ restartedMain] o.h.c.internal.RegionFactoryInitiator : HHH000026: Second-level cache disabled +2026-10-18T15:46:27+09:00 2026-10-18T06:46:27.846Z INFO 9946 --- [docgrid] [ restartedMain] o.s.o.j.p.SpringPersistenceUnitInfo : No LoadTimeWeaver setup: ignoring JPA class transformer +2026-10-18T15:46:27+09:00 2026-10-18T06:46:27.882Z INFO 9946 --- [docgrid] [ restartedMain] org.hibernate.orm.connections.pooling : HHH10001005: Database info: +2026-10-18T15:46:27+09:00 Database JDBC URL [Connecting through datasource 'HikariDataSource (docgrid-local-db-pool)'] +2026-10-18T15:46:27+09:00 Database driver: undefined/unknown +2026-10-18T15:46:27+09:00 Database version: 17.8 +2026-10-18T15:46:27+09:00 Autocommit mode: undefined/unknown +2026-10-18T15:46:27+09:00 Isolation level: undefined/unknown +2026-10-18T15:46:27+09:00 Minimum pool size: undefined/unknown +2026-10-18T15:46:27+09:00 Maximum pool size: undefined/unknown +2026-10-18T15:46:28+09:00 2026-10-18T06:46:28.555Z INFO 9946 --- [docgrid] [ restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) +2026-10-18T15:46:28+09:00 2026-10-18T06:46:28.579Z INFO 9946 --- [docgrid] [ restartedMain] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' +2026-10-18T15:46:28+09:00 2026-10-18T06:46:28.742Z INFO 9946 --- [docgrid] [ restartedMain] o.s.d.j.r.query.QueryEnhancerFactory : Hibernate is in classpath; If applicable, HQL parser will be used. +2026-10-18T15:46:30+09:00 2026-10-18T06:46:30.699Z WARN 9946 --- [docgrid] [ restartedMain] .s.s.UserDetailsServiceAutoConfiguration : +2026-10-18T15:46:30+09:00 +2026-10-18T15:46:30+09:00 Using generated security password: d3777193-8357-404d-9e44-55c2c02329e7 +2026-10-18T15:46:30+09:00 +2026-10-18T15:46:30+09:00 This generated password is for development use only. Your security configuration must be updated before running your application in production. +2026-10-18T15:46:30+09:00 +2026-10-18T15:46:30+09:00 2026-10-18T06:46:30.702Z INFO 9946 --- [docgrid] [ restartedMain] r$InitializeUserDetailsManagerConfigurer : Global AuthenticationManager configured with UserDetailsService bean with name inMemoryUserDetailsManager +2026-10-18T15:46:31+09:00 2026-10-18T06:46:31.078Z INFO 9946 --- [docgrid] [ restartedMain] o.s.a.m.s.c.a.McpServerAutoConfiguration : Enable tools capabilities, notification: true +2026-10-18T15:46:31+09:00 2026-10-18T06:46:31.079Z INFO 9946 --- [docgrid] [ restartedMain] o.s.a.m.s.c.a.McpServerAutoConfiguration : Registered tools: 3 +2026-10-18T15:46:31+09:00 2026-10-18T06:46:31.079Z INFO 9946 --- [docgrid] [ restartedMain] o.s.a.m.s.c.a.McpServerAutoConfiguration : Enable resources capabilities, notification: true +2026-10-18T15:46:31+09:00 2026-10-18T06:46:31.079Z INFO 9946 --- [docgrid] [ restartedMain] o.s.a.m.s.c.a.McpServerAutoConfiguration : Enable resources templates capabilities, notification: true +2026-10-18T15:46:31+09:00 2026-10-18T06:46:31.080Z INFO 9946 --- [docgrid] [ restartedMain] o.s.a.m.s.c.a.McpServerAutoConfiguration : Enable prompts capabilities, notification: true +2026-10-18T15:46:31+09:00 2026-10-18T06:46:31.080Z INFO 9946 --- [docgrid] [ restartedMain] o.s.a.m.s.c.a.McpServerAutoConfiguration : Enable completions capabilities +2026-10-18T15:46:31+09:00 2026-10-18T06:46:31.268Z INFO 9946 --- [docgrid] [ restartedMain] o.s.b.d.a.OptionalLiveReloadServer : LiveReload server is running on port 35729 +2026-10-18T15:46:31+09:00 2026-10-18T06:46:31.306Z INFO 9946 --- [docgrid] [ restartedMain] o.s.m.s.b.SimpleBrokerMessageHandler : Starting... +2026-10-18T15:46:31+09:00 2026-10-18T06:46:31.307Z INFO 9946 --- [docgrid] [ restartedMain] o.s.m.s.b.SimpleBrokerMessageHandler : BrokerAvailabilityEvent[available=true, SimpleBrokerMessageHandler [org.springframework.messaging.simp.broker.DefaultSubscriptionRegistry@6bad9d00]] +2026-10-18T15:46:31+09:00 2026-10-18T06:46:31.307Z INFO 9946 --- [docgrid] [ restartedMain] o.s.m.s.b.SimpleBrokerMessageHandler : Started. +2026-10-18T15:46:31+09:00 2026-10-18T06:46:31.315Z INFO 9946 --- [docgrid] [ restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port 8080 (http) with context path '/' +2026-10-18T15:46:31+09:00 2026-10-18T06:46:31.385Z INFO 9946 --- [docgrid] [ restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port 8081 (http) +2026-10-18T15:46:31+09:00 2026-10-18T06:46:31.385Z INFO 9946 --- [docgrid] [ restartedMain] o.apache.catalina.core.StandardService : Starting service [Tomcat] +2026-10-18T15:46:31+09:00 2026-10-18T06:46:31.386Z INFO 9946 --- [docgrid] [ restartedMain] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.55] +2026-10-18T15:46:31+09:00 2026-10-18T06:46:31.399Z INFO 9946 --- [docgrid] [ restartedMain] o.a.c.c.C.[Tomcat-1].[localhost].[/] : Initializing Spring embedded WebApplicationContext +2026-10-18T15:46:31+09:00 2026-10-18T06:46:31.399Z INFO 9946 --- [docgrid] [ restartedMain] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 81 ms +2026-10-18T15:46:31+09:00 Standard Commons Logging discovery in action with spring-jcl: please remove commons-logging.jar from classpath in order to avoid potential conflicts +2026-10-18T15:46:31+09:00 2026-10-18T06:46:31.407Z INFO 9946 --- [docgrid] [ restartedMain] o.s.b.a.e.web.EndpointLinksResolver : Exposing 2 endpoints beneath base path '/actuator' +2026-10-18T15:46:31+09:00 2026-10-18T06:46:31.427Z INFO 9946 --- [docgrid] [ restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port 8081 (http) with context path '/' +2026-10-18T15:46:31+09:00 2026-10-18T06:46:31.439Z INFO 9946 --- [docgrid] [ restartedMain] c.opensource.docgrid.DocgridApplication : Started DocgridApplication in 6.436 seconds (process running for 6.675) +2026-10-18T15:46:31+09:00 2026-10-18T06:46:31.597Z INFO 9946 --- [docgrid] [ restartedMain] c.o.d.d.w.l.WorkerLifecycleManager : 인덱싱 Worker를 등록했습니다. workerId=1, workerName=indexing-worker, instanceId=6ea23b46-e468-40d3-a66f-87d21ab99198 +2026-10-18T15:46:31+09:00 2026-10-18T06:46:31.744Z INFO 9946 --- [docgrid] [nio-8081-exec-1] o.a.c.c.C.[Tomcat-1].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServletRegistration' +2026-10-18T15:46:31+09:00 2026-10-18T06:46:31.745Z INFO 9946 --- [docgrid] [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServletRegistration' +2026-10-18T15:46:31+09:00 2026-10-18T06:46:31.745Z INFO 9946 --- [docgrid] [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 0 ms +2026-10-18T15:46:35+09:00 2026-10-18T06:46:35.350Z INFO 9946 --- [docgrid] [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' +2026-10-18T15:46:35+09:00 2026-10-18T06:46:35.351Z INFO 9946 --- [docgrid] [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' +2026-10-18T15:46:35+09:00 2026-10-18T06:46:35.352Z INFO 9946 --- [docgrid] [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 1 ms +2026-10-18T15:46:37+09:00 2026-10-18T06:46:37.790Z WARN 9946 --- [docgrid] [nio-8080-exec-5] c.o.d.g.e.GlobalExceptionHandler : [DocGridException] POST /auth/login | code=USER-004 | message=이메일 또는 비밀번호가 올바르지 않습니다. +2026-10-18T15:46:37+09:00 2026-10-18T06:46:37.795Z WARN 9946 --- [docgrid] [nio-8080-exec-5] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [com.opensource.docgrid.global.exception.DocGridException: 이메일 또는 비밀번호가 올바르지 않습니다.] +2026-10-18T15:46:46+09:00 2026-10-18T06:46:46.488Z INFO 9946 --- [docgrid] [ng-worker-job-1] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 시작합니다. workerId=1, jobId=1, attemptId=2, initialStatus=UPLOADED +2026-10-18T15:46:46+09:00 2026-10-18T06:46:46.488Z INFO 9946 --- [docgrid] [ng-worker-job-2] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 시작합니다. workerId=1, jobId=2, attemptId=1, initialStatus=UPLOADED +2026-10-18T15:46:49+09:00 2026-10-18T06:46:49.054Z INFO 9946 --- [docgrid] [ng-worker-job-2] .e.s.c.DocumentIndexingCompletionService : 문서 인덱싱 완료: jobId=2, attemptId=1, documentId=4, versionId=4, chunkCount=1, embeddingCount=1, durationMs=2525 +2026-10-18T15:46:49+09:00 2026-10-18T06:46:49.062Z INFO 9946 --- [docgrid] [ng-worker-job-2] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 완료했습니다. workerId=1, jobId=2, attemptId=1 +2026-10-18T15:46:49+09:00 2026-10-18T06:46:49.497Z INFO 9946 --- [docgrid] [ng-worker-job-2] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 시작합니다. workerId=1, jobId=3, attemptId=3, initialStatus=UPLOADED +2026-10-18T15:46:50+09:00 2026-10-18T06:46:50.511Z INFO 9946 --- [docgrid] [ng-worker-job-1] .e.s.c.DocumentIndexingCompletionService : 문서 인덱싱 완료: jobId=1, attemptId=2, documentId=3, versionId=3, chunkCount=1, embeddingCount=1, durationMs=4011 +2026-10-18T15:46:50+09:00 2026-10-18T06:46:50.517Z INFO 9946 --- [docgrid] [ng-worker-job-1] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 완료했습니다. workerId=1, jobId=1, attemptId=2 +2026-10-18T15:46:51+09:00 2026-10-18T06:46:51.508Z INFO 9946 --- [docgrid] [ng-worker-job-1] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 시작합니다. workerId=1, jobId=4, attemptId=4, initialStatus=UPLOADED +2026-10-18T15:46:51+09:00 2026-10-18T06:46:51.599Z INFO 9946 --- [docgrid] [ng-worker-job-2] .e.s.c.DocumentIndexingCompletionService : 문서 인덱싱 완료: jobId=3, attemptId=3, documentId=5, versionId=5, chunkCount=1, embeddingCount=1, durationMs=2102 +2026-10-18T15:46:51+09:00 2026-10-18T06:46:51.602Z INFO 9946 --- [docgrid] [ng-worker-job-2] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 완료했습니다. workerId=1, jobId=3, attemptId=3 +2026-10-18T15:46:52+09:00 2026-10-18T06:46:52.517Z INFO 9946 --- [docgrid] [ng-worker-job-2] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 시작합니다. workerId=1, jobId=5, attemptId=5, initialStatus=UPLOADED +2026-10-18T15:46:53+09:00 2026-10-18T06:46:53.000Z INFO 9946 --- [docgrid] [ng-worker-job-1] .e.s.c.DocumentIndexingCompletionService : 문서 인덱싱 완료: jobId=4, attemptId=4, documentId=6, versionId=6, chunkCount=1, embeddingCount=1, durationMs=1489 +2026-10-18T15:46:53+09:00 2026-10-18T06:46:53.003Z INFO 9946 --- [docgrid] [ng-worker-job-1] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 완료했습니다. workerId=1, jobId=4, attemptId=4 +2026-10-18T15:46:53+09:00 2026-10-18T06:46:53.541Z INFO 9946 --- [docgrid] [ng-worker-job-1] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 시작합니다. workerId=1, jobId=6, attemptId=6, initialStatus=UPLOADED +2026-10-18T15:46:54+09:00 2026-10-18T06:46:54.031Z INFO 9946 --- [docgrid] [ng-worker-job-2] .e.s.c.DocumentIndexingCompletionService : 문서 인덱싱 완료: jobId=5, attemptId=5, documentId=7, versionId=7, chunkCount=1, embeddingCount=1, durationMs=1505 +2026-10-18T15:46:54+09:00 2026-10-18T06:46:54.036Z INFO 9946 --- [docgrid] [ng-worker-job-2] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 완료했습니다. workerId=1, jobId=5, attemptId=5 +2026-10-18T15:46:54+09:00 2026-10-18T06:46:54.540Z INFO 9946 --- [docgrid] [ng-worker-job-2] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 시작합니다. workerId=1, jobId=7, attemptId=7, initialStatus=UPLOADED +2026-10-18T15:46:56+09:00 2026-10-18T06:46:56.408Z INFO 9946 --- [docgrid] [ng-worker-job-1] .e.s.c.DocumentIndexingCompletionService : 문서 인덱싱 완료: jobId=6, attemptId=6, documentId=8, versionId=8, chunkCount=6, embeddingCount=6, durationMs=2863 +2026-10-18T15:46:56+09:00 2026-10-18T06:46:56.410Z INFO 9946 --- [docgrid] [ng-worker-job-1] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 완료했습니다. workerId=1, jobId=6, attemptId=6 +2026-10-18T15:46:56+09:00 2026-10-18T06:46:56.550Z INFO 9946 --- [docgrid] [ng-worker-job-1] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 시작합니다. workerId=1, jobId=8, attemptId=8, initialStatus=UPLOADED +2026-10-18T15:46:57+09:00 2026-10-18T06:46:56.970Z INFO 9946 --- [docgrid] [ng-worker-job-2] .e.s.c.DocumentIndexingCompletionService : 문서 인덱싱 완료: jobId=7, attemptId=7, documentId=9, versionId=9, chunkCount=7, embeddingCount=7, durationMs=2422 +2026-10-18T15:46:57+09:00 2026-10-18T06:46:56.974Z INFO 9946 --- [docgrid] [ng-worker-job-2] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 완료했습니다. workerId=1, jobId=7, attemptId=7 +2026-10-18T15:46:57+09:00 2026-10-18T06:46:57.555Z INFO 9946 --- [docgrid] [ng-worker-job-2] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 시작합니다. workerId=1, jobId=9, attemptId=9, initialStatus=UPLOADED +2026-10-18T15:46:59+09:00 2026-10-18T06:46:59.194Z INFO 9946 --- [docgrid] [ng-worker-job-1] .e.s.c.DocumentIndexingCompletionService : 문서 인덱싱 완료: jobId=8, attemptId=8, documentId=10, versionId=10, chunkCount=7, embeddingCount=7, durationMs=2643 +2026-10-18T15:46:59+09:00 2026-10-18T06:46:59.198Z INFO 9946 --- [docgrid] [ng-worker-job-1] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 완료했습니다. workerId=1, jobId=8, attemptId=8 +2026-10-18T15:46:59+09:00 2026-10-18T06:46:59.528Z INFO 9946 --- [docgrid] [ng-worker-job-2] .e.s.c.DocumentIndexingCompletionService : 문서 인덱싱 완료: jobId=9, attemptId=9, documentId=11, versionId=11, chunkCount=6, embeddingCount=6, durationMs=1970 +2026-10-18T15:46:59+09:00 2026-10-18T06:46:59.530Z INFO 9946 --- [docgrid] [ng-worker-job-2] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 완료했습니다. workerId=1, jobId=9, attemptId=9 +2026-10-18T15:46:59+09:00 2026-10-18T06:46:59.555Z INFO 9946 --- [docgrid] [ng-worker-job-2] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 시작합니다. workerId=1, jobId=10, attemptId=10, initialStatus=UPLOADED +2026-10-18T15:46:59+09:00 2026-10-18T06:46:59.557Z INFO 9946 --- [docgrid] [ng-worker-job-1] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 시작합니다. workerId=1, jobId=11, attemptId=11, initialStatus=UPLOADED +2026-10-18T15:47:01+09:00 2026-10-18T06:47:01.351Z INFO 9946 --- [docgrid] [ng-worker-job-1] .e.s.c.DocumentIndexingCompletionService : 문서 인덱싱 완료: jobId=11, attemptId=11, documentId=13, versionId=13, chunkCount=1, embeddingCount=1, durationMs=1784 +2026-10-18T15:47:01+09:00 2026-10-18T06:47:01.356Z INFO 9946 --- [docgrid] [ng-worker-job-1] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 완료했습니다. workerId=1, jobId=11, attemptId=11 +2026-10-18T15:47:01+09:00 2026-10-18T06:47:01.446Z INFO 9946 --- [docgrid] [MessageBroker-2] c.o.d.d.w.l.WorkerLeaseRecoveryScheduler : Worker Lease 복구 주기를 완료했습니다. deadWorkers=0, candidates=0, recovered=0, skipped=0, failed=0 +2026-10-18T15:47:01+09:00 2026-10-18T06:47:01.562Z INFO 9946 --- [docgrid] [ng-worker-job-1] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 시작합니다. workerId=1, jobId=12, attemptId=12, initialStatus=UPLOADED +2026-10-18T15:47:02+09:00 2026-10-18T06:47:02.003Z INFO 9946 --- [docgrid] [ng-worker-job-2] .e.s.c.DocumentIndexingCompletionService : 문서 인덱싱 완료: jobId=10, attemptId=10, documentId=12, versionId=12, chunkCount=6, embeddingCount=6, durationMs=2442 +2026-10-18T15:47:02+09:00 2026-10-18T06:47:02.005Z INFO 9946 --- [docgrid] [ng-worker-job-2] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 완료했습니다. workerId=1, jobId=10, attemptId=10 +2026-10-18T15:47:02+09:00 2026-10-18T06:47:02.572Z INFO 9946 --- [docgrid] [ng-worker-job-2] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 시작합니다. workerId=1, jobId=13, attemptId=13, initialStatus=UPLOADED +2026-10-18T15:47:03+09:00 2026-10-18T06:47:03.067Z INFO 9946 --- [docgrid] [ng-worker-job-1] .e.s.c.DocumentIndexingCompletionService : 문서 인덱싱 완료: jobId=12, attemptId=12, documentId=14, versionId=14, chunkCount=1, embeddingCount=1, durationMs=1501 +2026-10-18T15:47:03+09:00 2026-10-18T06:47:03.069Z INFO 9946 --- [docgrid] [ng-worker-job-1] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 완료했습니다. workerId=1, jobId=12, attemptId=12 +2026-10-18T15:47:03+09:00 2026-10-18T06:47:03.577Z INFO 9946 --- [docgrid] [ng-worker-job-1] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 시작합니다. workerId=1, jobId=14, attemptId=14, initialStatus=UPLOADED +2026-10-18T15:47:03+09:00 2026-10-18T06:47:03.753Z INFO 9946 --- [docgrid] [ng-worker-job-2] .e.s.c.DocumentIndexingCompletionService : 문서 인덱싱 완료: jobId=13, attemptId=13, documentId=15, versionId=15, chunkCount=1, embeddingCount=1, durationMs=1177 +2026-10-18T15:47:03+09:00 2026-10-18T06:47:03.756Z INFO 9946 --- [docgrid] [ng-worker-job-2] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 완료했습니다. workerId=1, jobId=13, attemptId=13 +2026-10-18T15:47:04+09:00 2026-10-18T06:47:04.496Z INFO 9946 --- [docgrid] [ng-worker-job-1] .e.s.c.DocumentIndexingCompletionService : 문서 인덱싱 완료: jobId=14, attemptId=14, documentId=16, versionId=16, chunkCount=1, embeddingCount=1, durationMs=918 +2026-10-18T15:47:04+09:00 2026-10-18T06:47:04.498Z INFO 9946 --- [docgrid] [ng-worker-job-1] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 완료했습니다. workerId=1, jobId=14, attemptId=14 +2026-10-18T15:47:04+09:00 2026-10-18T06:47:04.576Z INFO 9946 --- [docgrid] [ng-worker-job-1] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 시작합니다. workerId=1, jobId=15, attemptId=15, initialStatus=UPLOADED +2026-10-18T15:47:05+09:00 2026-10-18T06:47:05.185Z INFO 9946 --- [docgrid] [ng-worker-job-1] .e.s.c.DocumentIndexingCompletionService : 문서 인덱싱 완료: jobId=15, attemptId=15, documentId=17, versionId=17, chunkCount=1, embeddingCount=1, durationMs=607 +2026-10-18T15:47:05+09:00 2026-10-18T06:47:05.187Z INFO 9946 --- [docgrid] [ng-worker-job-1] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 완료했습니다. workerId=1, jobId=15, attemptId=15 +2026-10-18T15:47:05+09:00 2026-10-18T06:47:05.640Z INFO 9946 --- [docgrid] [nio-8080-exec-2] c.o.d.d.s.s.q.HybridSearchQueryService : [SEARCH] hybrid modelId=1 topK=3 terms=1 vectorPool=12 lexicalPool=2 merged=12 after=3 +2026-10-18T15:47:05+09:00 2026-10-18T06:47:05.643Z INFO 9946 --- [docgrid] [nio-8080-exec-2] c.o.d.d.search.service.SearchFacade : [SEARCH] live check userId=2 before=3 after=3 liveMs=3 +2026-10-18T15:47:05+09:00 2026-10-18T06:47:05.649Z INFO 9946 --- [docgrid] [nio-8080-exec-2] c.o.d.d.search.service.SearchFacade : [SEARCH] done queryId=1 results=3 latencyMs=209 +2026-10-18T15:47:05+09:00 2026-10-18T06:47:05.652Z INFO 9946 --- [docgrid] [nio-8080-exec-2] c.o.d.domain.rag.service.RagFacade : [RAG] enqueued queryId=1 responseId=1 +2026-10-18T15:47:05+09:00 2026-10-18T06:47:05.827Z INFO 9946 --- [docgrid] [nio-8080-exec-4] c.o.d.d.s.s.q.HybridSearchQueryService : [SEARCH] hybrid modelId=1 topK=3 terms=4 vectorPool=12 lexicalPool=4 merged=12 after=3 +2026-10-18T15:47:05+09:00 2026-10-18T06:47:05.829Z INFO 9946 --- [docgrid] [nio-8080-exec-4] c.o.d.d.search.service.SearchFacade : [SEARCH] live check userId=2 before=3 after=3 liveMs=2 +2026-10-18T15:47:05+09:00 2026-10-18T06:47:05.833Z INFO 9946 --- [docgrid] [nio-8080-exec-4] c.o.d.d.search.service.SearchFacade : [SEARCH] done queryId=2 results=3 latencyMs=158 +2026-10-18T15:47:05+09:00 2026-10-18T06:47:05.835Z INFO 9946 --- [docgrid] [nio-8080-exec-4] c.o.d.domain.rag.service.RagFacade : [RAG] enqueued queryId=2 responseId=2 +2026-10-18T15:47:06+09:00 2026-10-18T06:47:06.009Z INFO 9946 --- [docgrid] [nio-8080-exec-5] c.o.d.d.s.s.q.HybridSearchQueryService : [SEARCH] hybrid modelId=1 topK=3 terms=2 vectorPool=12 lexicalPool=3 merged=12 after=3 +2026-10-18T15:47:06+09:00 2026-10-18T06:47:06.011Z INFO 9946 --- [docgrid] [nio-8080-exec-5] c.o.d.d.search.service.SearchFacade : [SEARCH] live check userId=2 before=3 after=3 liveMs=2 +2026-10-18T15:47:06+09:00 2026-10-18T06:47:06.014Z INFO 9946 --- [docgrid] [nio-8080-exec-5] c.o.d.d.search.service.SearchFacade : [SEARCH] done queryId=3 results=3 latencyMs=139 +2026-10-18T15:47:06+09:00 2026-10-18T06:47:06.015Z INFO 9946 --- [docgrid] [nio-8080-exec-5] c.o.d.domain.rag.service.RagFacade : [RAG] enqueued queryId=3 responseId=3 +2026-10-18T15:47:06+09:00 2026-10-18T06:47:06.656Z ERROR 9946 --- [docgrid] [ag-worker-job-2] c.o.d.domain.rag.service.OllamaClient : Ollama 서버 호출 실패: I/O error on POST request for "<설정된 서버> null +2026-10-18T15:47:06+09:00 2026-10-18T06:47:06.655Z ERROR 9946 --- [docgrid] [ag-worker-job-1] c.o.d.domain.rag.service.OllamaClient : Ollama 서버 호출 실패: I/O error on POST request for "<설정된 서버> null +2026-10-18T15:47:06+09:00 2026-10-18T06:47:06.663Z WARN 9946 --- [docgrid] [ag-worker-job-2] c.o.d.domain.rag.service.RagFacade : [RAG] fallback queryId=2 errorCode=RAG-001 +2026-10-18T15:47:06+09:00 2026-10-18T06:47:06.663Z WARN 9946 --- [docgrid] [ag-worker-job-1] c.o.d.domain.rag.service.RagFacade : [RAG] fallback queryId=1 errorCode=RAG-001 +2026-10-18T15:47:07+09:00 2026-10-18T06:47:07.658Z ERROR 9946 --- [docgrid] [ag-worker-job-1] c.o.d.domain.rag.service.OllamaClient : Ollama 서버 호출 실패: I/O error on POST request for "<설정된 서버> null +2026-10-18T15:47:07+09:00 2026-10-18T06:47:07.662Z WARN 9946 --- [docgrid] [ag-worker-job-1] c.o.d.domain.rag.service.RagFacade : [RAG] fallback queryId=3 errorCode=RAG-001 +2026-10-18T15:47:08+09:00 2026-10-18T06:47:08.044Z INFO 9946 --- [docgrid] [nio-8080-exec-3] c.o.d.d.s.s.q.HybridSearchQueryService : [SEARCH] hybrid modelId=1 topK=3 terms=1 vectorPool=12 lexicalPool=2 merged=12 after=3 +2026-10-18T15:47:08+09:00 2026-10-18T06:47:08.046Z INFO 9946 --- [docgrid] [nio-8080-exec-3] c.o.d.d.search.service.SearchFacade : [SEARCH] live check userId=2 before=3 after=3 liveMs=2 +2026-10-18T15:47:08+09:00 2026-10-18T06:47:08.049Z INFO 9946 --- [docgrid] [nio-8080-exec-3] c.o.d.d.search.service.SearchFacade : [SEARCH] done queryId=4 results=3 latencyMs=180 +2026-10-18T15:47:08+09:00 2026-10-18T06:47:08.050Z INFO 9946 --- [docgrid] [nio-8080-exec-3] c.o.d.domain.rag.service.RagFacade : [RAG] enqueued queryId=4 responseId=4 +2026-10-18T15:47:08+09:00 2026-10-18T06:47:08.221Z INFO 9946 --- [docgrid] [nio-8080-exec-5] c.o.d.d.s.s.q.HybridSearchQueryService : [SEARCH] hybrid modelId=1 topK=3 terms=4 vectorPool=12 lexicalPool=4 merged=12 after=3 +2026-10-18T15:47:08+09:00 2026-10-18T06:47:08.223Z INFO 9946 --- [docgrid] [nio-8080-exec-5] c.o.d.d.search.service.SearchFacade : [SEARCH] live check userId=2 before=3 after=3 liveMs=1 +2026-10-18T15:47:08+09:00 2026-10-18T06:47:08.227Z INFO 9946 --- [docgrid] [nio-8080-exec-5] c.o.d.d.search.service.SearchFacade : [SEARCH] done queryId=5 results=3 latencyMs=159 +2026-10-18T15:47:08+09:00 2026-10-18T06:47:08.228Z INFO 9946 --- [docgrid] [nio-8080-exec-5] c.o.d.domain.rag.service.RagFacade : [RAG] enqueued queryId=5 responseId=5 +2026-10-18T15:47:08+09:00 2026-10-18T06:47:08.388Z INFO 9946 --- [docgrid] [nio-8080-exec-7] c.o.d.d.s.s.q.HybridSearchQueryService : [SEARCH] hybrid modelId=1 topK=3 terms=2 vectorPool=12 lexicalPool=3 merged=12 after=3 +2026-10-18T15:47:08+09:00 2026-10-18T06:47:08.390Z INFO 9946 --- [docgrid] [nio-8080-exec-7] c.o.d.d.search.service.SearchFacade : [SEARCH] live check userId=2 before=3 after=3 liveMs=2 +2026-10-18T15:47:08+09:00 2026-10-18T06:47:08.393Z INFO 9946 --- [docgrid] [nio-8080-exec-7] c.o.d.d.search.service.SearchFacade : [SEARCH] done queryId=6 results=3 latencyMs=136 +2026-10-18T15:47:08+09:00 2026-10-18T06:47:08.394Z INFO 9946 --- [docgrid] [nio-8080-exec-7] c.o.d.domain.rag.service.RagFacade : [RAG] enqueued queryId=6 responseId=6 +2026-10-18T15:47:08+09:00 2026-10-18T06:47:08.663Z ERROR 9946 --- [docgrid] [ag-worker-job-1] c.o.d.domain.rag.service.OllamaClient : Ollama 서버 호출 실패: I/O error on POST request for "<설정된 서버> null +2026-10-18T15:47:08+09:00 2026-10-18T06:47:08.665Z ERROR 9946 --- [docgrid] [ag-worker-job-2] c.o.d.domain.rag.service.OllamaClient : Ollama 서버 호출 실패: I/O error on POST request for "<설정된 서버> null +2026-10-18T15:47:08+09:00 2026-10-18T06:47:08.666Z WARN 9946 --- [docgrid] [ag-worker-job-1] c.o.d.domain.rag.service.RagFacade : [RAG] fallback queryId=4 errorCode=RAG-001 +2026-10-18T15:47:08+09:00 2026-10-18T06:47:08.667Z WARN 9946 --- [docgrid] [ag-worker-job-2] c.o.d.domain.rag.service.RagFacade : [RAG] fallback queryId=5 errorCode=RAG-001 +2026-10-18T15:47:09+09:00 2026-10-18T06:47:09.666Z ERROR 9946 --- [docgrid] [ag-worker-job-2] c.o.d.domain.rag.service.OllamaClient : Ollama 서버 호출 실패: I/O error on POST request for "<설정된 서버> null +2026-10-18T15:47:09+09:00 2026-10-18T06:47:09.668Z WARN 9946 --- [docgrid] [ag-worker-job-2] c.o.d.domain.rag.service.RagFacade : [RAG] fallback queryId=6 errorCode=RAG-001 +2026-10-18T15:47:31+09:00 2026-10-18T06:47:31.284Z INFO 9946 --- [docgrid] [MessageBroker-3] o.s.w.s.c.WebSocketMessageBrokerStats : WebSocketSession[0 current WS(0)-HttpStream(0)-HttpPoll(0), 0 total, 0 closed abnormally (0 connect failure, 0 send limit, 0 transport error)], stompSubProtocol[processed CONNECT(0)-CONNECTED(0)-DISCONNECT(0)], stompBrokerRelay[null], inboundChannel[pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 0], outboundChannel[pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 0], sockJsScheduler[pool size = 4, active threads = 1, queued tasks = 12, completed tasks = 417] +2026-10-18T15:47:31+09:00 2026-10-18T06:47:31.449Z INFO 9946 --- [docgrid] [MessageBroker-1] c.o.d.d.w.l.WorkerLeaseRecoveryScheduler : Worker Lease 복구 주기를 완료했습니다. deadWorkers=0, candidates=0, recovered=0, skipped=0, failed=0 diff --git a/docs/test-results/demo-fresh-20261018/runs/39105008958-1/runtime/0b33fe3a31414ff28fc8f089dbf5c65c/events.jsonl b/docs/test-results/demo-fresh-20261018/runs/39105008958-1/runtime/0b33fe3a31414ff28fc8f089dbf5c65c/events.jsonl new file mode 100644 index 00000000..c4d4d5f6 --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39105008958-1/runtime/0b33fe3a31414ff28fc8f089dbf5c65c/events.jsonl @@ -0,0 +1,5 @@ +{"timestamp": "2026-10-18T15:43:17+09:00", "message": "[시작] 로컬 시연 세션 0b33fe3a31414ff28fc8f089dbf5c65c · 범위 search"} +{"timestamp": "2026-10-18T15:46:36+09:00", "message": "[준비 완료] Web: <설정된 서버> · verify로 예제 시연을 검사하세요."} +{"timestamp": "2026-10-18T15:47:06+09:00", "message": "[검증 통과] 업로드·인덱싱·검색·원본 검사 완료. 기록: .demo/reports/bd6f8ca5087b4906bfc2ce5fa89da55b/summary.json"} +{"timestamp": "2026-10-18T15:47:08+09:00", "message": "[검증 통과] 업로드·인덱싱·검색·원본 검사 완료. 기록: .demo/reports/f57bbd0a0643491c89e2e7366b4e8fdb/summary.json"} +{"timestamp": "2026-10-18T15:47:58+09:00", "message": "[종료 완료] 소유 서버·컨테이너 중지, 데이터·원본·모델 캐시 보존"} diff --git a/docs/test-results/demo-fresh-20261018/runs/39105008958-1/runtime/0b33fe3a31414ff28fc8f089dbf5c65c/frontend.log b/docs/test-results/demo-fresh-20261018/runs/39105008958-1/runtime/0b33fe3a31414ff28fc8f089dbf5c65c/frontend.log new file mode 100644 index 00000000..8d6335c5 --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39105008958-1/runtime/0b33fe3a31414ff28fc8f089dbf5c65c/frontend.log @@ -0,0 +1,214 @@ +2026-10-18T15:46:32+09:00 +2026-10-18T15:46:32+09:00 > <이메일 생략> dev +2026-10-18T15:46:32+09:00 > WRANGLER_LOG_PATH=.wrangler/wrangler.log vinext dev --hostname 127.0.0.1 +2026-10-18T15:46:32+09:00 +2026-10-18T15:46:32+09:00 +2026-10-18T15:46:32+09:00 vinext dev (Vite 8.0.13) +2026-10-18T15:46:32+09:00 +2026-10-18T15:46:33+09:00 Using secrets defined in .env.local +2026-10-18T15:46:34+09:00 ➜ Local: <설정된 서버> +2026-10-18T15:46:34+09:00 ➜ Debug: <설정된 서버> +2026-10-18T15:46:35+09:00 GET /api/backend/departments 200 in 251ms +2026-10-18T15:46:36+09:00 GET /login 200 in 998ms (compile: 1792305992.1s, render: 952ms) +2026-10-18T15:46:36+09:00 GET /api/backend/departments 200 in 14ms +2026-10-18T15:46:37+09:00 GET /login 200 in 26ms (compile: 1792305992.0s, render: 17ms) +2026-10-18T15:46:37+09:00 POST /api/backend/auth/login 401 in 43ms +2026-10-18T15:46:37+09:00 POST /api/backend/auth/signup 201 in 95ms +2026-10-18T15:46:38+09:00 POST /api/backend/auth/login 200 in 122ms +2026-10-18T15:46:38+09:00 POST /api/backend/api/documents 201 in 460ms +2026-10-18T15:46:38+09:00 POST /api/backend/api/documents 201 in 32ms +2026-10-18T15:46:38+09:00 POST /api/backend/api/documents 201 in 33ms +2026-10-18T15:46:38+09:00 POST /api/backend/api/documents 201 in 40ms +2026-10-18T15:46:38+09:00 POST /api/backend/api/documents 201 in 32ms +2026-10-18T15:46:38+09:00 POST /api/backend/api/documents 201 in 31ms +2026-10-18T15:46:38+09:00 POST /api/backend/api/documents 201 in 28ms +2026-10-18T15:46:38+09:00 POST /api/backend/api/documents 201 in 31ms +2026-10-18T15:46:38+09:00 POST /api/backend/api/documents 201 in 31ms +2026-10-18T15:46:38+09:00 POST /api/backend/api/documents 201 in 29ms +2026-10-18T15:46:38+09:00 POST /api/backend/api/documents 201 in 27ms +2026-10-18T15:46:38+09:00 POST /api/backend/api/documents 201 in 50ms +2026-10-18T15:46:38+09:00 POST /api/backend/api/documents 201 in 31ms +2026-10-18T15:46:38+09:00 POST /api/backend/api/documents 201 in 30ms +2026-10-18T15:46:38+09:00 POST /api/backend/api/documents 201 in 25ms +2026-10-18T15:46:38+09:00 GET /api/backend/api/documents/3/status 200 in 30ms +2026-10-18T15:46:38+09:00 GET /api/backend/api/documents/4/status 200 in 19ms +2026-10-18T15:46:39+09:00 GET /api/backend/api/documents/5/status 200 in 14ms +2026-10-18T15:46:39+09:00 GET /api/backend/api/documents/6/status 200 in 15ms +2026-10-18T15:46:39+09:00 GET /api/backend/api/documents/7/status 200 in 14ms +2026-10-18T15:46:39+09:00 GET /api/backend/api/documents/8/status 200 in 11ms +2026-10-18T15:46:39+09:00 GET /api/backend/api/documents/9/status 200 in 12ms +2026-10-18T15:46:39+09:00 GET /api/backend/api/documents/10/status 200 in 12ms +2026-10-18T15:46:39+09:00 GET /api/backend/api/documents/11/status 200 in 13ms +2026-10-18T15:46:39+09:00 GET /api/backend/api/documents/12/status 200 in 14ms +2026-10-18T15:46:39+09:00 GET /api/backend/api/documents/13/status 200 in 17ms +2026-10-18T15:46:39+09:00 GET /api/backend/api/documents/14/status 200 in 13ms +2026-10-18T15:46:39+09:00 GET /api/backend/api/documents/15/status 200 in 13ms +2026-10-18T15:46:39+09:00 GET /api/backend/api/documents/16/status 200 in 15ms +2026-10-18T15:46:39+09:00 GET /api/backend/api/documents/17/status 200 in 15ms +2026-10-18T15:46:42+09:00 GET /api/backend/api/documents/3/status 200 in 21ms +2026-10-18T15:46:42+09:00 GET /api/backend/api/documents/4/status 200 in 17ms +2026-10-18T15:46:42+09:00 GET /api/backend/api/documents/5/status 200 in 15ms +2026-10-18T15:46:42+09:00 GET /api/backend/api/documents/6/status 200 in 15ms +2026-10-18T15:46:42+09:00 GET /api/backend/api/documents/7/status 200 in 14ms +2026-10-18T15:46:42+09:00 GET /api/backend/api/documents/8/status 200 in 12ms +2026-10-18T15:46:42+09:00 GET /api/backend/api/documents/9/status 200 in 13ms +2026-10-18T15:46:42+09:00 GET /api/backend/api/documents/10/status 200 in 12ms +2026-10-18T15:46:42+09:00 GET /api/backend/api/documents/11/status 200 in 13ms +2026-10-18T15:46:42+09:00 GET /api/backend/api/documents/12/status 200 in 12ms +2026-10-18T15:46:42+09:00 GET /api/backend/api/documents/13/status 200 in 12ms +2026-10-18T15:46:42+09:00 GET /api/backend/api/documents/14/status 200 in 11ms +2026-10-18T15:46:42+09:00 GET /api/backend/api/documents/15/status 200 in 12ms +2026-10-18T15:46:42+09:00 GET /api/backend/api/documents/16/status 200 in 12ms +2026-10-18T15:46:42+09:00 GET /api/backend/api/documents/17/status 200 in 14ms +2026-10-18T15:46:45+09:00 GET /api/backend/api/documents/3/status 200 in 16ms +2026-10-18T15:46:45+09:00 GET /api/backend/api/documents/4/status 200 in 13ms +2026-10-18T15:46:45+09:00 GET /api/backend/api/documents/5/status 200 in 16ms +2026-10-18T15:46:45+09:00 GET /api/backend/api/documents/6/status 200 in 17ms +2026-10-18T15:46:45+09:00 GET /api/backend/api/documents/7/status 200 in 18ms +2026-10-18T15:46:45+09:00 GET /api/backend/api/documents/8/status 200 in 16ms +2026-10-18T15:46:45+09:00 GET /api/backend/api/documents/9/status 200 in 19ms +2026-10-18T15:46:45+09:00 GET /api/backend/api/documents/10/status 200 in 16ms +2026-10-18T15:46:45+09:00 GET /api/backend/api/documents/11/status 200 in 12ms +2026-10-18T15:46:45+09:00 GET /api/backend/api/documents/12/status 200 in 12ms +2026-10-18T15:46:45+09:00 GET /api/backend/api/documents/13/status 200 in 11ms +2026-10-18T15:46:45+09:00 GET /api/backend/api/documents/14/status 200 in 11ms +2026-10-18T15:46:45+09:00 GET /api/backend/api/documents/15/status 200 in 12ms +2026-10-18T15:46:45+09:00 GET /api/backend/api/documents/16/status 200 in 11ms +2026-10-18T15:46:45+09:00 GET /api/backend/api/documents/17/status 200 in 11ms +2026-10-18T15:46:48+09:00 GET /api/backend/api/documents/3/status 200 in 36ms +2026-10-18T15:46:48+09:00 GET /api/backend/api/documents/4/status 200 in 27ms +2026-10-18T15:46:48+09:00 GET /api/backend/api/documents/5/status 200 in 23ms +2026-10-18T15:46:48+09:00 GET /api/backend/api/documents/6/status 200 in 21ms +2026-10-18T15:46:48+09:00 GET /api/backend/api/documents/7/status 200 in 25ms +2026-10-18T15:46:48+09:00 GET /api/backend/api/documents/8/status 200 in 18ms +2026-10-18T15:46:48+09:00 GET /api/backend/api/documents/9/status 200 in 29ms +2026-10-18T15:46:48+09:00 GET /api/backend/api/documents/10/status 200 in 33ms +2026-10-18T15:46:48+09:00 GET /api/backend/api/documents/11/status 200 in 24ms +2026-10-18T15:46:48+09:00 GET /api/backend/api/documents/12/status 200 in 22ms +2026-10-18T15:46:48+09:00 GET /api/backend/api/documents/13/status 200 in 41ms +2026-10-18T15:46:49+09:00 GET /api/backend/api/documents/14/status 200 in 52ms +2026-10-18T15:46:49+09:00 GET /api/backend/api/documents/15/status 200 in 23ms +2026-10-18T15:46:49+09:00 GET /api/backend/api/documents/16/status 200 in 22ms +2026-10-18T15:46:49+09:00 GET /api/backend/api/documents/17/status 200 in 27ms +2026-10-18T15:46:52+09:00 GET /api/backend/api/documents/3/status 200 in 26ms +2026-10-18T15:46:52+09:00 GET /api/backend/api/documents/4/status 200 in 27ms +2026-10-18T15:46:52+09:00 GET /api/backend/api/documents/5/status 200 in 20ms +2026-10-18T15:46:52+09:00 GET /api/backend/api/documents/6/status 200 in 17ms +2026-10-18T15:46:52+09:00 GET /api/backend/api/documents/7/status 200 in 18ms +2026-10-18T15:46:52+09:00 GET /api/backend/api/documents/8/status 200 in 21ms +2026-10-18T15:46:52+09:00 GET /api/backend/api/documents/9/status 200 in 28ms +2026-10-18T15:46:52+09:00 GET /api/backend/api/documents/10/status 200 in 33ms +2026-10-18T15:46:52+09:00 GET /api/backend/api/documents/11/status 200 in 26ms +2026-10-18T15:46:52+09:00 GET /api/backend/api/documents/12/status 200 in 20ms +2026-10-18T15:46:52+09:00 GET /api/backend/api/documents/13/status 200 in 23ms +2026-10-18T15:46:52+09:00 GET /api/backend/api/documents/14/status 200 in 27ms +2026-10-18T15:46:52+09:00 GET /api/backend/api/documents/15/status 200 in 23ms +2026-10-18T15:46:52+09:00 GET /api/backend/api/documents/16/status 200 in 28ms +2026-10-18T15:46:52+09:00 GET /api/backend/api/documents/17/status 200 in 25ms +2026-10-18T15:46:55+09:00 GET /api/backend/api/documents/6/status 200 in 19ms +2026-10-18T15:46:55+09:00 GET /api/backend/api/documents/7/status 200 in 21ms +2026-10-18T15:46:55+09:00 GET /api/backend/api/documents/8/status 200 in 19ms +2026-10-18T15:46:55+09:00 GET /api/backend/api/documents/9/status 200 in 22ms +2026-10-18T15:46:55+09:00 GET /api/backend/api/documents/10/status 200 in 43ms +2026-10-18T15:46:55+09:00 GET /api/backend/api/documents/11/status 200 in 37ms +2026-10-18T15:46:55+09:00 GET /api/backend/api/documents/12/status 200 in 23ms +2026-10-18T15:46:55+09:00 GET /api/backend/api/documents/13/status 200 in 16ms +2026-10-18T15:46:55+09:00 GET /api/backend/api/documents/14/status 200 in 16ms +2026-10-18T15:46:55+09:00 GET /api/backend/api/documents/15/status 200 in 18ms +2026-10-18T15:46:55+09:00 GET /api/backend/api/documents/16/status 200 in 16ms +2026-10-18T15:46:55+09:00 GET /api/backend/api/documents/17/status 200 in 16ms +2026-10-18T15:46:58+09:00 GET /api/backend/api/documents/8/status 200 in 29ms +2026-10-18T15:46:58+09:00 GET /api/backend/api/documents/9/status 200 in 21ms +2026-10-18T15:46:58+09:00 GET /api/backend/api/documents/10/status 200 in 21ms +2026-10-18T15:46:58+09:00 GET /api/backend/api/documents/11/status 200 in 16ms +2026-10-18T15:46:58+09:00 GET /api/backend/api/documents/12/status 200 in 24ms +2026-10-18T15:46:59+09:00 GET /api/backend/api/documents/13/status 200 in 32ms +2026-10-18T15:46:59+09:00 GET /api/backend/api/documents/14/status 200 in 34ms +2026-10-18T15:46:59+09:00 GET /api/backend/api/documents/15/status 200 in 21ms +2026-10-18T15:46:59+09:00 GET /api/backend/api/documents/16/status 200 in 21ms +2026-10-18T15:46:59+09:00 GET /api/backend/api/documents/17/status 200 in 18ms +2026-10-18T15:47:02+09:00 GET /api/backend/api/documents/10/status 200 in 18ms +2026-10-18T15:47:02+09:00 GET /api/backend/api/documents/11/status 200 in 19ms +2026-10-18T15:47:02+09:00 GET /api/backend/api/documents/12/status 200 in 20ms +2026-10-18T15:47:02+09:00 GET /api/backend/api/documents/13/status 200 in 16ms +2026-10-18T15:47:02+09:00 GET /api/backend/api/documents/14/status 200 in 22ms +2026-10-18T15:47:02+09:00 GET /api/backend/api/documents/15/status 200 in 35ms +2026-10-18T15:47:02+09:00 GET /api/backend/api/documents/16/status 200 in 58ms +2026-10-18T15:47:02+09:00 GET /api/backend/api/documents/17/status 200 in 32ms +2026-10-18T15:47:05+09:00 GET /api/backend/api/documents/14/status 200 in 15ms +2026-10-18T15:47:05+09:00 GET /api/backend/api/documents/15/status 200 in 12ms +2026-10-18T15:47:05+09:00 GET /api/backend/api/documents/16/status 200 in 9ms +2026-10-18T15:47:05+09:00 GET /api/backend/api/documents/17/status 200 in 8ms +2026-10-18T15:47:05+09:00 POST /api/backend/search 200 in 241ms +2026-10-18T15:47:05+09:00 POST /api/backend/search 200 in 177ms +2026-10-18T15:47:05+09:00 GET /api/backend/api/documents/8/content 200 in 20ms +2026-10-18T15:47:06+09:00 POST /api/backend/search 200 in 157ms +2026-10-18T15:47:06+09:00 GET /api/backend/api/documents/3/file 200 in 15ms +2026-10-18T15:47:06+09:00 GET /api/backend/api/documents/4/file 200 in 10ms +2026-10-18T15:47:06+09:00 GET /api/backend/api/documents/5/file 200 in 10ms +2026-10-18T15:47:06+09:00 GET /api/backend/api/documents/6/file 200 in 11ms +2026-10-18T15:47:06+09:00 GET /api/backend/api/documents/7/file 200 in 10ms +2026-10-18T15:47:06+09:00 GET /api/backend/api/documents/8/file 200 in 11ms +2026-10-18T15:47:06+09:00 GET /api/backend/api/documents/9/file 200 in 12ms +2026-10-18T15:47:06+09:00 GET /api/backend/api/documents/10/file 200 in 12ms +2026-10-18T15:47:06+09:00 GET /api/backend/api/documents/11/file 200 in 11ms +2026-10-18T15:47:06+09:00 GET /api/backend/api/documents/12/file 200 in 9ms +2026-10-18T15:47:06+09:00 GET /api/backend/api/documents/13/file 200 in 11ms +2026-10-18T15:47:06+09:00 GET /api/backend/api/documents/14/file 200 in 11ms +2026-10-18T15:47:06+09:00 GET /api/backend/api/documents/15/file 200 in 10ms +2026-10-18T15:47:06+09:00 GET /api/backend/api/documents/16/file 200 in 11ms +2026-10-18T15:47:06+09:00 GET /api/backend/api/documents/17/file 200 in 10ms +2026-10-18T15:47:06+09:00 GET /api/backend/departments 200 in 12ms +2026-10-18T15:47:06+09:00 GET /login 200 in 21ms (compile: 1792305992.0s, render: 15ms) +2026-10-18T15:47:07+09:00 POST /api/backend/auth/login 200 in 72ms +2026-10-18T15:47:07+09:00 POST /api/backend/api/documents 201 in 15ms +2026-10-18T15:47:07+09:00 POST /api/backend/api/documents 201 in 15ms +2026-10-18T15:47:07+09:00 POST /api/backend/api/documents 201 in 17ms +2026-10-18T15:47:07+09:00 POST /api/backend/api/documents 201 in 14ms +2026-10-18T15:47:07+09:00 POST /api/backend/api/documents 201 in 13ms +2026-10-18T15:47:07+09:00 POST /api/backend/api/documents 201 in 11ms +2026-10-18T15:47:07+09:00 POST /api/backend/api/documents 201 in 11ms +2026-10-18T15:47:07+09:00 POST /api/backend/api/documents 201 in 10ms +2026-10-18T15:47:07+09:00 POST /api/backend/api/documents 201 in 13ms +2026-10-18T15:47:07+09:00 POST /api/backend/api/documents 201 in 11ms +2026-10-18T15:47:07+09:00 POST /api/backend/api/documents 201 in 11ms +2026-10-18T15:47:07+09:00 POST /api/backend/api/documents 201 in 12ms +2026-10-18T15:47:07+09:00 POST /api/backend/api/documents 201 in 12ms +2026-10-18T15:47:07+09:00 POST /api/backend/api/documents 201 in 13ms +2026-10-18T15:47:07+09:00 POST /api/backend/api/documents 201 in 14ms +2026-10-18T15:47:07+09:00 GET /api/backend/api/documents/3/status 200 in 17ms +2026-10-18T15:47:07+09:00 GET /api/backend/api/documents/4/status 200 in 11ms +2026-10-18T15:47:07+09:00 GET /api/backend/api/documents/5/status 200 in 13ms +2026-10-18T15:47:07+09:00 GET /api/backend/api/documents/6/status 200 in 9ms +2026-10-18T15:47:07+09:00 GET /api/backend/api/documents/7/status 200 in 14ms +2026-10-18T15:47:07+09:00 GET /api/backend/api/documents/8/status 200 in 9ms +2026-10-18T15:47:07+09:00 GET /api/backend/api/documents/9/status 200 in 8ms +2026-10-18T15:47:07+09:00 GET /api/backend/api/documents/10/status 200 in 8ms +2026-10-18T15:47:07+09:00 GET /api/backend/api/documents/11/status 200 in 8ms +2026-10-18T15:47:07+09:00 GET /api/backend/api/documents/12/status 200 in 9ms +2026-10-18T15:47:07+09:00 GET /api/backend/api/documents/13/status 200 in 11ms +2026-10-18T15:47:07+09:00 GET /api/backend/api/documents/14/status 200 in 10ms +2026-10-18T15:47:07+09:00 GET /api/backend/api/documents/15/status 200 in 10ms +2026-10-18T15:47:07+09:00 GET /api/backend/api/documents/16/status 200 in 14ms +2026-10-18T15:47:07+09:00 GET /api/backend/api/documents/17/status 200 in 10ms +2026-10-18T15:47:08+09:00 POST /api/backend/search 200 in 195ms +2026-10-18T15:47:08+09:00 POST /api/backend/search 200 in 178ms +2026-10-18T15:47:08+09:00 GET /api/backend/api/documents/8/content 200 in 12ms +2026-10-18T15:47:08+09:00 POST /api/backend/search 200 in 152ms +2026-10-18T15:47:08+09:00 GET /api/backend/api/documents/3/file 200 in 12ms +2026-10-18T15:47:08+09:00 GET /api/backend/api/documents/4/file 200 in 14ms +2026-10-18T15:47:08+09:00 GET /api/backend/api/documents/5/file 200 in 10ms +2026-10-18T15:47:08+09:00 GET /api/backend/api/documents/6/file 200 in 10ms +2026-10-18T15:47:08+09:00 GET /api/backend/api/documents/7/file 200 in 51ms +2026-10-18T15:47:08+09:00 GET /api/backend/api/documents/8/file 200 in 15ms +2026-10-18T15:47:08+09:00 GET /api/backend/api/documents/9/file 200 in 10ms +2026-10-18T15:47:08+09:00 GET /api/backend/api/documents/10/file 200 in 9ms +2026-10-18T15:47:08+09:00 GET /api/backend/api/documents/11/file 200 in 16ms +2026-10-18T15:47:08+09:00 GET /api/backend/api/documents/12/file 200 in 9ms +2026-10-18T15:47:08+09:00 GET /api/backend/api/documents/13/file 200 in 9ms +2026-10-18T15:47:08+09:00 GET /api/backend/api/documents/14/file 200 in 8ms +2026-10-18T15:47:08+09:00 GET /api/backend/api/documents/15/file 200 in 9ms +2026-10-18T15:47:08+09:00 GET /api/backend/api/documents/16/file 200 in 11ms +2026-10-18T15:47:08+09:00 GET /api/backend/api/documents/17/file 200 in 11ms +2026-10-18T15:47:10+09:00 GET /login?returnTo=%2Fsearch 200 in 40ms (compile: 1792305992.0s, render: 27ms) +2026-10-18T15:47:56+09:00 ➜ Tunnel closed diff --git a/docs/test-results/demo-fresh-20261018/runs/39105008958-1/runtime/0b33fe3a31414ff28fc8f089dbf5c65c/install.log b/docs/test-results/demo-fresh-20261018/runs/39105008958-1/runtime/0b33fe3a31414ff28fc8f089dbf5c65c/install.log new file mode 100644 index 00000000..653dd81e --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39105008958-1/runtime/0b33fe3a31414ff28fc8f089dbf5c65c/install.log @@ -0,0 +1,17 @@ +2026-10-18T15:43:19+09:00 npm warn deprecated @esbuild-kit/<이메일 생략>: Merged into tsx: <설정된 서버> +2026-10-18T15:43:19+09:00 npm warn deprecated @esbuild-kit/<이메일 생략>: Merged into tsx: <설정된 서버> +2026-10-18T15:43:29+09:00 +2026-10-18T15:43:29+09:00 added 502 packages, and audited 503 packages in 12s +2026-10-18T15:43:29+09:00 +2026-10-18T15:43:29+09:00 156 packages are looking for funding +2026-10-18T15:43:29+09:00 run `npm fund` for details +2026-10-18T15:43:29+09:00 +2026-10-18T15:43:29+09:00 30 vulnerabilities (1 low, 6 moderate, 23 high) +2026-10-18T15:43:29+09:00 +2026-10-18T15:43:29+09:00 To address issues that do not require attention, run: +2026-10-18T15:43:29+09:00 npm audit fix +2026-10-18T15:43:29+09:00 +2026-10-18T15:43:29+09:00 To address all issues (including breaking changes), run: +2026-10-18T15:43:29+09:00 npm audit fix --force +2026-10-18T15:43:29+09:00 +2026-10-18T15:43:29+09:00 Run `npm audit` for details. diff --git a/docs/test-results/demo-fresh-20261018/runs/39105008958-1/runtime/0b33fe3a31414ff28fc8f089dbf5c65c/services.log b/docs/test-results/demo-fresh-20261018/runs/39105008958-1/runtime/0b33fe3a31414ff28fc8f089dbf5c65c/services.log new file mode 100644 index 00000000..0a32ae02 --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39105008958-1/runtime/0b33fe3a31414ff28fc8f089dbf5c65c/services.log @@ -0,0 +1,595 @@ +2026-10-18T15:43:30+09:00 [local-services] 로컬 PostgreSQL·Valkey·Embedding Provider를 시작합니다. +2026-10-18T15:43:30+09:00 postgres Pulling +2026-10-18T15:43:30+09:00 valkey Pulling +2026-10-18T15:43:31+09:00 4831516dd0cb Pulling fs layer +2026-10-18T15:43:31+09:00 9f4a0348ad2e Pulling fs layer +2026-10-18T15:43:31+09:00 6b6aac9d7476 Pulling fs layer +2026-10-18T15:43:31+09:00 d8a310896f84 Pulling fs layer +2026-10-18T15:43:31+09:00 99bb4ce30ad3 Pulling fs layer +2026-10-18T15:43:31+09:00 31b6f2223c4b Pulling fs layer +2026-10-18T15:43:31+09:00 9da35c01411f Pulling fs layer +2026-10-18T15:43:31+09:00 a6809e067bc1 Pulling fs layer +2026-10-18T15:43:31+09:00 10643155f463 Pulling fs layer +2026-10-18T15:43:31+09:00 a7ef49b2a615 Pulling fs layer +2026-10-18T15:43:31+09:00 29d37472e7c3 Pulling fs layer +2026-10-18T15:43:31+09:00 4d2363af1825 Pulling fs layer +2026-10-18T15:43:31+09:00 4a14fbbe260a Pulling fs layer +2026-10-18T15:43:31+09:00 8cced4a98c7e Pulling fs layer +2026-10-18T15:43:31+09:00 4909bfb5f5ed Pulling fs layer +2026-10-18T15:43:31+09:00 3e1ddef0ec36 Pulling fs layer +2026-10-18T15:43:31+09:00 9da35c01411f Waiting +2026-10-18T15:43:31+09:00 a6809e067bc1 Waiting +2026-10-18T15:43:31+09:00 4d2363af1825 Waiting +2026-10-18T15:43:31+09:00 10643155f463 Waiting +2026-10-18T15:43:31+09:00 4a14fbbe260a Waiting +2026-10-18T15:43:31+09:00 a7ef49b2a615 Waiting +2026-10-18T15:43:31+09:00 8cced4a98c7e Waiting +2026-10-18T15:43:31+09:00 29d37472e7c3 Waiting +2026-10-18T15:43:31+09:00 4909bfb5f5ed Waiting +2026-10-18T15:43:31+09:00 3e1ddef0ec36 Waiting +2026-10-18T15:43:31+09:00 d8a310896f84 Waiting +2026-10-18T15:43:31+09:00 31b6f2223c4b Waiting +2026-10-18T15:43:31+09:00 9f4a0348ad2e Downloading [==================================================>] 1.169kB/1.169kB +2026-10-18T15:43:31+09:00 9f4a0348ad2e Verifying Checksum +2026-10-18T15:43:31+09:00 9f4a0348ad2e Download complete +2026-10-18T15:43:31+09:00 6b6aac9d7476 Downloading [> ] 49.15kB/4.534MB +2026-10-18T15:43:31+09:00 4831516dd0cb Downloading [> ] 294.3kB/28.23MB +2026-10-18T15:43:32+09:00 6b6aac9d7476 Downloading [=================================> ] 3.018MB/4.534MB +2026-10-18T15:43:32+09:00 6b6aac9d7476 Verifying Checksum +2026-10-18T15:43:32+09:00 6b6aac9d7476 Download complete +2026-10-18T15:43:32+09:00 d8a310896f84 Downloading [> ] 16.38kB/1.25MB +2026-10-18T15:43:32+09:00 4831516dd0cb Downloading [===> ] 1.769MB/28.23MB +2026-10-18T15:43:32+09:00 e2de96513ba9 Already exists +2026-10-18T15:43:32+09:00 d8a310896f84 Verifying Checksum +2026-10-18T15:43:32+09:00 d8a310896f84 Download complete +2026-10-18T15:43:32+09:00 4831516dd0cb Verifying Checksum +2026-10-18T15:43:32+09:00 4831516dd0cb Download complete +2026-10-18T15:43:32+09:00 4831516dd0cb Extracting [> ] 294.9kB/28.23MB +2026-10-18T15:43:32+09:00 99bb4ce30ad3 Downloading [> ] 96.73kB/8.066MB +2026-10-18T15:43:32+09:00 31b6f2223c4b Downloading [> ] 16.38kB/1.196MB +2026-10-18T15:43:32+09:00 d78be5cc1e53 Pulling fs layer +2026-10-18T15:43:32+09:00 fe2c7735354a Pulling fs layer +2026-10-18T15:43:32+09:00 95121e5a56c0 Pulling fs layer +2026-10-18T15:43:32+09:00 d9f591c70342 Pulling fs layer +2026-10-18T15:43:32+09:00 4f4fb700ef54 Pulling fs layer +2026-10-18T15:43:32+09:00 4ed485d78f72 Pulling fs layer +2026-10-18T15:43:32+09:00 d9f591c70342 Waiting +2026-10-18T15:43:32+09:00 4f4fb700ef54 Waiting +2026-10-18T15:43:32+09:00 4ed485d78f72 Waiting +2026-10-18T15:43:32+09:00 d78be5cc1e53 Waiting +2026-10-18T15:43:32+09:00 fe2c7735354a Waiting +2026-10-18T15:43:32+09:00 95121e5a56c0 Waiting +2026-10-18T15:43:32+09:00 4831516dd0cb Extracting [======> ] 3.834MB/28.23MB +2026-10-18T15:43:32+09:00 9da35c01411f Downloading [==================================================>] 116B/116B +2026-10-18T15:43:32+09:00 9da35c01411f Verifying Checksum +2026-10-18T15:43:32+09:00 9da35c01411f Download complete +2026-10-18T15:43:32+09:00 99bb4ce30ad3 Downloading [=====> ] 961.9kB/8.066MB +2026-10-18T15:43:32+09:00 31b6f2223c4b Verifying Checksum +2026-10-18T15:43:32+09:00 31b6f2223c4b Download complete +2026-10-18T15:43:32+09:00 99bb4ce30ad3 Verifying Checksum +2026-10-18T15:43:32+09:00 99bb4ce30ad3 Download complete +2026-10-18T15:43:32+09:00 4831516dd0cb Extracting [==================> ] 10.32MB/28.23MB +2026-10-18T15:43:32+09:00 a6809e067bc1 Downloading [==================================================>] 3.141kB/3.141kB +2026-10-18T15:43:32+09:00 a6809e067bc1 Verifying Checksum +2026-10-18T15:43:32+09:00 a6809e067bc1 Download complete +2026-10-18T15:43:32+09:00 4831516dd0cb Extracting [====================================> ] 20.35MB/28.23MB +2026-10-18T15:43:32+09:00 a7ef49b2a615 Downloading [==================================================>] 10.3kB/10.3kB +2026-10-18T15:43:32+09:00 a7ef49b2a615 Verifying Checksum +2026-10-18T15:43:32+09:00 a7ef49b2a615 Download complete +2026-10-18T15:43:32+09:00 10643155f463 Downloading [> ] 537.8kB/112.8MB +2026-10-18T15:43:32+09:00 29d37472e7c3 Downloading [==================================================>] 128B/128B +2026-10-18T15:43:32+09:00 29d37472e7c3 Verifying Checksum +2026-10-18T15:43:32+09:00 29d37472e7c3 Download complete +2026-10-18T15:43:32+09:00 4831516dd0cb Extracting [==========================================> ] 23.89MB/28.23MB +2026-10-18T15:43:32+09:00 10643155f463 Downloading [=====> ] 12.27MB/112.8MB +2026-10-18T15:43:32+09:00 4d2363af1825 Downloading [==================================================>] 168B/168B +2026-10-18T15:43:32+09:00 4d2363af1825 Verifying Checksum +2026-10-18T15:43:32+09:00 4d2363af1825 Download complete +2026-10-18T15:43:32+09:00 4a14fbbe260a Downloading [==================================================>] 5.84kB/5.84kB +2026-10-18T15:43:32+09:00 4a14fbbe260a Verifying Checksum +2026-10-18T15:43:32+09:00 4a14fbbe260a Download complete +2026-10-18T15:43:32+09:00 4831516dd0cb Extracting [================================================> ] 27.13MB/28.23MB +2026-10-18T15:43:32+09:00 10643155f463 Downloading [===========================> ] 62.12MB/112.8MB +2026-10-18T15:43:32+09:00 8cced4a98c7e Downloading [==================================================>] 186B/186B +2026-10-18T15:43:32+09:00 8cced4a98c7e Verifying Checksum +2026-10-18T15:43:32+09:00 8cced4a98c7e Download complete +2026-10-18T15:43:32+09:00 4909bfb5f5ed Downloading [======> ] 16.38kB/123.1kB +2026-10-18T15:43:32+09:00 4909bfb5f5ed Downloading [==================================================>] 123.1kB/123.1kB +2026-10-18T15:43:32+09:00 4909bfb5f5ed Download complete +2026-10-18T15:43:32+09:00 10643155f463 Verifying Checksum +2026-10-18T15:43:32+09:00 10643155f463 Download complete +2026-10-18T15:43:32+09:00 4831516dd0cb Extracting [================================================> ] 27.43MB/28.23MB +2026-10-18T15:43:32+09:00 4831516dd0cb Extracting [==================================================>] 28.23MB/28.23MB +2026-10-18T15:43:32+09:00 3e1ddef0ec36 Downloading [> ] 16.38kB/1.451MB +2026-10-18T15:43:32+09:00 d78be5cc1e53 Downloading [==================================================>] 951B/951B +2026-10-18T15:43:32+09:00 d78be5cc1e53 Verifying Checksum +2026-10-18T15:43:32+09:00 d78be5cc1e53 Download complete +2026-10-18T15:43:32+09:00 d78be5cc1e53 Extracting [==================================================>] 951B/951B +2026-10-18T15:43:32+09:00 d78be5cc1e53 Extracting [==================================================>] 951B/951B +2026-10-18T15:43:33+09:00 fe2c7735354a Downloading [=> ] 16.38kB/666.5kB +2026-10-18T15:43:33+09:00 3e1ddef0ec36 Verifying Checksum +2026-10-18T15:43:33+09:00 3e1ddef0ec36 Download complete +2026-10-18T15:43:33+09:00 fe2c7735354a Download complete +2026-10-18T15:43:33+09:00 4831516dd0cb Pull complete +2026-10-18T15:43:33+09:00 9f4a0348ad2e Extracting [==================================================>] 1.169kB/1.169kB +2026-10-18T15:43:33+09:00 9f4a0348ad2e Extracting [==================================================>] 1.169kB/1.169kB +2026-10-18T15:43:33+09:00 d9f591c70342 Downloading [==================================================>] 140B/140B +2026-10-18T15:43:33+09:00 d9f591c70342 Verifying Checksum +2026-10-18T15:43:33+09:00 d9f591c70342 Download complete +2026-10-18T15:43:33+09:00 95121e5a56c0 Downloading [> ] 149kB/14.29MB +2026-10-18T15:43:33+09:00 4f4fb700ef54 Downloading [==================================================>] 32B/32B +2026-10-18T15:43:33+09:00 4f4fb700ef54 Download complete +2026-10-18T15:43:33+09:00 4ed485d78f72 Downloading [==================================================>] 668B/668B +2026-10-18T15:43:33+09:00 4ed485d78f72 Verifying Checksum +2026-10-18T15:43:33+09:00 4ed485d78f72 Download complete +2026-10-18T15:43:33+09:00 95121e5a56c0 Downloading [======> ] 1.795MB/14.29MB +2026-10-18T15:43:33+09:00 95121e5a56c0 Downloading [==================> ] 5.381MB/14.29MB +2026-10-18T15:43:33+09:00 95121e5a56c0 Downloading [=======================================> ] 11.31MB/14.29MB +2026-10-18T15:43:33+09:00 95121e5a56c0 Verifying Checksum +2026-10-18T15:43:33+09:00 95121e5a56c0 Download complete +2026-10-18T15:43:38+09:00 9f4a0348ad2e Pull complete +2026-10-18T15:43:38+09:00 d78be5cc1e53 Pull complete +2026-10-18T15:43:38+09:00 6b6aac9d7476 Extracting [> ] 65.54kB/4.534MB +2026-10-18T15:43:38+09:00 fe2c7735354a Extracting [==> ] 32.77kB/666.5kB +2026-10-18T15:43:38+09:00 fe2c7735354a Extracting [==================================================>] 666.5kB/666.5kB +2026-10-18T15:43:38+09:00 fe2c7735354a Extracting [==================================================>] 666.5kB/666.5kB +2026-10-18T15:43:38+09:00 6b6aac9d7476 Extracting [==================================================>] 4.534MB/4.534MB +2026-10-18T15:43:38+09:00 fe2c7735354a Pull complete +2026-10-18T15:43:38+09:00 6b6aac9d7476 Pull complete +2026-10-18T15:43:38+09:00 d8a310896f84 Extracting [=> ] 32.77kB/1.25MB +2026-10-18T15:43:38+09:00 95121e5a56c0 Extracting [> ] 163.8kB/14.29MB +2026-10-18T15:43:38+09:00 d8a310896f84 Extracting [==================================================>] 1.25MB/1.25MB +2026-10-18T15:43:38+09:00 d8a310896f84 Pull complete +2026-10-18T15:43:38+09:00 99bb4ce30ad3 Extracting [> ] 98.3kB/8.066MB +2026-10-18T15:43:38+09:00 95121e5a56c0 Extracting [========================> ] 7.045MB/14.29MB +2026-10-18T15:43:38+09:00 99bb4ce30ad3 Extracting [==========================> ] 4.227MB/8.066MB +2026-10-18T15:43:38+09:00 95121e5a56c0 Extracting [==================================================>] 14.29MB/14.29MB +2026-10-18T15:43:38+09:00 99bb4ce30ad3 Extracting [================================================> ] 7.766MB/8.066MB +2026-10-18T15:43:38+09:00 99bb4ce30ad3 Extracting [==================================================>] 8.066MB/8.066MB +2026-10-18T15:43:38+09:00 95121e5a56c0 Pull complete +2026-10-18T15:43:38+09:00 99bb4ce30ad3 Pull complete +2026-10-18T15:43:38+09:00 d9f591c70342 Extracting [==================================================>] 140B/140B +2026-10-18T15:43:38+09:00 d9f591c70342 Extracting [==================================================>] 140B/140B +2026-10-18T15:43:38+09:00 31b6f2223c4b Extracting [=> ] 32.77kB/1.196MB +2026-10-18T15:43:38+09:00 d9f591c70342 Pull complete +2026-10-18T15:43:38+09:00 4f4fb700ef54 Extracting [==================================================>] 32B/32B +2026-10-18T15:43:38+09:00 4f4fb700ef54 Extracting [==================================================>] 32B/32B +2026-10-18T15:43:38+09:00 4f4fb700ef54 Pull complete +2026-10-18T15:43:38+09:00 4ed485d78f72 Extracting [==================================================>] 668B/668B +2026-10-18T15:43:38+09:00 4ed485d78f72 Extracting [==================================================>] 668B/668B +2026-10-18T15:43:38+09:00 4ed485d78f72 Pull complete +2026-10-18T15:43:38+09:00 31b6f2223c4b Extracting [==================================================>] 1.196MB/1.196MB +2026-10-18T15:43:38+09:00 valkey Pulled +2026-10-18T15:43:38+09:00 31b6f2223c4b Extracting [==================================================>] 1.196MB/1.196MB +2026-10-18T15:43:38+09:00 31b6f2223c4b Pull complete +2026-10-18T15:43:38+09:00 9da35c01411f Extracting [==================================================>] 116B/116B +2026-10-18T15:43:38+09:00 9da35c01411f Extracting [==================================================>] 116B/116B +2026-10-18T15:43:38+09:00 9da35c01411f Pull complete +2026-10-18T15:43:38+09:00 a6809e067bc1 Extracting [==================================================>] 3.141kB/3.141kB +2026-10-18T15:43:38+09:00 a6809e067bc1 Extracting [==================================================>] 3.141kB/3.141kB +2026-10-18T15:43:38+09:00 a6809e067bc1 Pull complete +2026-10-18T15:43:38+09:00 10643155f463 Extracting [> ] 557.1kB/112.8MB +2026-10-18T15:43:38+09:00 10643155f463 Extracting [===> ] 8.913MB/112.8MB +2026-10-18T15:43:39+09:00 10643155f463 Extracting [======> ] 15.6MB/112.8MB +2026-10-18T15:43:39+09:00 10643155f463 Extracting [==========> ] 24.51MB/112.8MB +2026-10-18T15:43:39+09:00 10643155f463 Extracting [================> ] 36.77MB/112.8MB +2026-10-18T15:43:39+09:00 10643155f463 Extracting [=====================> ] 49.58MB/112.8MB +2026-10-18T15:43:39+09:00 10643155f463 Extracting [==========================> ] 59.05MB/112.8MB +2026-10-18T15:43:39+09:00 10643155f463 Extracting [===============================> ] 71.86MB/112.8MB +2026-10-18T15:43:39+09:00 10643155f463 Extracting [=====================================> ] 84.67MB/112.8MB +2026-10-18T15:43:39+09:00 10643155f463 Extracting [==========================================> ] 95.81MB/112.8MB +2026-10-18T15:43:39+09:00 10643155f463 Extracting [============================================> ] 100.8MB/112.8MB +2026-10-18T15:43:39+09:00 10643155f463 Extracting [==============================================> ] 105.8MB/112.8MB +2026-10-18T15:43:40+09:00 10643155f463 Extracting [================================================> ] 109.2MB/112.8MB +2026-10-18T15:43:40+09:00 10643155f463 Extracting [=================================================> ] 111.4MB/112.8MB +2026-10-18T15:43:40+09:00 10643155f463 Extracting [==================================================>] 112.8MB/112.8MB +2026-10-18T15:43:42+09:00 10643155f463 Pull complete +2026-10-18T15:43:42+09:00 a7ef49b2a615 Extracting [==================================================>] 10.3kB/10.3kB +2026-10-18T15:43:42+09:00 a7ef49b2a615 Extracting [==================================================>] 10.3kB/10.3kB +2026-10-18T15:43:42+09:00 a7ef49b2a615 Pull complete +2026-10-18T15:43:42+09:00 29d37472e7c3 Extracting [==================================================>] 128B/128B +2026-10-18T15:43:42+09:00 29d37472e7c3 Extracting [==================================================>] 128B/128B +2026-10-18T15:43:42+09:00 29d37472e7c3 Pull complete +2026-10-18T15:43:42+09:00 4d2363af1825 Extracting [==================================================>] 168B/168B +2026-10-18T15:43:42+09:00 4d2363af1825 Extracting [==================================================>] 168B/168B +2026-10-18T15:43:42+09:00 4d2363af1825 Pull complete +2026-10-18T15:43:42+09:00 4a14fbbe260a Extracting [==================================================>] 5.84kB/5.84kB +2026-10-18T15:43:42+09:00 4a14fbbe260a Extracting [==================================================>] 5.84kB/5.84kB +2026-10-18T15:43:42+09:00 4a14fbbe260a Pull complete +2026-10-18T15:43:42+09:00 8cced4a98c7e Extracting [==================================================>] 186B/186B +2026-10-18T15:43:42+09:00 8cced4a98c7e Extracting [==================================================>] 186B/186B +2026-10-18T15:43:42+09:00 8cced4a98c7e Pull complete +2026-10-18T15:43:42+09:00 4909bfb5f5ed Extracting [=============> ] 32.77kB/123.1kB +2026-10-18T15:43:42+09:00 4909bfb5f5ed Extracting [==================================================>] 123.1kB/123.1kB +2026-10-18T15:43:42+09:00 4909bfb5f5ed Pull complete +2026-10-18T15:43:42+09:00 3e1ddef0ec36 Extracting [=> ] 32.77kB/1.451MB +2026-10-18T15:43:42+09:00 3e1ddef0ec36 Extracting [==================================================>] 1.451MB/1.451MB +2026-10-18T15:43:42+09:00 3e1ddef0ec36 Pull complete +2026-10-18T15:43:42+09:00 postgres Pulled +2026-10-18T15:43:42+09:00 #1 [internal] load local bake definitions +2026-10-18T15:43:42+09:00 #1 reading from stdin 449B done +2026-10-18T15:43:42+09:00 #1 DONE 0.0s +2026-10-18T15:43:42+09:00 +2026-10-18T15:43:42+09:00 #2 [internal] load build definition from Dockerfile +2026-10-18T15:43:42+09:00 #2 transferring dockerfile: 500B 0.0s done +2026-10-18T15:43:42+09:00 #2 DONE 0.0s +2026-10-18T15:43:42+09:00 +2026-10-18T15:43:42+09:00 #3 [auth] library/python:pull token for registry-1.docker.io +2026-10-18T15:43:42+09:00 #3 DONE 0.0s +2026-10-18T15:43:42+09:00 +2026-10-18T15:43:42+09:00 #4 [internal] load metadata for docker.io/library/python:3.11-slim +2026-10-18T15:43:43+09:00 #4 DONE 0.8s +2026-10-18T15:43:43+09:00 +2026-10-18T15:43:43+09:00 #5 [internal] load .dockerignore +2026-10-18T15:43:43+09:00 #5 transferring context: 2B done +2026-10-18T15:43:43+09:00 #5 DONE 0.0s +2026-10-18T15:43:43+09:00 +2026-10-18T15:43:43+09:00 #6 [internal] load build context +2026-10-18T15:43:43+09:00 #6 transferring context: 16.83kB done +2026-10-18T15:43:43+09:00 #6 DONE 0.0s +2026-10-18T15:43:43+09:00 +2026-10-18T15:43:43+09:00 #7 [1/8] FROM docker.io/library/python:3.11-slim@sha256:e88e9763f943ec1834f992a4b51e0f24500486803e8bc534e5767af9ea65f6ce +2026-10-18T15:43:43+09:00 #7 resolve docker.io/library/python:3.11-slim@sha256:e88e9763f943ec1834f992a4b51e0f24500486803e8bc534e5767af9ea65f6ce done +2026-10-18T15:43:43+09:00 #7 sha256:e88e9763f943ec1834f992a4b51e0f24500486803e8bc534e5767af9ea65f6ce 10.37kB / 10.37kB done +2026-10-18T15:43:43+09:00 #7 sha256:e529028263dbe6910a2d96f7d2b8f5266385e917fd45d286ef166977c094a51e 1.75kB / 1.75kB done +2026-10-18T15:43:43+09:00 #7 sha256:541096ae9b05d3b850341b78790e2ed31e94d5aa0ea086933c6ff0c09ffa2e63 5.49kB / 5.49kB done +2026-10-18T15:43:43+09:00 #7 sha256:ecc510c1e359bdc007b39802570bb7e4dec7d6ebccf357c3201a74299113e05e 0B / 29.84MB 0.1s +2026-10-18T15:43:43+09:00 #7 sha256:0f752a1982d6f819fc2c9e78ac1514c63f2f2e1dec7885ffd4cb6809ba4a26ca 0B / 1.29MB 0.1s +2026-10-18T15:43:43+09:00 #7 sha256:759a7f30c31818dda4c97b407b24d93da479c306568d185ced927e1a749164f1 0B / 14.46MB 0.1s +2026-10-18T15:43:43+09:00 #7 sha256:0f752a1982d6f819fc2c9e78ac1514c63f2f2e1dec7885ffd4cb6809ba4a26ca 1.29MB / 1.29MB 0.1s done +2026-10-18T15:43:43+09:00 #7 sha256:759a7f30c31818dda4c97b407b24d93da479c306568d185ced927e1a749164f1 14.46MB / 14.46MB 0.2s +2026-10-18T15:43:43+09:00 #7 sha256:496c1a902b3a93cea3e54b90b79dbcaa0e58ad90c3fe9dd0a43c9557dc47f17d 250B / 250B 0.2s done +2026-10-18T15:43:43+09:00 #7 sha256:ecc510c1e359bdc007b39802570bb7e4dec7d6ebccf357c3201a74299113e05e 16.78MB / 29.84MB 0.3s +2026-10-18T15:43:43+09:00 #7 sha256:759a7f30c31818dda4c97b407b24d93da479c306568d185ced927e1a749164f1 14.46MB / 14.46MB 0.3s done +2026-10-18T15:43:43+09:00 #7 sha256:ecc510c1e359bdc007b39802570bb7e4dec7d6ebccf357c3201a74299113e05e 29.84MB / 29.84MB 0.5s +2026-10-18T15:43:44+09:00 #7 sha256:ecc510c1e359bdc007b39802570bb7e4dec7d6ebccf357c3201a74299113e05e 29.84MB / 29.84MB 0.5s done +2026-10-18T15:43:44+09:00 #7 extracting sha256:ecc510c1e359bdc007b39802570bb7e4dec7d6ebccf357c3201a74299113e05e 0.1s +2026-10-18T15:43:44+09:00 #7 extracting sha256:ecc510c1e359bdc007b39802570bb7e4dec7d6ebccf357c3201a74299113e05e 0.6s done +2026-10-18T15:43:44+09:00 #7 extracting sha256:0f752a1982d6f819fc2c9e78ac1514c63f2f2e1dec7885ffd4cb6809ba4a26ca 0.1s done +2026-10-18T15:43:45+09:00 #7 extracting sha256:759a7f30c31818dda4c97b407b24d93da479c306568d185ced927e1a749164f1 +2026-10-18T15:43:45+09:00 #7 extracting sha256:759a7f30c31818dda4c97b407b24d93da479c306568d185ced927e1a749164f1 0.4s done +2026-10-18T15:43:45+09:00 #7 extracting sha256:496c1a902b3a93cea3e54b90b79dbcaa0e58ad90c3fe9dd0a43c9557dc47f17d +2026-10-18T15:43:46+09:00 #7 extracting sha256:496c1a902b3a93cea3e54b90b79dbcaa0e58ad90c3fe9dd0a43c9557dc47f17d done +2026-10-18T15:43:46+09:00 #7 DONE 2.6s +2026-10-18T15:43:46+09:00 +2026-10-18T15:43:46+09:00 #8 [2/8] WORKDIR /app +2026-10-18T15:43:46+09:00 #8 DONE 0.0s +2026-10-18T15:43:46+09:00 +2026-10-18T15:43:46+09:00 #9 [3/8] COPY requirements.txt . +2026-10-18T15:43:46+09:00 #9 DONE 0.0s +2026-10-18T15:43:46+09:00 +2026-10-18T15:43:46+09:00 #10 [4/8] RUN pip install --no-cache-dir -r requirements.txt +2026-10-18T15:43:47+09:00 #10 1.192 Looking in indexes: <설정된 서버> <설정된 서버> +2026-10-18T15:43:47+09:00 #10 1.193 Ignoring torch: markers 'sys_platform != "linux" or platform_machine != "x86_64"' don't match your environment +2026-10-18T15:43:47+09:00 #10 1.611 Collecting fastapi==0.115.0 (from -r requirements.txt (line 4)) +2026-10-18T15:43:47+09:00 #10 1.657 Downloading fastapi-0.115.0-py3-none-any.whl.metadata (27 kB) +2026-10-18T15:43:47+09:00 #10 1.738 Collecting uvicorn==0.30.6 (from -r requirements.txt (line 5)) +2026-10-18T15:43:47+09:00 #10 1.750 Downloading uvicorn-0.30.6-py3-none-any.whl.metadata (6.6 kB) +2026-10-18T15:43:47+09:00 #10 1.828 Collecting FlagEmbedding==1.2.11 (from -r requirements.txt (line 6)) +2026-10-18T15:43:47+09:00 #10 1.844 Downloading FlagEmbedding-1.2.11.tar.gz (147 kB) +2026-10-18T15:43:47+09:00 #10 1.864 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 147.1/147.1 kB 8.3 MB/s eta 0:00:00 +2026-10-18T15:43:47+09:00 #10 1.879 Preparing metadata (setup.py): started +2026-10-18T15:43:48+09:00 #10 2.104 Preparing metadata (setup.py): finished with status 'done' +2026-10-18T15:43:48+09:00 #10 2.267 Collecting torch==2.4.1+cpu (from -r requirements.txt (line 9)) +2026-10-18T15:43:48+09:00 #10 2.427 Downloading <설정된 서버> (194.9 MB) +2026-10-18T15:43:49+09:00 #10 3.252 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 194.9/194.9 MB 266.8 MB/s eta 0:00:00 +2026-10-18T15:43:49+09:00 #10 3.596 Collecting transformers==4.44.2 (from -r requirements.txt (line 11)) +2026-10-18T15:43:49+09:00 #10 3.607 Downloading transformers-4.44.2-py3-none-any.whl.metadata (43 kB) +2026-10-18T15:43:49+09:00 #10 3.609 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 43.7/43.7 kB 418.3 MB/s eta 0:00:00 +2026-10-18T15:43:49+09:00 #10 3.722 Collecting peft==0.12.0 (from -r requirements.txt (line 12)) +2026-10-18T15:43:49+09:00 #10 3.733 Downloading peft-0.12.0-py3-none-any.whl.metadata (13 kB) +2026-10-18T15:43:50+09:00 #10 4.149 Collecting numpy==1.26.4 (from -r requirements.txt (line 13)) +2026-10-18T15:43:50+09:00 #10 4.159 Downloading numpy-1.26.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (61 kB) +2026-10-18T15:43:50+09:00 #10 4.161 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 61.0/61.0 kB 495.2 MB/s eta 0:00:00 +2026-10-18T15:43:50+09:00 #10 4.337 Collecting pyarrow==21.0.0 (from -r requirements.txt (line 15)) +2026-10-18T15:43:50+09:00 #10 4.348 Downloading pyarrow-21.0.0-cp311-cp311-manylinux_2_28_x86_64.whl.metadata (3.3 kB) +2026-10-18T15:43:50+09:00 #10 4.446 Collecting starlette<0.39.0,>=0.37.2 (from fastapi==0.115.0->-r requirements.txt (line 4)) +2026-10-18T15:43:50+09:00 #10 4.456 Downloading starlette-0.38.6-py3-none-any.whl.metadata (6.0 kB) +2026-10-18T15:43:50+09:00 #10 4.606 Collecting pydantic!=1.8,!=1.8.1,!=2.0.0,!=2.0.1,!=2.1.0,<3.0.0,>=1.7.4 (from fastapi==0.115.0->-r requirements.txt (line 4)) +2026-10-18T15:43:50+09:00 #10 4.617 Downloading pydantic-2.14.1-py3-none-any.whl.metadata (133 kB) +2026-10-18T15:43:50+09:00 #10 4.621 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 133.0/133.0 kB 50.7 MB/s eta 0:00:00 +2026-10-18T15:43:50+09:00 #10 4.674 Collecting typing-extensions>=4.8.0 (from fastapi==0.115.0->-r requirements.txt (line 4)) +2026-10-18T15:43:50+09:00 #10 4.684 Downloading typing_extensions-4.16.0-py3-none-any.whl.metadata (3.3 kB) +2026-10-18T15:43:50+09:00 #10 4.778 Collecting click>=7.0 (from uvicorn==0.30.6->-r requirements.txt (line 5)) +2026-10-18T15:43:50+09:00 #10 4.788 Downloading click-8.5.0-py3-none-any.whl.metadata (2.6 kB) +2026-10-18T15:43:50+09:00 #10 4.906 Collecting h11>=0.8 (from uvicorn==0.30.6->-r requirements.txt (line 5)) +2026-10-18T15:43:50+09:00 #10 4.916 Downloading h11-0.16.0-py3-none-any.whl.metadata (8.3 kB) +2026-10-18T15:43:50+09:00 #10 5.005 Collecting datasets (from FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:43:50+09:00 #10 5.015 Downloading datasets-5.1.0-py3-none-any.whl.metadata (24 kB) +2026-10-18T15:43:51+09:00 #10 5.090 Collecting accelerate>=0.20.1 (from FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:43:51+09:00 #10 5.100 Downloading accelerate-1.15.0-py3-none-any.whl.metadata (19 kB) +2026-10-18T15:43:51+09:00 #10 5.186 Collecting sentence_transformers (from FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:43:51+09:00 #10 5.196 Downloading sentence_transformers-6.1.0-py3-none-any.whl.metadata (20 kB) +2026-10-18T15:43:51+09:00 #10 5.264 Collecting filelock (from torch==2.4.1+cpu->-r requirements.txt (line 9)) +2026-10-18T15:43:51+09:00 #10 5.275 Downloading filelock-4.2.1-py3-none-any.whl.metadata (2.0 kB) +2026-10-18T15:43:51+09:00 #10 5.406 Collecting sympy (from torch==2.4.1+cpu->-r requirements.txt (line 9)) +2026-10-18T15:43:51+09:00 #10 5.417 Downloading sympy-1.14.0-py3-none-any.whl.metadata (12 kB) +2026-10-18T15:43:51+09:00 #10 5.474 Collecting networkx (from torch==2.4.1+cpu->-r requirements.txt (line 9)) +2026-10-18T15:43:51+09:00 #10 5.484 Downloading networkx-3.6.1-py3-none-any.whl.metadata (6.8 kB) +2026-10-18T15:43:51+09:00 #10 5.525 Collecting jinja2 (from torch==2.4.1+cpu->-r requirements.txt (line 9)) +2026-10-18T15:43:51+09:00 #10 5.539 Downloading <설정된 서버> (2.9 kB) +2026-10-18T15:43:51+09:00 #10 5.599 Collecting fsspec (from torch==2.4.1+cpu->-r requirements.txt (line 9)) +2026-10-18T15:43:51+09:00 #10 5.609 Downloading fsspec-2026.9.0-py3-none-any.whl.metadata (10 kB) +2026-10-18T15:43:51+09:00 #10 5.851 Collecting huggingface-hub<1.0,>=0.23.2 (from transformers==4.44.2->-r requirements.txt (line 11)) +2026-10-18T15:43:51+09:00 #10 5.862 Downloading huggingface_hub-0.36.2-py3-none-any.whl.metadata (15 kB) +2026-10-18T15:43:51+09:00 #10 5.872 Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.11/site-packages (from transformers==4.44.2->-r requirements.txt (line 11)) (26.3) +2026-10-18T15:43:51+09:00 #10 5.992 Collecting pyyaml>=5.1 (from transformers==4.44.2->-r requirements.txt (line 11)) +2026-10-18T15:43:52+09:00 #10 6.003 Downloading pyyaml-6.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (2.4 kB) +2026-10-18T15:43:52+09:00 #10 6.417 Collecting regex!=2019.12.17 (from transformers==4.44.2->-r requirements.txt (line 11)) +2026-10-18T15:43:52+09:00 #10 6.427 Downloading regex-2026.9.29-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (40 kB) +2026-10-18T15:43:52+09:00 #10 6.429 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 40.6/40.6 kB 398.3 MB/s eta 0:00:00 +2026-10-18T15:43:52+09:00 #10 6.478 Collecting requests (from transformers==4.44.2->-r requirements.txt (line 11)) +2026-10-18T15:43:52+09:00 #10 6.489 Downloading requests-2.34.2-py3-none-any.whl.metadata (4.8 kB) +2026-10-18T15:43:52+09:00 #10 6.617 Collecting safetensors>=0.4.1 (from transformers==4.44.2->-r requirements.txt (line 11)) +2026-10-18T15:43:52+09:00 #10 6.627 Downloading safetensors-0.8.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.2 kB) +2026-10-18T15:43:52+09:00 #10 6.897 Collecting tokenizers<0.20,>=0.19 (from transformers==4.44.2->-r requirements.txt (line 11)) +2026-10-18T15:43:53+09:00 #10 6.907 Downloading tokenizers-0.19.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (6.7 kB) +2026-10-18T15:43:53+09:00 #10 6.967 Collecting tqdm>=4.27 (from transformers==4.44.2->-r requirements.txt (line 11)) +2026-10-18T15:43:53+09:00 #10 6.977 Downloading tqdm-4.70.1-py3-none-any.whl.metadata (57 kB) +2026-10-18T15:43:53+09:00 #10 6.978 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 57.4/57.4 kB 398.2 MB/s eta 0:00:00 +2026-10-18T15:43:53+09:00 #10 7.095 Collecting psutil (from peft==0.12.0->-r requirements.txt (line 12)) +2026-10-18T15:43:53+09:00 #10 7.106 Downloading psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl.metadata (22 kB) +2026-10-18T15:43:53+09:00 #10 7.298 Collecting hf-xet<2.0.0,>=1.1.3 (from huggingface-hub<1.0,>=0.23.2->transformers==4.44.2->-r requirements.txt (line 11)) +2026-10-18T15:43:53+09:00 #10 7.308 Downloading hf_xet-1.7.0-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.metadata (4.9 kB) +2026-10-18T15:43:53+09:00 #10 7.473 Collecting annotated-types>=0.6.0 (from pydantic!=1.8,!=1.8.1,!=2.0.0,!=2.0.1,!=2.1.0,<3.0.0,>=1.7.4->fastapi==0.115.0->-r requirements.txt (line 4)) +2026-10-18T15:43:53+09:00 #10 7.484 Downloading annotated_types-0.8.0-py3-none-any.whl.metadata (15 kB) +2026-10-18T15:43:54+09:00 #10 8.112 Collecting pydantic-core==2.50.1 (from pydantic!=1.8,!=1.8.1,!=2.0.0,!=2.0.1,!=2.1.0,<3.0.0,>=1.7.4->fastapi==0.115.0->-r requirements.txt (line 4)) +2026-10-18T15:43:54+09:00 #10 8.125 Downloading pydantic_core-2.50.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (6.5 kB) +2026-10-18T15:43:54+09:00 #10 8.224 Collecting typing-inspection>=0.4.4 (from pydantic!=1.8,!=1.8.1,!=2.0.0,!=2.0.1,!=2.1.0,<3.0.0,>=1.7.4->fastapi==0.115.0->-r requirements.txt (line 4)) +2026-10-18T15:43:54+09:00 #10 8.239 Downloading typing_inspection-0.4.4-py3-none-any.whl.metadata (2.6 kB) +2026-10-18T15:43:54+09:00 #10 8.331 Collecting anyio<5,>=3.4.0 (from starlette<0.39.0,>=0.37.2->fastapi==0.115.0->-r requirements.txt (line 4)) +2026-10-18T15:43:54+09:00 #10 8.344 Downloading anyio-4.15.1-py3-none-any.whl.metadata (4.7 kB) +2026-10-18T15:43:54+09:00 #10 8.422 INFO: pip is looking at multiple versions of datasets to determine which version is compatible with other requirements. This could take a while. +2026-10-18T15:43:54+09:00 #10 8.425 Collecting datasets (from FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:43:54+09:00 #10 8.439 Downloading datasets-5.0.1-py3-none-any.whl.metadata (23 kB) +2026-10-18T15:43:54+09:00 #10 8.597 Collecting dill<0.4.2,>=0.3.0 (from datasets->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:43:54+09:00 #10 8.610 Downloading dill-0.4.1-py3-none-any.whl.metadata (10 kB) +2026-10-18T15:43:54+09:00 #10 8.742 Collecting pandas (from datasets->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:43:54+09:00 #10 8.755 Downloading pandas-3.0.6-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.metadata (79 kB) +2026-10-18T15:43:54+09:00 #10 8.757 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 79.5/79.5 kB 511.3 MB/s eta 0:00:00 +2026-10-18T15:43:54+09:00 #10 8.844 Collecting httpx<1.0.0 (from datasets->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:43:54+09:00 #10 8.857 Downloading httpx-0.28.1-py3-none-any.whl.metadata (7.1 kB) +2026-10-18T15:43:55+09:00 #10 9.178 Collecting xxhash (from datasets->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:43:55+09:00 #10 9.191 Downloading xxhash-4.0.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (17 kB) +2026-10-18T15:43:55+09:00 #10 9.305 Collecting multiprocess<0.70.20 (from datasets->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:43:55+09:00 #10 9.318 Downloading multiprocess-0.70.19-py311-none-any.whl.metadata (7.5 kB) +2026-10-18T15:43:55+09:00 #10 9.332 Collecting fsspec (from torch==2.4.1+cpu->-r requirements.txt (line 9)) +2026-10-18T15:43:55+09:00 #10 9.344 Downloading fsspec-2026.6.0-py3-none-any.whl.metadata (10 kB) +2026-10-18T15:43:55+09:00 #10 9.506 Collecting charset_normalizer<4,>=2 (from requests->transformers==4.44.2->-r requirements.txt (line 11)) +2026-10-18T15:43:55+09:00 #10 9.519 Downloading charset_normalizer-3.5.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (46 kB) +2026-10-18T15:43:55+09:00 #10 9.521 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 46.4/46.4 kB 464.6 MB/s eta 0:00:00 +2026-10-18T15:43:55+09:00 #10 9.561 Collecting idna<4,>=2.5 (from requests->transformers==4.44.2->-r requirements.txt (line 11)) +2026-10-18T15:43:55+09:00 #10 9.573 Downloading idna-3.20-py3-none-any.whl.metadata (7.2 kB) +2026-10-18T15:43:55+09:00 #10 9.624 Collecting urllib3<3,>=1.26 (from requests->transformers==4.44.2->-r requirements.txt (line 11)) +2026-10-18T15:43:55+09:00 #10 9.637 Downloading urllib3-2.8.0-py3-none-any.whl.metadata (7.4 kB) +2026-10-18T15:43:55+09:00 #10 9.679 Collecting certifi>=2023.5.7 (from requests->transformers==4.44.2->-r requirements.txt (line 11)) +2026-10-18T15:43:55+09:00 #10 9.692 Downloading certifi-2026.7.22-py3-none-any.whl.metadata (2.5 kB) +2026-10-18T15:43:55+09:00 #10 9.765 Collecting MarkupSafe>=2.0 (from jinja2->torch==2.4.1+cpu->-r requirements.txt (line 9)) +2026-10-18T15:43:55+09:00 #10 9.777 Downloading markupsafe-3.0.4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (2.7 kB) +2026-10-18T15:43:55+09:00 #10 9.829 INFO: pip is looking at multiple versions of sentence-transformers to determine which version is compatible with other requirements. This could take a while. +2026-10-18T15:43:55+09:00 #10 9.832 Collecting sentence_transformers (from FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:43:55+09:00 #10 9.846 Downloading sentence_transformers-6.0.1-py3-none-any.whl.metadata (20 kB) +2026-10-18T15:43:55+09:00 #10 9.870 Downloading sentence_transformers-6.0.0-py3-none-any.whl.metadata (20 kB) +2026-10-18T15:43:56+09:00 #10 9.896 Downloading sentence_transformers-5.7.0-py3-none-any.whl.metadata (18 kB) +2026-10-18T15:43:56+09:00 #10 10.05 Collecting scikit-learn>=0.22.0 (from sentence_transformers->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:43:56+09:00 #10 10.07 Downloading scikit_learn-1.9.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.metadata (9.3 kB) +2026-10-18T15:43:56+09:00 #10 10.20 Collecting scipy>=1.0.0 (from sentence_transformers->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:43:56+09:00 #10 10.22 Downloading scipy-1.17.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.metadata (62 kB) +2026-10-18T15:43:56+09:00 #10 10.22 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 62.1/62.1 kB 415.4 MB/s eta 0:00:00 +2026-10-18T15:43:56+09:00 #10 10.28 Collecting mpmath<1.4,>=1.1.0 (from sympy->torch==2.4.1+cpu->-r requirements.txt (line 9)) +2026-10-18T15:43:56+09:00 #10 10.30 Downloading mpmath-1.3.0-py3-none-any.whl.metadata (8.6 kB) +2026-10-18T15:43:56+09:00 #10 10.91 Collecting aiohttp!=4.0.0a0,!=4.0.0a1 (from fsspec[http]<=2026.6.0,>=2023.1.0->datasets->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:43:56+09:00 #10 10.92 Downloading aiohttp-3.14.5-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (8.3 kB) +2026-10-18T15:43:56+09:00 #10 11.00 Collecting httpcore==1.* (from httpx<1.0.0->datasets->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:43:56+09:00 #10 11.02 Downloading httpcore-1.0.9-py3-none-any.whl.metadata (21 kB) +2026-10-18T15:43:57+09:00 #10 11.13 Collecting joblib>=1.4.0 (from scikit-learn>=0.22.0->sentence_transformers->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:43:57+09:00 #10 11.14 Downloading joblib-1.6.0-py3-none-any.whl.metadata (6.5 kB) +2026-10-18T15:43:57+09:00 #10 11.23 Collecting narwhals>=2.0.1 (from scikit-learn>=0.22.0->sentence_transformers->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:43:57+09:00 #10 11.24 Downloading narwhals-2.27.1-py3-none-any.whl.metadata (15 kB) +2026-10-18T15:43:57+09:00 #10 11.31 Collecting threadpoolctl>=3.5.0 (from scikit-learn>=0.22.0->sentence_transformers->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:43:57+09:00 #10 11.32 Downloading threadpoolctl-3.7.0-py3-none-any.whl.metadata (24 kB) +2026-10-18T15:43:57+09:00 #10 11.47 Collecting python-dateutil>=2.8.2 (from pandas->datasets->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:43:57+09:00 #10 11.49 Downloading python_dateutil-2.9.0.post0-py2.py3-none-any.whl.metadata (8.4 kB) +2026-10-18T15:43:57+09:00 #10 11.57 Collecting aiohappyeyeballs>=2.5.0 (from aiohttp!=4.0.0a0,!=4.0.0a1->fsspec[http]<=2026.6.0,>=2023.1.0->datasets->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:43:57+09:00 #10 11.58 Downloading aiohappyeyeballs-2.7.1-py3-none-any.whl.metadata (5.9 kB) +2026-10-18T15:43:57+09:00 #10 11.65 Collecting aiosignal>=1.4.0 (from aiohttp!=4.0.0a0,!=4.0.0a1->fsspec[http]<=2026.6.0,>=2023.1.0->datasets->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:43:57+09:00 #10 11.66 Downloading aiosignal-1.4.0-py3-none-any.whl.metadata (3.7 kB) +2026-10-18T15:43:57+09:00 #10 11.73 Collecting attrs>=17.3.0 (from aiohttp!=4.0.0a0,!=4.0.0a1->fsspec[http]<=2026.6.0,>=2023.1.0->datasets->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:43:57+09:00 #10 11.75 Downloading attrs-26.1.0-py3-none-any.whl.metadata (8.8 kB) +2026-10-18T15:43:57+09:00 #10 11.84 Collecting frozenlist>=1.1.1 (from aiohttp!=4.0.0a0,!=4.0.0a1->fsspec[http]<=2026.6.0,>=2023.1.0->datasets->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:43:57+09:00 #10 11.86 Downloading frozenlist-1.8.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl.metadata (20 kB) +2026-10-18T15:43:58+09:00 #10 12.07 Collecting multidict<8.0,>=4.5 (from aiohttp!=4.0.0a0,!=4.0.0a1->fsspec[http]<=2026.6.0,>=2023.1.0->datasets->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:43:58+09:00 #10 12.08 Downloading multidict-7.1.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (6.2 kB) +2026-10-18T15:43:58+09:00 #10 12.41 Collecting propcache>=0.2.0 (from aiohttp!=4.0.0a0,!=4.0.0a1->fsspec[http]<=2026.6.0,>=2023.1.0->datasets->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:43:58+09:00 #10 12.43 Downloading propcache-0.5.4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (25 kB) +2026-10-18T15:43:58+09:00 #10 12.69 Collecting yarl<2.0,>=1.25.1 (from aiohttp!=4.0.0a0,!=4.0.0a1->fsspec[http]<=2026.6.0,>=2023.1.0->datasets->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:43:58+09:00 #10 12.70 Downloading yarl-1.25.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (111 kB) +2026-10-18T15:43:58+09:00 #10 12.70 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 111.6/111.6 kB 87.7 MB/s eta 0:00:00 +2026-10-18T15:43:58+09:00 #10 12.83 Collecting cloudpickle>=3.0 (from joblib>=1.4.0->scikit-learn>=0.22.0->sentence_transformers->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:43:58+09:00 #10 12.85 Downloading cloudpickle-3.1.2-py3-none-any.whl.metadata (7.1 kB) +2026-10-18T15:43:58+09:00 #10 12.92 Collecting six>=1.5 (from python-dateutil>=2.8.2->pandas->datasets->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:43:58+09:00 #10 12.94 Downloading six-1.17.0-py2.py3-none-any.whl.metadata (1.7 kB) +2026-10-18T15:43:59+09:00 #10 13.01 Downloading fastapi-0.115.0-py3-none-any.whl (94 kB) +2026-10-18T15:43:59+09:00 #10 13.01 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 94.6/94.6 kB 517.6 MB/s eta 0:00:00 +2026-10-18T15:43:59+09:00 #10 13.03 Downloading uvicorn-0.30.6-py3-none-any.whl (62 kB) +2026-10-18T15:43:59+09:00 #10 13.03 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 62.8/62.8 kB 495.5 MB/s eta 0:00:00 +2026-10-18T15:43:59+09:00 #10 13.04 Downloading transformers-4.44.2-py3-none-any.whl (9.5 MB) +2026-10-18T15:43:59+09:00 #10 13.14 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.5/9.5 MB 102.8 MB/s eta 0:00:00 +2026-10-18T15:43:59+09:00 #10 13.15 Downloading peft-0.12.0-py3-none-any.whl (296 kB) +2026-10-18T15:43:59+09:00 #10 13.15 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 296.4/296.4 kB 437.6 MB/s eta 0:00:00 +2026-10-18T15:43:59+09:00 #10 13.17 Downloading numpy-1.26.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (18.3 MB) +2026-10-18T15:43:59+09:00 #10 13.21 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 18.3/18.3 MB 456.5 MB/s eta 0:00:00 +2026-10-18T15:43:59+09:00 #10 13.23 Downloading pyarrow-21.0.0-cp311-cp311-manylinux_2_28_x86_64.whl (42.8 MB) +2026-10-18T15:43:59+09:00 #10 13.33 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 42.8/42.8 MB 469.5 MB/s eta 0:00:00 +2026-10-18T15:43:59+09:00 #10 13.35 Downloading accelerate-1.15.0-py3-none-any.whl (394 kB) +2026-10-18T15:43:59+09:00 #10 13.35 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 394.3/394.3 kB 675.1 MB/s eta 0:00:00 +2026-10-18T15:43:59+09:00 #10 13.36 Downloading click-8.5.0-py3-none-any.whl (125 kB) +2026-10-18T15:43:59+09:00 #10 13.36 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 125.3/125.3 kB 603.8 MB/s eta 0:00:00 +2026-10-18T15:43:59+09:00 #10 13.38 Downloading h11-0.16.0-py3-none-any.whl (37 kB) +2026-10-18T15:43:59+09:00 #10 13.39 Downloading huggingface_hub-0.36.2-py3-none-any.whl (566 kB) +2026-10-18T15:43:59+09:00 #10 13.39 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 566.4/566.4 kB 667.3 MB/s eta 0:00:00 +2026-10-18T15:43:59+09:00 #10 13.40 Downloading pydantic-2.14.1-py3-none-any.whl (488 kB) +2026-10-18T15:43:59+09:00 #10 13.41 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 488.1/488.1 kB 657.9 MB/s eta 0:00:00 +2026-10-18T15:43:59+09:00 #10 13.42 Downloading pydantic_core-2.50.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.2 MB) +2026-10-18T15:43:59+09:00 #10 13.43 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.2/2.2 MB 567.4 MB/s eta 0:00:00 +2026-10-18T15:43:59+09:00 #10 13.44 Downloading pyyaml-6.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (806 kB) +2026-10-18T15:43:59+09:00 #10 13.44 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 806.6/806.6 kB 502.6 MB/s eta 0:00:00 +2026-10-18T15:43:59+09:00 #10 13.46 Downloading regex-2026.9.29-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (804 kB) +2026-10-18T15:43:59+09:00 #10 13.46 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 805.0/805.0 kB 654.1 MB/s eta 0:00:00 +2026-10-18T15:43:59+09:00 #10 13.47 Downloading safetensors-0.8.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (516 kB) +2026-10-18T15:43:59+09:00 #10 13.47 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 516.0/516.0 kB 641.6 MB/s eta 0:00:00 +2026-10-18T15:43:59+09:00 #10 13.49 Downloading starlette-0.38.6-py3-none-any.whl (71 kB) +2026-10-18T15:43:59+09:00 #10 13.49 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 71.5/71.5 kB 497.9 MB/s eta 0:00:00 +2026-10-18T15:43:59+09:00 #10 13.50 Downloading tokenizers-0.19.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.6 MB) +2026-10-18T15:43:59+09:00 #10 13.51 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.6/3.6 MB 607.8 MB/s eta 0:00:00 +2026-10-18T15:43:59+09:00 #10 13.52 Downloading tqdm-4.70.1-py3-none-any.whl (80 kB) +2026-10-18T15:43:59+09:00 #10 13.52 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 80.2/80.2 kB 559.7 MB/s eta 0:00:00 +2026-10-18T15:43:59+09:00 #10 13.54 Downloading typing_extensions-4.16.0-py3-none-any.whl (45 kB) +2026-10-18T15:43:59+09:00 #10 13.54 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 45.6/45.6 kB 398.5 MB/s eta 0:00:00 +2026-10-18T15:43:59+09:00 #10 13.55 Downloading datasets-5.0.1-py3-none-any.whl (559 kB) +2026-10-18T15:43:59+09:00 #10 13.55 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 559.1/559.1 kB 302.5 MB/s eta 0:00:00 +2026-10-18T15:43:59+09:00 #10 13.57 Downloading fsspec-2026.6.0-py3-none-any.whl (203 kB) +2026-10-18T15:43:59+09:00 #10 13.57 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 203.9/203.9 kB 616.4 MB/s eta 0:00:00 +2026-10-18T15:43:59+09:00 #10 13.58 Downloading requests-2.34.2-py3-none-any.whl (73 kB) +2026-10-18T15:43:59+09:00 #10 13.58 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 73.1/73.1 kB 550.5 MB/s eta 0:00:00 +2026-10-18T15:43:59+09:00 #10 13.59 Downloading filelock-4.2.1-py3-none-any.whl (162 kB) +2026-10-18T15:43:59+09:00 #10 13.60 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 162.5/162.5 kB 625.9 MB/s eta 0:00:00 +2026-10-18T15:43:59+09:00 #10 13.61 Downloading <설정된 서버> (134 kB) +2026-10-18T15:43:59+09:00 #10 13.61 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 134.9/134.9 kB 550.3 MB/s eta 0:00:00 +2026-10-18T15:43:59+09:00 #10 13.62 Downloading networkx-3.6.1-py3-none-any.whl (2.1 MB) +2026-10-18T15:43:59+09:00 #10 13.63 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1/2.1 MB 482.3 MB/s eta 0:00:00 +2026-10-18T15:43:59+09:00 #10 13.64 Downloading psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl (155 kB) +2026-10-18T15:43:59+09:00 #10 13.64 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 155.6/155.6 kB 596.5 MB/s eta 0:00:00 +2026-10-18T15:43:59+09:00 #10 13.66 Downloading sentence_transformers-5.7.0-py3-none-any.whl (611 kB) +2026-10-18T15:43:59+09:00 #10 13.66 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 611.3/611.3 kB 685.4 MB/s eta 0:00:00 +2026-10-18T15:43:59+09:00 #10 13.67 Downloading sympy-1.14.0-py3-none-any.whl (6.3 MB) +2026-10-18T15:43:59+09:00 #10 13.69 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.3/6.3 MB 487.8 MB/s eta 0:00:00 +2026-10-18T15:43:59+09:00 #10 13.70 Downloading annotated_types-0.8.0-py3-none-any.whl (13 kB) +2026-10-18T15:43:59+09:00 #10 13.71 Downloading anyio-4.15.1-py3-none-any.whl (132 kB) +2026-10-18T15:43:59+09:00 #10 13.71 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 132.1/132.1 kB 599.0 MB/s eta 0:00:00 +2026-10-18T15:43:59+09:00 #10 13.73 Downloading certifi-2026.7.22-py3-none-any.whl (136 kB) +2026-10-18T15:43:59+09:00 #10 13.73 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 137.0/137.0 kB 559.9 MB/s eta 0:00:00 +2026-10-18T15:43:59+09:00 #10 13.74 Downloading charset_normalizer-3.5.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (269 kB) +2026-10-18T15:43:59+09:00 #10 13.74 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 270.0/270.0 kB 620.7 MB/s eta 0:00:00 +2026-10-18T15:43:59+09:00 #10 13.75 Downloading dill-0.4.1-py3-none-any.whl (120 kB) +2026-10-18T15:43:59+09:00 #10 13.76 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 120.0/120.0 kB 445.8 MB/s eta 0:00:00 +2026-10-18T15:43:59+09:00 #10 13.77 Downloading hf_xet-1.7.0-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (4.2 MB) +2026-10-18T15:43:59+09:00 #10 13.78 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.2/4.2 MB 494.7 MB/s eta 0:00:00 +2026-10-18T15:43:59+09:00 #10 13.79 Downloading httpx-0.28.1-py3-none-any.whl (73 kB) +2026-10-18T15:43:59+09:00 #10 13.79 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 73.5/73.5 kB 468.4 MB/s eta 0:00:00 +2026-10-18T15:43:59+09:00 #10 13.81 Downloading httpcore-1.0.9-py3-none-any.whl (78 kB) +2026-10-18T15:43:59+09:00 #10 13.81 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 78.8/78.8 kB 553.5 MB/s eta 0:00:00 +2026-10-18T15:43:59+09:00 #10 13.82 Downloading idna-3.20-py3-none-any.whl (69 kB) +2026-10-18T15:43:59+09:00 #10 13.82 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 69.6/69.6 kB 549.2 MB/s eta 0:00:00 +2026-10-18T15:43:59+09:00 #10 13.83 Downloading markupsafe-3.0.4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (22 kB) +2026-10-18T15:43:59+09:00 #10 13.85 Downloading mpmath-1.3.0-py3-none-any.whl (536 kB) +2026-10-18T15:43:59+09:00 #10 13.85 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 536.2/536.2 kB 645.7 MB/s eta 0:00:00 +2026-10-18T15:43:59+09:00 #10 13.86 Downloading multiprocess-0.70.19-py311-none-any.whl (144 kB) +2026-10-18T15:43:59+09:00 #10 13.86 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 144.5/144.5 kB 639.0 MB/s eta 0:00:00 +2026-10-18T15:43:59+09:00 #10 13.87 Downloading scikit_learn-1.9.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (9.3 MB) +2026-10-18T15:43:59+09:00 #10 13.89 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.3/9.3 MB 589.3 MB/s eta 0:00:00 +2026-10-18T15:43:59+09:00 #10 13.90 Downloading scipy-1.17.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (35.3 MB) +2026-10-18T15:43:59+09:00 #10 13.97 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 35.3/35.3 MB 529.5 MB/s eta 0:00:00 +2026-10-18T15:43:59+09:00 #10 13.98 Downloading typing_inspection-0.4.4-py3-none-any.whl (14 kB) +2026-10-18T15:44:00+09:00 #10 13.99 Downloading urllib3-2.8.0-py3-none-any.whl (135 kB) +2026-10-18T15:44:00+09:00 #10 13.99 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 135.7/135.7 kB 628.2 MB/s eta 0:00:00 +2026-10-18T15:44:00+09:00 #10 14.01 Downloading pandas-3.0.6-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (11.1 MB) +2026-10-18T15:44:00+09:00 #10 14.04 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 11.1/11.1 MB 325.5 MB/s eta 0:00:00 +2026-10-18T15:44:00+09:00 #10 14.05 Downloading xxhash-4.0.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (261 kB) +2026-10-18T15:44:00+09:00 #10 14.06 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 261.0/261.0 kB 487.5 MB/s eta 0:00:00 +2026-10-18T15:44:00+09:00 #10 14.07 Downloading aiohttp-3.14.5-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (1.9 MB) +2026-10-18T15:44:00+09:00 #10 14.07 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.9/1.9 MB 545.5 MB/s eta 0:00:00 +2026-10-18T15:44:00+09:00 #10 14.09 Downloading joblib-1.6.0-py3-none-any.whl (306 kB) +2026-10-18T15:44:00+09:00 #10 14.09 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 306.1/306.1 kB 553.9 MB/s eta 0:00:00 +2026-10-18T15:44:00+09:00 #10 14.10 Downloading narwhals-2.27.1-py3-none-any.whl (483 kB) +2026-10-18T15:44:00+09:00 #10 14.10 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 483.2/483.2 kB 635.7 MB/s eta 0:00:00 +2026-10-18T15:44:00+09:00 #10 14.11 Downloading python_dateutil-2.9.0.post0-py2.py3-none-any.whl (229 kB) +2026-10-18T15:44:00+09:00 #10 14.12 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 229.9/229.9 kB 622.3 MB/s eta 0:00:00 +2026-10-18T15:44:00+09:00 #10 14.13 Downloading threadpoolctl-3.7.0-py3-none-any.whl (26 kB) +2026-10-18T15:44:00+09:00 #10 14.14 Downloading aiohappyeyeballs-2.7.1-py3-none-any.whl (15 kB) +2026-10-18T15:44:00+09:00 #10 14.15 Downloading aiosignal-1.4.0-py3-none-any.whl (7.5 kB) +2026-10-18T15:44:00+09:00 #10 14.17 Downloading attrs-26.1.0-py3-none-any.whl (67 kB) +2026-10-18T15:44:00+09:00 #10 14.17 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 67.5/67.5 kB 507.7 MB/s eta 0:00:00 +2026-10-18T15:44:00+09:00 #10 14.18 Downloading cloudpickle-3.1.2-py3-none-any.whl (22 kB) +2026-10-18T15:44:00+09:00 #10 14.19 Downloading frozenlist-1.8.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (231 kB) +2026-10-18T15:44:00+09:00 #10 14.19 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 231.1/231.1 kB 568.6 MB/s eta 0:00:00 +2026-10-18T15:44:00+09:00 #10 14.21 Downloading multidict-7.1.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (480 kB) +2026-10-18T15:44:00+09:00 #10 14.21 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 480.4/480.4 kB 523.8 MB/s eta 0:00:00 +2026-10-18T15:44:00+09:00 #10 14.22 Downloading propcache-0.5.4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (235 kB) +2026-10-18T15:44:00+09:00 #10 14.22 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 235.4/235.4 kB 665.1 MB/s eta 0:00:00 +2026-10-18T15:44:00+09:00 #10 14.24 Downloading six-1.17.0-py2.py3-none-any.whl (11 kB) +2026-10-18T15:44:00+09:00 #10 14.25 Downloading yarl-1.25.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (117 kB) +2026-10-18T15:44:00+09:00 #10 14.25 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 117.7/117.7 kB 591.6 MB/s eta 0:00:00 +2026-10-18T15:44:00+09:00 #10 14.40 Building wheels for collected packages: FlagEmbedding +2026-10-18T15:44:00+09:00 #10 14.41 Building wheel for FlagEmbedding (setup.py): started +2026-10-18T15:44:00+09:00 #10 14.58 Building wheel for FlagEmbedding (setup.py): finished with status 'done' +2026-10-18T15:44:00+09:00 #10 14.58 Created wheel for FlagEmbedding: filename=flagembedding-1.2.11-py3-none-any.whl size=171233 sha256=dce53ea7205580c3c110307106c516b2fe2395be9418c23665187f4362bbcef2 +2026-10-18T15:44:00+09:00 #10 14.58 Stored in directory: /tmp/pip-ephem-wheel-cache-59kqjpl4/wheels/cc/30/56/331f855b95583721e80ba4d5630f701387dcade9d050c88d9d +2026-10-18T15:44:00+09:00 #10 14.58 Successfully built FlagEmbedding +2026-10-18T15:44:01+09:00 #10 15.06 Installing collected packages: mpmath, xxhash, urllib3, typing-extensions, tqdm, threadpoolctl, sympy, six, safetensors, regex, pyyaml, pyarrow, psutil, propcache, numpy, networkx, narwhals, multidict, MarkupSafe, idna, hf-xet, h11, fsspec, frozenlist, filelock, dill, cloudpickle, click, charset_normalizer, certifi, attrs, annotated-types, aiohappyeyeballs, yarl, uvicorn, typing-inspection, scipy, requests, python-dateutil, pydantic-core, multiprocess, joblib, jinja2, httpcore, anyio, aiosignal, torch, starlette, scikit-learn, pydantic, pandas, huggingface-hub, httpx, aiohttp, tokenizers, fastapi, accelerate, transformers, datasets, sentence_transformers, peft, FlagEmbedding +2026-10-18T15:44:24+09:00 #10 38.85 Successfully installed FlagEmbedding-1.2.11 MarkupSafe-3.0.4 accelerate-1.15.0 aiohappyeyeballs-2.7.1 aiohttp-3.14.5 aiosignal-1.4.0 annotated-types-0.8.0 anyio-4.15.1 attrs-26.1.0 certifi-2026.7.22 charset_normalizer-3.5.2 click-8.5.0 cloudpickle-3.1.2 datasets-5.0.1 dill-0.4.1 fastapi-0.115.0 filelock-4.2.1 frozenlist-1.8.0 fsspec-2026.6.0 h11-0.16.0 hf-xet-1.7.0 httpcore-1.0.9 httpx-0.28.1 huggingface-hub-0.36.2 idna-3.20 jinja2-3.1.6 joblib-1.6.0 mpmath-1.3.0 multidict-7.1.0 multiprocess-0.70.19 narwhals-2.27.1 networkx-3.6.1 numpy-1.26.4 pandas-3.0.6 peft-0.12.0 propcache-0.5.4 psutil-7.2.2 pyarrow-21.0.0 pydantic-2.14.1 pydantic-core-2.50.1 python-dateutil-2.9.0.post0 pyyaml-6.0.3 regex-2026.9.29 requests-2.34.2 safetensors-0.8.0 scikit-learn-1.9.1 scipy-1.17.1 sentence_transformers-5.7.0 six-1.17.0 starlette-0.38.6 sympy-1.14.0 threadpoolctl-3.7.0 tokenizers-0.19.1 torch-2.4.1+cpu tqdm-4.70.1 transformers-4.44.2 typing-extensions-4.16.0 typing-inspection-0.4.4 urllib3-2.8.0 uvicorn-0.30.6 xxhash-4.0.1 yarl-1.25.1 +2026-10-18T15:44:25+09:00 #10 38.85 WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: <설정된 서버> +2026-10-18T15:44:25+09:00 #10 38.94 +2026-10-18T15:44:25+09:00 #10 38.94 [notice] A new release of pip is available: 24.0 -> 26.2.1 +2026-10-18T15:44:25+09:00 #10 38.94 [notice] To update, run: pip install --upgrade pip +2026-10-18T15:44:31+09:00 #10 DONE 45.1s +2026-10-18T15:44:31+09:00 +2026-10-18T15:44:31+09:00 #11 [5/8] COPY requirements-observability.txt . +2026-10-18T15:44:31+09:00 #11 DONE 0.0s +2026-10-18T15:44:31+09:00 +2026-10-18T15:44:31+09:00 #12 [6/8] RUN pip install --no-cache-dir -r requirements-observability.txt +2026-10-18T15:44:31+09:00 #12 0.384 Collecting prometheus-client==0.25.0 (from -r requirements-observability.txt (line 1)) +2026-10-18T15:44:31+09:00 #12 0.449 Downloading prometheus_client-0.25.0-py3-none-any.whl.metadata (2.1 kB) +2026-10-18T15:44:31+09:00 #12 0.465 Downloading prometheus_client-0.25.0-py3-none-any.whl (64 kB) +2026-10-18T15:44:31+09:00 #12 0.479 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 64.2/64.2 kB 4.7 MB/s eta 0:00:00 +2026-10-18T15:44:31+09:00 #12 0.894 Installing collected packages: prometheus-client +2026-10-18T15:44:32+09:00 #12 0.925 Successfully installed prometheus-client-0.25.0 +2026-10-18T15:44:32+09:00 #12 0.925 WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: <설정된 서버> +2026-10-18T15:44:32+09:00 #12 1.004 +2026-10-18T15:44:32+09:00 #12 1.004 [notice] A new release of pip is available: 24.0 -> 26.2.1 +2026-10-18T15:44:32+09:00 #12 1.004 [notice] To update, run: pip install --upgrade pip +2026-10-18T15:44:32+09:00 #12 DONE 1.1s +2026-10-18T15:44:32+09:00 +2026-10-18T15:44:32+09:00 #13 [7/8] RUN python -c "from FlagEmbedding import BGEM3FlagModel" +2026-10-18T15:44:35+09:00 #13 DONE 3.1s +2026-10-18T15:44:35+09:00 +2026-10-18T15:44:35+09:00 #14 [8/8] COPY main.py . +2026-10-18T15:44:35+09:00 #14 DONE 0.0s +2026-10-18T15:44:35+09:00 +2026-10-18T15:44:35+09:00 #15 exporting to image +2026-10-18T15:44:35+09:00 #15 exporting layers +2026-10-18T15:44:40+09:00 #15 exporting layers 5.5s done +2026-10-18T15:44:40+09:00 #15 writing image sha256:70496446175c4f1eb6aa60ba7af823e4f70356eeab11e6d18e2ed0b021b75351 done +2026-10-18T15:44:40+09:00 #15 naming to docker.io/library/docgrid-embedding-server done +2026-10-18T15:44:40+09:00 #15 DONE 5.6s +2026-10-18T15:44:40+09:00 +2026-10-18T15:44:40+09:00 #16 resolving provenance for metadata file +2026-10-18T15:44:40+09:00 #16 DONE 0.0s +2026-10-18T15:44:40+09:00 embedding-server Built +2026-10-18T15:44:40+09:00 Network docgrid_docgrid-local Creating +2026-10-18T15:44:40+09:00 Network docgrid_docgrid-local Created +2026-10-18T15:44:40+09:00 Volume "docgrid_huggingface-cache" Creating +2026-10-18T15:44:40+09:00 Volume "docgrid_huggingface-cache" Created +2026-10-18T15:44:40+09:00 Volume "docgrid_valkey-data" Creating +2026-10-18T15:44:40+09:00 Volume "docgrid_valkey-data" Created +2026-10-18T15:44:40+09:00 Volume "docgrid_postgres17_data" Creating +2026-10-18T15:44:40+09:00 Volume "docgrid_postgres17_data" Created +2026-10-18T15:44:40+09:00 Container docgrid-valkey Creating +2026-10-18T15:44:40+09:00 Container docgrid-postgres17 Creating +2026-10-18T15:44:40+09:00 Container docgrid-embedding Creating +2026-10-18T15:44:40+09:00 Container docgrid-embedding Created +2026-10-18T15:44:40+09:00 Container docgrid-postgres17 Created +2026-10-18T15:44:40+09:00 Container docgrid-valkey Created +2026-10-18T15:44:40+09:00 Container docgrid-valkey Starting +2026-10-18T15:44:40+09:00 Container docgrid-postgres17 Starting +2026-10-18T15:44:40+09:00 Container docgrid-embedding Starting +2026-10-18T15:44:41+09:00 Container docgrid-valkey Started +2026-10-18T15:44:41+09:00 Container docgrid-embedding Started +2026-10-18T15:44:41+09:00 Container docgrid-postgres17 Started +2026-10-18T15:44:44+09:00 [OK] 대상 PostgreSQL 준비 완료 +2026-10-18T15:44:44+09:00 [OK] Valkey 준비 완료 +2026-10-18T15:45:10+09:00 [OK] Embedding Provider 준비 완료 +2026-10-18T15:45:10+09:00 [OK] 대상 PostgreSQL 인증·pgvector 0.8.1 확인 +2026-10-18T15:45:10+09:00 [OK] Valkey 연결 가능 +2026-10-18T15:45:10+09:00 [OK] Embedding Provider 준비 완료 (<설정된 서버>) +2026-10-18T15:45:10+09:00 [OK] 검색 범위 준비 완료 · 생성 답변은 미검증 diff --git a/docs/test-results/demo-fresh-20261018/runs/39105008958-1/runtime/0b33fe3a31414ff28fc8f089dbf5c65c/verify-0b06ffdd53a143428056bc1468713ab9.log b/docs/test-results/demo-fresh-20261018/runs/39105008958-1/runtime/0b33fe3a31414ff28fc8f089dbf5c65c/verify-0b06ffdd53a143428056bc1468713ab9.log new file mode 100644 index 00000000..ba66e318 --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39105008958-1/runtime/0b33fe3a31414ff28fc8f089dbf5c65c/verify-0b06ffdd53a143428056bc1468713ab9.log @@ -0,0 +1,56 @@ +2026-10-18T15:46:37+09:00 [실행] 20261018T154637726025+0900 · 범위 search +2026-10-18T15:46:37+09:00 [계정] 회원가입 완료 +2026-10-18T15:46:38+09:00 [계정] 로그인 완료 +2026-10-18T15:46:38+09:00 [업로드] 1/15 · 문서 3 +2026-10-18T15:46:38+09:00 [업로드] 2/15 · 문서 4 +2026-10-18T15:46:38+09:00 [업로드] 3/15 · 문서 5 +2026-10-18T15:46:38+09:00 [업로드] 4/15 · 문서 6 +2026-10-18T15:46:38+09:00 [업로드] 5/15 · 문서 7 +2026-10-18T15:46:38+09:00 [업로드] 6/15 · 문서 8 +2026-10-18T15:46:38+09:00 [업로드] 7/15 · 문서 9 +2026-10-18T15:46:38+09:00 [업로드] 8/15 · 문서 10 +2026-10-18T15:46:38+09:00 [업로드] 9/15 · 문서 11 +2026-10-18T15:46:38+09:00 [업로드] 10/15 · 문서 12 +2026-10-18T15:46:38+09:00 [업로드] 11/15 · 문서 13 +2026-10-18T15:46:38+09:00 [업로드] 12/15 · 문서 14 +2026-10-18T15:46:38+09:00 [업로드] 13/15 · 문서 15 +2026-10-18T15:46:38+09:00 [업로드] 14/15 · 문서 16 +2026-10-18T15:46:38+09:00 [업로드] 15/15 · 문서 17 +2026-10-18T15:46:39+09:00 [인덱싱] INDEXED 0/15 · 처리 중 0 · 대기 15 · 실패 0 (0.2초) +2026-10-18T15:46:49+09:00 [인덱싱] INDEXED 0/15 · 처리 중 2 · 대기 13 · 실패 0 (10.2초) +2026-10-18T15:46:52+09:00 [인덱싱] INDEXED 3/15 · 처리 중 1 · 대기 11 · 실패 0 (13.6초) +2026-10-18T15:46:55+09:00 [인덱싱] INDEXED 5/15 · 처리 중 2 · 대기 8 · 실패 0 (16.9초) +2026-10-18T15:46:59+09:00 [인덱싱] INDEXED 7/15 · 처리 중 2 · 대기 6 · 실패 0 (20.2초) +2026-10-18T15:47:02+09:00 [인덱싱] INDEXED 11/15 · 처리 중 1 · 대기 3 · 실패 0 (23.4초) +2026-10-18T15:47:05+09:00 [인덱싱] INDEXED 15/15 · 처리 중 0 · 대기 0 · 실패 0 (26.5초) +2026-10-18T15:47:05+09:00 [검색] 통과: 결과 3건, 기대 문서 포함 여부 확인 +2026-10-18T15:47:05+09:00 [RAG] 미검증: search 범위에서는 생성 답변 성공을 주장하지 않습니다. +2026-10-18T15:47:05+09:00 [질문 1] 검색 PASS · 생성 답변 NOT_RUN +2026-10-18T15:47:05+09:00 [검색] 통과: 결과 3건, 기대 문서 포함 여부 확인 +2026-10-18T15:47:05+09:00 [RAG] 미검증: search 범위에서는 생성 답변 성공을 주장하지 않습니다. +2026-10-18T15:47:05+09:00 [질문 2] 검색 PASS · 생성 답변 NOT_RUN +2026-10-18T15:47:06+09:00 [검색] 통과: 결과 3건, 기대 문서 포함 여부 확인 +2026-10-18T15:47:06+09:00 [RAG] 미검증: search 범위에서는 생성 답변 성공을 주장하지 않습니다. +2026-10-18T15:47:06+09:00 [질문 3] 검색 PASS · 생성 답변 NOT_RUN +2026-10-18T15:47:06+09:00 [원본] 문서 3: PASS +2026-10-18T15:47:06+09:00 [원본] 문서 4: PASS +2026-10-18T15:47:06+09:00 [원본] 문서 5: PASS +2026-10-18T15:47:06+09:00 [원본] 문서 6: PASS +2026-10-18T15:47:06+09:00 [원본] 문서 7: PASS +2026-10-18T15:47:06+09:00 [원본] 문서 8: PASS +2026-10-18T15:47:06+09:00 [원본] 문서 9: PASS +2026-10-18T15:47:06+09:00 [원본] 문서 10: PASS +2026-10-18T15:47:06+09:00 [원본] 문서 11: PASS +2026-10-18T15:47:06+09:00 [원본] 문서 12: PASS +2026-10-18T15:47:06+09:00 [원본] 문서 13: PASS +2026-10-18T15:47:06+09:00 [원본] 문서 14: PASS +2026-10-18T15:47:06+09:00 [원본] 문서 15: PASS +2026-10-18T15:47:06+09:00 [원본] 문서 16: PASS +2026-10-18T15:47:06+09:00 [원본] 문서 17: PASS +2026-10-18T15:47:06+09:00 [업로드] PASS · 15/15 +2026-10-18T15:47:06+09:00 [인덱싱] PASS · 15/15 +2026-10-18T15:47:06+09:00 [검색] PASS · 3/3 +2026-10-18T15:47:06+09:00 [원본 해시] PASS · 15/15 +2026-10-18T15:47:06+09:00 [생성 답변·인용] NOT_RUN · 0/0 +2026-10-18T15:47:06+09:00 [문서 ID 재사용] NOT_RUN · 0/0 +2026-10-18T15:47:06+09:00 [최종] 종료 코드 0 diff --git a/docs/test-results/demo-fresh-20261018/runs/39105008958-1/runtime/0b33fe3a31414ff28fc8f089dbf5c65c/verify-fd93b3d25ddc4936bf237fe2d4fa6e42.log b/docs/test-results/demo-fresh-20261018/runs/39105008958-1/runtime/0b33fe3a31414ff28fc8f089dbf5c65c/verify-fd93b3d25ddc4936bf237fe2d4fa6e42.log new file mode 100644 index 00000000..569b6d24 --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39105008958-1/runtime/0b33fe3a31414ff28fc8f089dbf5c65c/verify-fd93b3d25ddc4936bf237fe2d4fa6e42.log @@ -0,0 +1,49 @@ +2026-10-18T15:47:07+09:00 [실행] 20261018T154707361229+0900 · 범위 search +2026-10-18T15:47:07+09:00 [계정] 로그인 완료 +2026-10-18T15:47:07+09:00 [업로드] 1/15 · 문서 3 +2026-10-18T15:47:07+09:00 [업로드] 2/15 · 문서 4 +2026-10-18T15:47:07+09:00 [업로드] 3/15 · 문서 5 +2026-10-18T15:47:07+09:00 [업로드] 4/15 · 문서 6 +2026-10-18T15:47:07+09:00 [업로드] 5/15 · 문서 7 +2026-10-18T15:47:07+09:00 [업로드] 6/15 · 문서 8 +2026-10-18T15:47:07+09:00 [업로드] 7/15 · 문서 9 +2026-10-18T15:47:07+09:00 [업로드] 8/15 · 문서 10 +2026-10-18T15:47:07+09:00 [업로드] 9/15 · 문서 11 +2026-10-18T15:47:07+09:00 [업로드] 10/15 · 문서 12 +2026-10-18T15:47:07+09:00 [업로드] 11/15 · 문서 13 +2026-10-18T15:47:07+09:00 [업로드] 12/15 · 문서 14 +2026-10-18T15:47:07+09:00 [업로드] 13/15 · 문서 15 +2026-10-18T15:47:07+09:00 [업로드] 14/15 · 문서 16 +2026-10-18T15:47:07+09:00 [업로드] 15/15 · 문서 17 +2026-10-18T15:47:07+09:00 [인덱싱] INDEXED 15/15 · 처리 중 0 · 대기 0 · 실패 0 (0.2초) +2026-10-18T15:47:08+09:00 [검색] 통과: 결과 3건, 기대 문서 포함 여부 확인 +2026-10-18T15:47:08+09:00 [RAG] 미검증: search 범위에서는 생성 답변 성공을 주장하지 않습니다. +2026-10-18T15:47:08+09:00 [질문 1] 검색 PASS · 생성 답변 NOT_RUN +2026-10-18T15:47:08+09:00 [검색] 통과: 결과 3건, 기대 문서 포함 여부 확인 +2026-10-18T15:47:08+09:00 [RAG] 미검증: search 범위에서는 생성 답변 성공을 주장하지 않습니다. +2026-10-18T15:47:08+09:00 [질문 2] 검색 PASS · 생성 답변 NOT_RUN +2026-10-18T15:47:08+09:00 [검색] 통과: 결과 3건, 기대 문서 포함 여부 확인 +2026-10-18T15:47:08+09:00 [RAG] 미검증: search 범위에서는 생성 답변 성공을 주장하지 않습니다. +2026-10-18T15:47:08+09:00 [질문 3] 검색 PASS · 생성 답변 NOT_RUN +2026-10-18T15:47:08+09:00 [원본] 문서 3: PASS +2026-10-18T15:47:08+09:00 [원본] 문서 4: PASS +2026-10-18T15:47:08+09:00 [원본] 문서 5: PASS +2026-10-18T15:47:08+09:00 [원본] 문서 6: PASS +2026-10-18T15:47:08+09:00 [원본] 문서 7: PASS +2026-10-18T15:47:08+09:00 [원본] 문서 8: PASS +2026-10-18T15:47:08+09:00 [원본] 문서 9: PASS +2026-10-18T15:47:08+09:00 [원본] 문서 10: PASS +2026-10-18T15:47:08+09:00 [원본] 문서 11: PASS +2026-10-18T15:47:08+09:00 [원본] 문서 12: PASS +2026-10-18T15:47:08+09:00 [원본] 문서 13: PASS +2026-10-18T15:47:08+09:00 [원본] 문서 14: PASS +2026-10-18T15:47:08+09:00 [원본] 문서 15: PASS +2026-10-18T15:47:08+09:00 [원본] 문서 16: PASS +2026-10-18T15:47:08+09:00 [원본] 문서 17: PASS +2026-10-18T15:47:08+09:00 [업로드] PASS · 15/15 +2026-10-18T15:47:08+09:00 [인덱싱] PASS · 15/15 +2026-10-18T15:47:08+09:00 [검색] PASS · 3/3 +2026-10-18T15:47:08+09:00 [원본 해시] PASS · 15/15 +2026-10-18T15:47:08+09:00 [생성 답변·인용] NOT_RUN · 0/0 +2026-10-18T15:47:08+09:00 [문서 ID 재사용] PASS · 15/15 +2026-10-18T15:47:08+09:00 [최종] 종료 코드 0 diff --git a/docs/test-results/demo-fresh-20261018/runs/39105008958-1/summary.json b/docs/test-results/demo-fresh-20261018/runs/39105008958-1/summary.json new file mode 100644 index 00000000..c010dbd3 --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39105008958-1/summary.json @@ -0,0 +1,117 @@ +{ + "runId": "39105008958-1", + "revision": "148ae4c04dd1301094cdb0c67fa1086293f217bf", + "environment": "GitHub hosted Ubuntu 24.04 · actual PostgreSQL/Valkey/BGE-M3 · no Ollama", + "results": [ + { + "id": "preflight", + "purpose": "독립 실행기의 새 환경 확인", + "timestamp": "2026-10-18T15:43:13+09:00", + "verdict": "PASS", + "existingContainers": 0, + "existingImageCount": 6, + "existingVolumes": 0, + "environmentFilesInitiallyPresent": 0, + "workload": { + "documents": 15, + "searchQuestions": 3, + "browserSessions": 1 + } + }, + { + "id": "concurrent-start", + "purpose": "진행 중 start의 잠금으로 두 번째 start 거부", + "timestamp": "2026-10-18T15:43:17+09:00", + "verdict": "PASS", + "exitCode": 1, + "expectedExitCode": 1, + "elapsedSeconds": 0.114, + "log": "concurrent-start.log" + }, + { + "id": "cold-start", + "purpose": "모델·의존성 최초 준비를 포함한 전체 기동", + "timestamp": "2026-10-18T15:46:36+09:00", + "verdict": "PASS", + "exitCode": 0, + "expectedExitCode": 0, + "elapsedSeconds": 203.438, + "log": "cold-start.log" + }, + { + "id": "verify-first", + "purpose": "실제 모델 인덱싱·검색·프록시·원본 대조", + "timestamp": "2026-10-18T15:47:06+09:00", + "verdict": "PASS", + "exitCode": 0, + "expectedExitCode": 0, + "elapsedSeconds": 29.69, + "log": "verify-first.log" + }, + { + "id": "first-result", + "purpose": "예제 필수 단계 수와 이전 원장 문서 ID 검사", + "timestamp": "2026-10-18T15:47:06+09:00", + "verdict": "PASS", + "counts": { + "upload": 15, + "indexing": 15, + "search": 3, + "download": 15 + }, + "rag": "NOT_RUN" + }, + { + "id": "verify-replay", + "purpose": "같은 계정 재실행과 문서 ID 재사용", + "timestamp": "2026-10-18T15:47:08+09:00", + "verdict": "PASS", + "exitCode": 0, + "expectedExitCode": 0, + "elapsedSeconds": 2.475, + "log": "verify-replay.log" + }, + { + "id": "replay-result", + "purpose": "예제 필수 단계 수와 이전 원장 문서 ID 검사", + "timestamp": "2026-10-18T15:47:08+09:00", + "verdict": "PASS", + "counts": { + "upload": 15, + "indexing": 15, + "search": 3, + "download": 15, + "replay": 15 + }, + "rag": "NOT_RUN" + }, + { + "id": "browser", + "purpose": "실제 Chromium 로그인·질문 전송·원본 다운로드 해시", + "timestamp": "2026-10-18T15:47:55+09:00", + "verdict": "FAIL", + "exitCode": 1, + "expectedExitCode": 0, + "elapsedSeconds": 47.036, + "log": "browser.log" + }, + { + "id": "incomplete", + "purpose": "현재 회차의 완료 여부", + "timestamp": "2026-10-18T15:47:55+09:00", + "verdict": "FAIL", + "at": "browser", + "errorType": "RuntimeError" + }, + { + "id": "always-cleanup", + "purpose": "시험 중단·완료 후 소유 자원 종료", + "timestamp": "2026-10-18T15:47:58+09:00", + "verdict": "PASS", + "exitCode": 0, + "expectedExitCode": 0, + "elapsedSeconds": 2.818, + "log": "always-cleanup.log" + } + ] +} \ No newline at end of file diff --git a/docs/test-results/demo-fresh-20261018/runs/39105008958-1/verify-first.log b/docs/test-results/demo-fresh-20261018/runs/39105008958-1/verify-first.log new file mode 100644 index 00000000..fafd456c --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39105008958-1/verify-first.log @@ -0,0 +1,10 @@ +실행 ID: 39105008958-1/verify-first +목적: 실제 모델 인덱싱·검색·프록시·원본 대조 +시작: 2026-10-18T15:46:36+09:00 +장소: 독립 GitHub hosted 실행기 +기대 종료 코드: 0 +절차: ./scripts/demo.py verify --timeout 900 +2026-10-18T15:47:06+09:00 [검증 통과] 업로드·인덱싱·검색·원본 검사 완료. 기록: .demo/reports/bd6f8ca5087b4906bfc2ce5fa89da55b/summary.json +종료: 2026-10-18T15:47:06+09:00 +실제 종료 코드: 0 +소요 시간: 29.69초 diff --git a/docs/test-results/demo-fresh-20261018/runs/39105008958-1/verify-replay.log b/docs/test-results/demo-fresh-20261018/runs/39105008958-1/verify-replay.log new file mode 100644 index 00000000..2392f4c8 --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39105008958-1/verify-replay.log @@ -0,0 +1,10 @@ +실행 ID: 39105008958-1/verify-replay +목적: 같은 계정 재실행과 문서 ID 재사용 +시작: 2026-10-18T15:47:06+09:00 +장소: 독립 GitHub hosted 실행기 +기대 종료 코드: 0 +절차: ./scripts/demo.py verify --timeout 900 +2026-10-18T15:47:08+09:00 [검증 통과] 업로드·인덱싱·검색·원본 검사 완료. 기록: .demo/reports/f57bbd0a0643491c89e2e7366b4e8fdb/summary.json +종료: 2026-10-18T15:47:08+09:00 +실제 종료 코드: 0 +소요 시간: 2.475초 diff --git a/docs/test-results/demo-fresh-20261018/runs/39105569049-1/always-cleanup.log b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/always-cleanup.log new file mode 100644 index 00000000..11bd1210 --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/always-cleanup.log @@ -0,0 +1,10 @@ +실행 ID: 39105569049-1/always-cleanup +목적: 시험 중단·완료 후 소유 자원 종료 +시작: 2026-10-18T15:57:30+09:00 +장소: 독립 GitHub hosted 실행기 +기대 종료 코드: 0 +절차: ./scripts/demo.py stop +2026-10-18T15:57:30+09:00 [종료] 이미 종료된 세션입니다. +종료: 2026-10-18T15:57:30+09:00 +실제 종료 코드: 0 +소요 시간: 0.064초 diff --git a/docs/test-results/demo-fresh-20261018/runs/39105569049-1/browser.log b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/browser.log new file mode 100644 index 00000000..b9fce54a --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/browser.log @@ -0,0 +1,10 @@ +실행 ID: 39105569049-1/browser +목적: 실제 Chromium 로그인·질문 전송·원본 다운로드 해시 +시작: 2026-10-18T15:56:30+09:00 +장소: 독립 GitHub hosted 실행기 +기대 종료 코드: 0 +절차: node scripts/demo/browser_smoke.cjs <실행기 작업공간>/.demo/reproduction/39105569049-1/browser +2026-10-18T15:56:33+09:00 {"login":"PASS","search":"PASS","download":"PASS","downloadedBytes":52683} +종료: 2026-10-18T15:56:34+09:00 +실제 종료 코드: 0 +소요 시간: 3.782초 diff --git a/docs/test-results/demo-fresh-20261018/runs/39105569049-1/browser/search.png b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/browser/search.png new file mode 100644 index 0000000000000000000000000000000000000000..e1fa0150359d7d914686e925f4cf1e21ce2bf627 GIT binary patch literal 162566 zcmc$FXIqn9ur3IKNE1<d5l~Q&-fI*TP@0O;Arz^hSLq;4M2aBNn^ZwMBmsn=bm=uf z2%$&~ozN0OPVn9P2b?eG<V)6->&eWlnOU=D?wKd{g{}teb++pyBqX%YG@ra8A-PIi zUcG(o3h}Em2ls)5<Oa#JCy!sh%icm#JxV#j1NPj81W0cVJ^6cs;WfFQk|5WSgHSVg z#J9_r-52%-hbTt}Y@?iH4b4v~hAL-wWPM<7TGX1sV_E^<U6eOTkA71>xym5_<aa80 zZ_YVPPvlBu(w#d!IBB~S0li!$Dm|{;lfyF=lqhg!TAL*L6E<M7ciR0@91;>W`m}%F zBqTJX*V_MEiru|KLiTUjo)ktx^WTqZSFVWtx1yo?|M+0ge`1sDWCO-MD~${-oS+`& zr3RT)weC<3g`EDy8(08VwAQ^+-^`7Y;;>Nt+BciXQNF9Oj8Dn2v<Y>!86-5UM@QwK zYZu8cx6{toCEPJo*?2Flkwat3meAjA3W2yBj)a=InsT$T3Iv_Q-m7-J2-sr25oYD^ zn1q7(pD>Z&lgfY-7~03g3)Bj4nXN{gMe*teM0=Zj<PKM)UE}#rQ6`*NlbpuFugjYC zQ_riTmIs=_v(-m15&i6E(}U*}tt%aVsr-yhAUcUX&glR2EEe{ClC4tRO^QW_Uy}9r zJ0%fdJ9BK*&Diw0=u9WI<Ej8%fyTM1+3G@k{gH2JBM@$~Z<trEAt1(MrF6xQ?mru~ zhrN}^ye0iSn&H}M&}Yrw6}k-uivhd(J_ni2_{ld%68?7*Q90R;wMl;9$xWZtDU&LY zPug<Xj_1!xeDjc-*bNiPkWE7#a9oTc_WZEg@W;E{`K11iXnJm$kaH;9B5-DSI7SII z_HE|pnHws|3;N@S^*}oG%NIx3X_sC{$4b?qS!;mH&RjzteoKR0=Dgb{z<Md0f$!V# zPB5%KDo-W2s`jOAtx*D};{Ij@jGv70e<W{L8+S9WoE-*g3+0hJG^O6G<Gvc-*4QYR z8Q$Wdp5I{9a~!Z@(%%?8sauUZsyaqz!_J!v4x)Jk)fcQd9h`E+cszFJ-B7_N9hq!h zRpzF#@C!67<Ou24L`Aiqk&!qxH5GcgXiu-)P-IR*M@1E~Q4G{g7pv+ocA3S%Qv`-* zUB^2ER|ldb?T3bQ6zieT37LJ|?(q59Fk)624To9y!_E7OV5<LIfrRCq!#48<T$n3S zfJst%GJcVPr&9x7<rKKtj2d$4TCp`JU-<hs76fnG8`G-bdUxj#T}?mkiQbx#RJk~f z<5aAxGHa6YuwJSkR*`m_f2go#pSK-~+csYtW<EGO-`dI%78aJmkA-FCw03~+R~pz$ zWH{eLJ&ju($GSg#dRu2gYG&;EUhv7Fkf315N-Ckrv-t0*2KN?}-@Do9VWyJ5Qmb(4 z^AAT4BhWOowDCSZv<=$Z*#}vupSl9cAv8diOJ5BmRj-^9`$Vz<k(45fd!mYcz`$+( zV1faJpE_c*OyFzr<cwgSsUigrcWeZOh?Fj$-?pW2o4R|aov;`a`e-`3XYKG%w94$P zZqxyb-vw5cmtV{b=T=r#6*QfEFSW?GorePngCB2aU>Y4PiVuf#m61(1K7ZIhf%vuf z{MF<d>>gICpF4UpRfT+ae%iOvAF8bn3U19>Xtw;d#cXlf^?~8DXxr%~jL_PGEM$s% z%DZ2BHg~qX21f;+sb2lJ3Cpli@H+VwQqsir(!Zb>Blt(3?TVIpvlDbbQC#&UJ`;E` z;Q~g0e4KK2ynO<JA(OHK%fBu0=bZi#8dlzG4+hT+Wy|Xkisdsda1a<Cglq<kvcvG( zhu^<bug7=AF^`Rj*IJM{XXSOn83l$$uIwHT6Mj2Ljq!Tf3*BIqSGs3w5^@pcJHDaV z?0-15IvDDu`~CaNqzhVs_<tdRf`!fVT@XiK;P2%_=a(Y_I)aitE6u>+e@8m)(6pM> zKqjEkKu2dVFX-T2tGLhR6Zl3pSlOWoe1%1lKj9*9Z$TWp8$n-EWqkMpo&ET6__oD+ z3d{N?bZ!U8$;olEr0ef!p+;lieG%8c%ZUK(A1f>4rNg7_fQx<ljVEJ?1y^WB4lj<X z6Yt&(RmsyEE`C;=yfH37LGe7u<o9F+ocelI`XCef<`sTz7Is$FdDmRgHaW47^Xc?- zO?a%lJW4xDMx0l5enm@47IeG|IN0lm)8zhUFT}{$Lr(Erc|c9iB7ud0m5J#&amV?L z{3$bP^m=xTaOc$w;Vl|7x}5RO71}0-<n^`jN{@m7;_h`pK;z>x<@_F17!Fy|8VGCk zC`|t9Vn3L<v$h7Y>M%70pH~(Xc=RMZ1OUV<d&bPL07Csr=*5~&YI&?~o~)?t@fNGs z>VRATrc+<9Rm^oRJvkX&RFUYgI^ZbPa<NO;c_<_#%QE++1pecU8!Kt`8@j*DcsKc& zvO(%5Z11<|wLr@m)%u2QUqB2A&4|$IV2hBHRQkMJAb4*%@x<=!`JFrMsQxu3CJSY+ z63f11e{U+xfSIxJ%3#*V1k%&0mJ)JuZ-QXl*w{gO`ZZDeTydNIc=p?oF5xMXcAxNn zQT4+Ys}c0aO8cE-I$0rb*9-HOy4xQW*36r;F1kcRo=>N|hfUWkLJ|QNNiGUV(a?)C zIN=DGII5}b*9O3ENHU9toNU#@f-$3%E;`;s)wT;TQ47;iKU|%1*0!mc(bliY7?y=j z(Gh<7n>udLh5}$CHAyXN14ZF~WLnG0PCF6-6_u5VtPDpf+=Le*^nA|qGQsD4%=QPO z?s9W855{+3c`jaBeEP>4d4{iF)3NiH^0>^;-C~mqJ(?5h#FmE6L2Fq7L63N;^8E~z z>#>wtJFNuDlMw8NAuu%1=>DzfNb-C93Bhu~&w5xw@d0Of^V84sp!-Lt<|@HfabAT3 zjYNQw^^@0&#X_c#*2B4ag0e!$t&Nu!2`7PY4p>jFWg<pO_$z<ohF$Ug@(Ekx*6kjP zBZh5OVV03RtB$u7hJeEXNul*`CEBbo7X-H>CU_+kE}*MD2i=D(E_z}Qj}cj@kU)69 zD8Zs)GWcvIblr=vp9uT8-+fF*nGkd|Ns4VTZ9DIgQXOCJ8?pdx&oWC$82r4zX2mfL zLhyBF+tamOM>_~N`^m{k#Wdf8w-=xJPzYCq2~ZKCI-C;-$86|p!X`>djjHQ|>J39% zr@fb(pYg8DNt?<MRCu_VMceab{5_W{O&jfpEixtTGcDZYLe9NiT*#34cs6NX`HbyX ziMb8^gUaI*6WUsJR8$_4cG`c2MSr5J`oQPfe*SzK>Z9BNEp>HR;-zzji=(9=L(=Ce zn_5<o2;DmBNyzyo`Jsz<Hw*hE_02%0^kkO&;ejq<O!R2K2RIV!k)|gf+Lm;2REHE1 zY~DQ2dj2CvT+VGgW_@EogR2Q;!075YI_>+NhVL%XhZYo59y`=RV~wP4j>nv;wxT<G zdl%!Fh2;XypG<|S&`{BGDe@=e!sahR3B>TT(-ycEe7NlwdWKFw;g6pdyhy^2+WY&L z?ijnD)L2<DQ;UwTO~GY<o~1z?DFV-HW3na&Cnu$cx`xs}bKI8CrdVAsTlALSo{Ho` zJS5B{ikjUo;)!Rt&J88B`AUuyUQ<XkLB2LIVPa=rHk)jqd<8he^oQEp5{^^Xp1B<y zHv<El4P490#qQpX<>!yPJC;NUtRF(`hb!*4lbyUV1bX9cC|i63Z1by}F7RTP6{4c2 zeb5)&ct_b%w6){Rlz&?HMt@o&BM@p%X!5d8CjF*Iwud8(<pOL(f5=W4AFr-=hP*uv z;@J3oM<Wgbuc|E-*2|VF9p4B&?dZZhMD}p+7BZxD!`)!YObp@=rH@=Q@n4=d{<18R z7ZVhm+y1tRW@i@Brn+vu%uCx2j-{ku<-ZsI>^Ykbs0(+(y>FN5aLdhcl!B5nK=LqG zIgl#rujAjg(>?)U+xda0@)p$P0#j<}B3oWwzBU|s`ioK@Ib?@35&?=NBqY>41;&w) z679yFp`%nUjW7SQT76treXG{PPy4<5v*ssky~XsStk9oRUMnHi9-arC#3*NBg2xfF znh}zq1B`Ki1U`14SV|+dYl(ov!9K=SkG>Mtf$5j(*4YYYx^2J&bXU+v*wU|ryLazG zkxr3O<N|sbkI2LZA+GS0HeP&_vANeK##om0)OxX#D)wsB)3u@73S?sDZ?Ipqo*L3| z9t&5V{psHianVq{Z5y3PD8!_dg`T}Ka{lRle)r|#Rdd{#Fh&M~JZ&eN(ATpa3x%Dn zwnRq03y7F{hjYn*N3^wg&pY!EVbI>EplStD?g{UEyUOw*Tc5-+_KVnEg<WYKzwOom zs;QZ7k&rV*>G1FlR%W;P9~pAu;q%4Cv&7raz+nEHKeVdKW40j{JmXN;XbV`=_uZMp zA0u`NYk)v!KQ-0&&KvMpk#LID&L_UIPnH|fnAyh<+`KXFZmUJ%=k>$K3?OP&lTu+J zq0*~XOF6T%Si;3FFp*srOH603(R1sCO0iWQj%LZaxgd_|Xct3q2*3s_DZ(@%5mo_( zHuQ(l5)H+f!6BRnAQ%O&MuMN&mH;pmtq4~NL)C&8f~oi4=tR1tm#pqX!6h}nrqmMD zi<_So7Wa^CzZX#k=}q&cEX@5JugEpV_X8_ER4^;^ZlSoA_{EODlJ>fXHDD_%9?Z(D zj<fUYF}_IgLXFY&z{RCv-$VoCPg_tjGEQzMz-JX)y>fG{_IgZ%RF>%9dJQ=~>nPV% zzos2{F<2=K8Mupto$2f{Ee5_py$M5Jl%UZA3YAd|$Q^@xtZOh<ANaai`?IEMkyUa{ znYbVFu)X7?wDZ}s-IwP5_|>cqR1Va0d-mwtAO2=$subG9PaN{DJ3lqJ+T7|s@rX5y z)(O*Afe}O0=09XVc>^@{M4Ek30=KR^D3y$g3x1?6>rWG{{Qe!cnpFtaI1939i83XV z?8#thGOKRWfma(6)AFe-`3<m+p*lZxjx-3n)J3gwYDq7ArA5YZXW#^tcQ#oa!p9`J z+j<fTuS%Wazc}qVu3~VVD?8oL3zc>pI|ZCu9pO(1f7bwnBfU^8OU^|e;e2}~EmZIF z3iTV(3KeBuH!D@#HJQ6=Y0_K#*!xps1TZsFhrho0`?H%jMn=lM>A$~nFU0!uqdR5Q zZtlSbNk<38(b3(V9)<RU*<W$N=ra!!-V(~Ym{0QYb>iYLix@E^5p8BIvEbZDjYO`= zxo>9&6>hgMckVun)NL{eitly~=xul?8KGoVgZy7C0K-oY$0yUl_Z4vdVD1mb^&a+z zEmL2q=H!D7NlRepq!+THhF%qeO!==&L~^A=@J(%H?cR!&cP2Nnf5z&(G}<n3&Gu;n zL#Ie)xKEMnL@?n5_|W2DYg1O`;-L4b4F0CC=qpoW-<{6I6VxgGKpJT1T}vMQIlc)r zw*D+deK=j})yEp8^)Fuy%vyYH{(N~75P0f-c6Rs_Lm?c=#0*UQL{sXK_VtloP91%@ zomh<vZ*ocs9Vhl;bMlp`^t4Q^Brn7An!vY4+uyFoI`Q%55W4)(X$O9K`ZNa7AYzix zso>6m1dfNg=+F7yTz_qB-0C#BiNOf)@<!X*?{cUFrF%JhH{URg!4WfVb?lli?pSAk zzm{+k8j3we@NoxY<gEgapEJcixh&iRfN|>juV0_fQ|67qw#G~AX|qc2>6O?cPPS&W zN<$Bi7W4Dl-+@H+iHAiw7<=BQf98!1C)+wQ7%$Z+`F`3;uTsky3B68D74mSI2LRZI zP$GdDPni$4A*fWd78RGxzrOT2uy%uBAnKG!2Zrf3?rE?8{JA6aXh5GG2viI<af389 zzAMKols15Ez~q|m82RfpL}jbk6{bEaqWRcd=U+oxkq9h?ZQ%uL+See2&JV-%Z#Ep2 z(kf$Io{qPao#jrt8ZXSa)tbd5?7l>nf%*kOoGBRFUD)1_1ZM&s&!EgEHfc||AQ-fH zj7qy}^2YQ>Dm=AqHQAly^;Wp)v%8sda+BpP9rwk&0!{LR`<e$MYH{cInVn4gfpqWl z(+zq+(dRJ<JMAAX<b_ex_A4tZ#L_oSSa=o+O`oYR<>yaex^~JeVpi~L+8L}_OzO3! zd$MOj%~X`F<exjFowuR`8@YX3wpAN8I4B%=!gXiLB4;Dfg;)96PdC)#wInp>s1G#Y zXqG<2eK$q#V*O9*P3&^ehY}!YG^@p?hbdqPIx-tafj>N(G7Zfy4R@p{@v*5i(E4}w zII3n0mN~OJvlWrplP~i=LkkL_wkv}KWHVn-`oqJX#DqpV9-*|DsvvCN7QL5ljta9R z@8*ns?l%GS21bM1KdEOW<h(BpBX-CCdf<kErsiJ#@Q>-7oI?nVpwCa8CC4-B(}yvZ zEYXwq#02{2*B5O+V!>F3wUxp0P`{(RLTmnV!DH6Ldm6_iOdhrMXLbX6FaG}S(mFx* z_!h1RFd?RDAU>lp^)^3&rWf&SJiSItQZk>ZlH9A!CxH(}JQQF%@S|qy{MeH?QM$pr zP{W|}4{^-Ze^+w)dyTfx&;n$~OBtDzwu8l%*`IvdAY-kujKHro@E%mN<Hb1kSm>}b zG){ouFK5g=^AY8_rPp!RiK)ho$v44-i|)zlwV5n+jd{pX1fgj-WV*WIbO#TB;m?{t zvO*xo*SDje(s9e4?AwQ&Jwh<`Z)yR5;$Z}ZpbZoAdpZrtNs%6mJDGu~Wq|puo*R=h zFgp>P-)G_V=jwp-0nt2vrF(zQoXwHNyI!zr&Wm0?{o<{tHoem7mNH0XcS6q*H;gd< zd5-bvU&<_0u=){ukJ`!Z>B3~oHmFSGY!yhrRaYlwSEeLrHJvQ>aOVZBOctB!)*MDD zo%<eh@9xBH+w6U>HjMv7E1<?syEZ!7p%KqEx{^&e8}1SPxz`d#LU^FhKV32heQ9i9 zaIp{(Hy;vMA7hnt--NWp5xk5c#sEDcM$_r5s1)=Q0XK*25N4uvF2O&DpzHnjYO}y) zdl|2I3YqHWZSuJJRcacuof~X7pamAUrGHnXT<F5E#!dAm{T|=vJT*bm>GL__h}{?f z*pI*5u{Qg{;_!&sss8);nS6rGB-mgaba6v9`lqD*^}|DI+q$I8%;uT;l%9BW93w|j zqENe)r)<}pLKI$W`o(TZm)8YVge>W_GXGLl-o-EzvOdGjXxVmU@g&g<hWq@PCccq? z9Xx;^I+@zrvI}$j6B0Gr0QI&#yE~9#BlAgkH2`;xv#l&P^9de}?RX0B{TsvF)wkIe zO7IHA-V+BPu@KbUq|9fDg5{kMOS7KFS7zs^+x>A{1xoGsOh~ZfQBwy&!S8fAlBK() zTq4Z=a22_-l6?so;M3ISQ23pvh%bd2dP>;!6k^i(O7Kl?9!Mf1&)?3!MdjwVLV=d! zy)AGd!MJ`$HY;WXWk&>na#cGjE3auU@7U;(`v!Sy7Nd6dgOJtrUjq-`^=~NYpwH)q z*6h*UbH2gPQxyL$>m4f}h$+g%JfHk>f}eSMGT7JOUtMLV|I*ocqUhQ3#aVTtb7AC& znS#*0vqMoj78-StG(|g1ugCJzv&84Rx<z??-}RZ-hH_+logZ!p1tZCumpe@~NRH{< z$GP%Xr(8m`?k(@Mx*ZTK8klsC(h|&Gj*^_?5u%FY)pzZ7=ERd{<51bqzM)sxqur@b zdei%ba_W8?cvQ7-3DByys7b%)*-<K7B)d^r-)E(FCIA<Acc3LS8-8Sj*U1dISKH^c z%f>f8DUR{y^o(5Uor33xx|pk#9AISE{)`++VrsXxIJZj%G9)`POi%&n&~-ig;o`ss zBABAsqXrSr8buQ!@<*aehw&7xxL+~vf@ok%SBIBR0;E;kTh8QN*ZeA)jK@dHie#^x z<Js8X@bEld8v<r3+6QRGmDC+ft&j3avu(#8WZCp|a>)lI>&mjl+aFN74AW9mbKPcl z$<qBfK9c`hRvLi05on%eG3?4kN_w&3=pr&?maU-o(5?<}Ufx3{W~DL1p%JQy+C*G; zPtO8^>#uO|pI{sy;>n9v5+)b6ZWT`G*UinK-CfZ-W&VsNkCQwu)-I#!Rs7Rcc0<S2 z*LkO>DO&XB0TZc-C`B9k?Aj9-<bDe-J3h<DiL=%Cr6IcPjux**^o(i#x}ZvkOz<FU zT9LweDPagZXzt>xW_9xOC#au(d8>as^(Wjl6|Ece*>om^7Tp$j)OULqb(e&U9NA=O zV6e8D>zSje)ne{@{%Ba@o7Xj>+wCm6KU7t>m+=_1%boenln3Q7IhFSCFT)3P%@gW- zRI-skfw@T^Sk+;mdi{E1re`z*5vp=FWM_{r={KyBmMW(Sh{(%JuTd`FbaL8sCNmgJ zR~bDs%Ts4vb#J1jEiYMR%7nNu2euTCZ|JBqvOdJhkkBvtWS2QNu+TiYbH`d-W2<Mh zq2a*|*7%}=p_?4DUK$<cXaSKKA&8YESGwXKCN;-`)9^k5sO9(Z>Wr3;;OZaap0ejD zTxT1|mm<s*lF114GZ03P5co1X=4n~Eh&iYZ`DMUJs-rEsASG1HZ34Fo<Rc;L$W<or zBRw(e_LupK($c;|r?i*ihVa*J^Sc(<GiZX;Myu;o2r}^mv2pH7to%2IkI=V0jmzq` z@AQqn>=4jlgHKEZ9XVy7F<G)8-E1Yd9G;+4cmI~FJM;LivEmcIW6#Io$yCcdJ4jrP zL4_&w&OKgL-87g$%ywwt6U^QN{p9ud^ZKi{wyEPKx_2U;qG%(YOt)FYN{tXJuMl+} z?bX%M*;#}FD!)Rw!W&aAOiP`5v-OY1y~@{9Y__b=%51Ljw(3^GH(WQj>aRXgr+~&* zjE#u(+@IS789Hqbrn7E9H7;=9dqS}hqd79Mba5=VH=0_df_>K5q7@WnEsF|n@>~|M zBn#B1{Cppqb4R}2!+-gZSoAn3^R-LmXm+Dn&pTM>l=h&!K}|3h_nKeeVrj+4KbyV1 zR+#RnIKv4YXMtZ0Y(K`?9Y%zIzP`yd6nz6wt0`iS!#Ac259$mKI*YaG=1sf4+ztpS zkajY4dx+U0$?KWo?}?8K#KgoAi}Sug8=Od^ba)8>jM37`$i}SGr@c0q=Z$z;O}_Az zslU%`xo6iA;^um`s?};TiCysyWp$75+Aqtx>4B_7G&$7l;7$N4YtSUWxjFGy>i2y* zHB(i$IXH|;tMq4fud&7^Sw%}8&twV;WzBu!c}PsLzZ6nejNx~4%IfsEAnR+ekj0Fi zQr}q=2jj>a(u}rdFIsdq^ELEqA1Ckkm)$~=$Pb;Wz}aTHr&6jPx>V8<c?++)bmO*v zd_^C<gK@5LGc7*&ny2K$BPcN^vlh8;;~b$mO2WZ$x46r~v^9;%u`6V&x5HYz-eEL* z)W&*axJ=GBEOBqq<y9{cr>XLbP`gr5KJAg^m|qN`r6`=qjM@0@Z)Ra%areevlalM3 z7}7k-vRwLhb+R*b$yfS|V)>Bi7oJ@WvKo+;Bc{U93y1WckeWFQ3bTrJ*Q-W`M|c#x z+SfvsU4D1JiH~)omvwmynE=nlo%c$cg5LnKtB3W+@8p9Hpf4Q%ruTh5Udst208wwC z>XwM@53Gs9?6!HY2z?dogk78<=LXf-hi3^6l`0TIWH2pyD8!#-JMYqM!jd&RP2z{% zvMCwb9Y4hOtv6svVyAo7jLB-0#{*vC8ZE}rYL(LgrYb+i%ZPc!gU_dl9ITW31z{wx z#g3JsJpRVu)9HhQtoZoK;LWj?A}?YwAQxD*N4(C)rL@KybxUyvaS>9wp~o|j@sis3 zY!{vUjp2e0REvtZ)mE8S+Q+{9kwZ8MbGGEfYlvfFfm1`af@`|JY@m4~;(ASesSqSl z&?%^#L^k-aTU6rW-o(bHVBDs;Vqw5(>YFJZU$xzUpqIbXcI)w$ldF{$nP*WT(UC1% zNTQOGu4?*z;`#lvR`{?{j~=l{n>?Pfs++^{;N=^Orq}F;15<{(DGW16SkTIToX|W3 z{JVNEa5*++K8Z$;rHkp^WU8SX-;ZeBHo(1u{%RrfsgYS~Z{>fdttPpT4DB@8aBE<B z{~A<`RmY^#f{W`(P!Gj|MavFcrZnhXDXf}^@UOXq0>txBY*XbGAX<uuN0z(gg7=|5 z=@lkV)wJTKd=cvpm70lFUK@duI@^!z$|=24&4^Dl0lPtOzN_L6!@q1&!sJHP_Y$>4 zYP43B;rgt$k0}fZTtU;cTe&XRy6NN}rP{6uB6M$dE4A(G!J1@$Pt_R(!1Y6eR+@u3 zEPZA^i<(#QCARLKuyfTOzv%iDc<yIfB~P(D3D3hFqrJfXzg0Qi#4$U}1pC4rSs1QU z{OxC~-Ds1qC?^~LQPW10^G-Ps5VU`$_hZeC19bn{2dj^NoTx5O70Kehzm=z>jt^hQ zHHWrueu`*D&<C-sK`E@sL#CYhJKRhYt$KVO-yGf*Ef}QM#;N4BvhPBc&#gQ|=2*gI zLDm&yiFsmEzJA2=7*hXKgFcb-wy-z(vidy=-EGxj%7ykv5W_PC-l{p|o3?}x=(ccg zos&%8Yxh1E6spI=(7BXcMC<5oVw2v^=@A<2#}<jrm7u?KUG<8A$f5tm0@hqNe@E-( zeo^w@`H9=j0SwJJ=f*<a@QQ&u^5=uZq<m^-B01^h=Yr46b_t#qT|%6Pz1=@p0q+RI zp~1Vo@@enu#qL@iOtf%^{M`>MRj(D@wpn)IU%EI#+_Pc_68;V}n%tCsa5f(kiaq@+ zR4syh71tkj=_u_V?SAfkxY1}*IJqwE9JkJc6lO~7S)o2{xXZ;M$b-E1Rt|tQ9wA)R zP7Q>7RTi7CMxQIGto_o!U%kRzHBWbaYpHcw{pmqS$ijX0tY?YejQy5(XGQh5di-4^ z1I;VcZH#e2`nc4EB!Fw`^w8*!5OtR=G4&HS3;Jtxzicl?$Trb$_-s1<8S9Zi0+;i} zIp3Qs6A`%WPhb`EG9H{k#P=_F_a|Ch-5$Mxx+tTxdG8Jk?hR!!QOCDMPE+DsPRhDe zH$j|u%ckvXCgEt@zXOmjI$*p&=uN!hC_Sx{H%#maB0@rVZ+fK_;rQ^!l*-&;8&sbc zUg+6y`gpR|lxmoo5R(()=MgHMST@W|TGbX_MRM)J<q02*euXLvKg(X9EQXCB0xsAr zt!ZnII2AzO-psAD$gsrFE~ln7!c+=s6LhUWFe=7V=3!Pvk)(g*NHD1jFXlf2qbCHl zZSP^xa2nYv)-Un=qPU>16rP0|2Zc7LFU8*{jqo7ljYG#3NsWeDJ--JRt^{br`@JKV zg)Mt=m_9wA`Nhn=;k;e!VmHXF{-nUo?;r7Xkd=f*y0(%}$*|gWHNu1tsS&@QSF)O0 zgZ-?d<kdhgZ@V<Mnn#bi;~~|tFEpple-WO4-k;KuOmpw%-&gPC#s4>2(Z0QzN}}Yi z09aGYDc;^|<x`*a`XTk<aDhHU-#_|~XT4H3yK=H(V6K>0S>xyWJb?YdYpKta|6~Zu zy=2R~GL(Mr^ddc2j*lzxq1i+2>=CSq*Dk{t_x}uUj2H%la9Ea>U)MMOZY=YOk)iAG zP)*ceMAVYQ@{&#%PlcgiyNuMyw?n~ybV=3)M()Y}xBP!Ke$p;LqNe@Emh+zjg%wbe zvP5%aD5d`sqJ1QSf8;-L{x61QFz%uwOw^?7#vFA2h>}2qm2ZSG1QZxHxmsT9_(yNV z1xeG+rCMElBp!KtT?S{+>B#QS5dEJQBZBDKT??zFF$&Aqdd7cL-T+3+C1%C&A)B3_ zFhQ(X#Q*idNq+uSBiTu}H}@3nv879}Ve46XKvuXS1%<PD3m+3qZA5x%r5m69{_yJ` z$Ax=tWHq2<my|$r)oL3iYMuL>c~=({HPjr&_-XvKe|uk-_;2v%-Rc_>*Q}6Ot=6>V z`-gP}5S_WF$5A_V(CSSSh!R~-ZX~C)Rf1Mr;9JXog!l5}NVeMc&}_lxUe#T;x(O`; zSKf^s3j*tlb@bPL>*cL$d=BdY41)##cGpg(M+!~BXw7N>shhk<jY5!S#;)ZLWo5s= z#6@xOefH!n^k*0)9<m+ieh^$|j4NWMG8uVil!NUbH>G7_$U&-%6wK5s8%-zIDASuh z^tpaW+0r2Ue2_dpE&jub3RwG=;Iau>mGJ(ob&c{t^XmMNgnMwSpu}_Ce>5!DHxx)( z^k7WBzhlihh==Sb;7d?J;<c!3O3BFaots9Yr2JeGdoSqPzdjDQszR9>eEB!#R*wnU z^+f2LY&aNdF{mX+Y+g7YY7?^jCTi><2_zVv0PsqopN~3OhP+{WZG(l+&OrMRcq9VK zgRvZhm~S4$^YIXi$#zRmjRY(Oo`D&%d{=J+Zk=aRAr^Y}U`%w5)f-W0n%{UL6lg;p zC%g*=4-33?KYHTo@i?FH^b1i2%X~DUN0JQxAr8I&5(M?rflY;K^J^W$8Yz@Xp?vG$ zv{o%Gh?>TjPhb0wU-}eJve7a@mu+ORFq#pyv~cL`cGe?5C<Z<?pRt^6CvN(uI?L5e zquS720C`_}d|QnFs|FN20RkO6FV+}RK)|6~P}+i4R3gpFr!^gF4#Zl-)F_eM2;hiN z*!I}BbEWNyGr@hk<7_sdwT=h~ey`-%V8)U*bI!_WnwmNU#sw$f{|>gtN97KGGgi2x zmVS~)p&~@2u<l0j=OyZn;?kxwhh?DtE1YS~w8%vx>b|HNNwi|3Ys{2ZNF`~yO^X%G zF*xXv!MOs$_Ow}OgV4eS^!HaCJ?lmexp}aPUV6m>-DaLfu-f8>3LO&H!;P81+n!P( zzD2;_24Onn3%WKCHR_hAS&15#TX(H-J;fV`Bu-bieF-aFL!;XWc4zVG`ov$yc?pU$ zL$ix_$SzI933p4xM*n6=%er3E`oIx!P~Dj8;&uf&9riWSeQk6*38^y36xd-;*E2&Z z)#LwcuRT_Q)6akCfkLH4sU!<6f9t%1Od&o>z>LfA{=(r^rDz5T-f%>Y#J@8(_c&sq z%<U1kN0ZByK@VYq!mNjvGn|wUr%JE_C0h=*aNz9zc<7Vw5N5Y2&3DVc4BFL4S)E>x z@~Zc)?fa7}*h|%gieVHY)C(s!Fk_EGmv-jv{zsW1V)-BCMv4Vrd*197po~`fOsW8r zy$4HvXpO~5e*vLB7tCWu=Sb|X3{1l6Yhv&Vm74+ICjj@S^TPa2F^O06*4BD%fa4#H zS7se`M8`~XIYFq^DTotsVJb2XM9;-A7~(AQ6}u@-*L@;^bb{?8q0>VW#vBnojmXkz zglN*mU`I#|)-Fez>jMVi^7t32)j@maCdJw<`aBt;xgJ%s{m=*|+xbwjET%d1_>D^% zDPxbA<`ktcxyC0VE%paDmYj1f5!R+H?{`qNOiGY&s_WNp#Iat1gy*Jz(d=@vt@rvb zT47p$1y9J<BtYll$+kF9eKK@4h4`|<$5IK*En4mIoB|)NZ>^Nl+~Y{Q=G^LpZ0iEM zwv)x6Lmrn-W(|IAzcUdMNTMv{C}HZY(CT$vRg@?l(KrWXZX}!@`^tc=vU2(62z61T zNKJv~hSdx)P5zzUL27uwuwpZa(f!-f)ezxskgZ*z&lO;|(y4VAP`4w`>r*$K-YVtw z64Cvv+}<O}^lDDmvn|Dll4bpKXzl*{M^-Tc=)sk)=w>E~2_u*RI6P@u5gd|F`6nue zE1(&^K||9aFru~|^L?BxN|ls?@>26{vQLPb|HF`mUv|Z5EhbH+_j`B;+1AoE{h?DJ zd*b$opqXPjsSwW16R;KYUgq$WYByNHeW0lu?z?HeT=i?gH9X{fVCZd(=C_qu`9hvg zO(%~03T0NN3BeX?`lk}3Hlokfo2c5O6M>*<(}4@uQ}GbkMQe-y2YG_155kLb@{R(N zDa>$+#u;IN2&py`wdH2PTh6q(sz>wz9zDsAxyBk^Qas~B{dk>N*@h`v-{3x?{lZrz zv&Oz<3|A;|%F@5h6t_I~=W#GYO;{ENisAa^e-dn-^J_VqLJRo@KciL29rZ3dziUK> zg!)<_u)Tobq{-YVuKir830i1{fbbV`hwg7CQSKgR6^{tw9jwyjgj%}mzQzMwfNQBG z<W=VL;1q8YwF~vulUFUMFU7~3`RuA-p8+QXVS8K-95=n~hg)W@K9u3vD&IU(SC_jh z*lt%pV=0#LiNEkOQtm8BBypJW+B-9mGz>>UQnl=~u38i7W>O6C-pWs-$ti3L_v~C* zTn5WL^jWnqv6ocbr89ZO3NY!t?JZAi|IVZOc3l9IuQxqoc895H|DIm;ICr?2z@Sd) zaT@M2_CqK<44?GoIdw}P%fKI|ILn6hTHwqOg|UcY+KjP}Axfm$^ouPvu5>_MV%=k_ zGQSBtIMzrFAuUA4KC+IFQnUIAtc>Q|MEYE(?Z9YM@O;v|bCc>B{o<j&T?&4S{$o4Q zd)-TEcK*pZ$wOk=Z!dyWF%`XNY>-Lre%dbFHAtAtKlJkBarN;4#Y!uEj%B*}n4FQz zAxVWTUB1s?)Jdnl>b33cd%^u5+|PIR$Ej|1ooFvjak<Vx_2ImX)#t&FvL5Y#n=53~ z3~9SiafSQ!E^4-VGe#QZt8x_Ep5AfNmNcIVvRt{5@-niZ!5rX=f^oJ_6e-h*i~9jT zZf#8ycrnD}u$@!ZArXruFc`Lw40y=+`Q|J^M+2&?lc-<<4oBC!hePzRxKOQ)z}Dkk zEFg5U4N_iq?-wZdhOY%L*lhmg$rOa&Cf|KtS@m)K_j@mrk~Qb&%T5zob)jmRKCjqR z=BHoa3&Xnl$vPsx&ZcaJww3C$&fQ+WI=602O0VaHa}iJXBvd-<bX}SMQfiCHbv+q) z{EoJ!b>FKLjyI8WDa9~W0c#TkuEbm!-hg+%m4HZr?!5wxjnCyKKY4taeFe<DP}xL7 zG|W^Q<RJ9&k}P_!Cvrg{INJC}?K&nm#kBJAcQmRcjK08;m`StXI>)Tvqv|H@IobRf zx>8eTE-CBv+Ug2;jb!7`CCi~NEpnOCpSc-6fC=p^c}cQ8eDdfysycLANG%H#P0JK9 zzdxtmvF~Q$V3iU7E9FVyhl{`RHq^MW5|iR!u0mDZFLr)e<)`%BpfDF84;?FqA_Gd7 zoNaT+epex=RVO9jS4|Tj$ht~<WQ7stkS_IoBTn=ay>gmLcOpwUH9d#$o7&;L8q1O& zOC6lRNEPh)w?(e6<F8H^^N#y-&7?(5^4ktJG`N|{&AC(g=V4m~FLUDOi$~W7=Y2{v z?8lujydH^-QR)nriou4@ixSu-Rv@1iU;er>nW_g6j?a9nv>><VCF!Qe!O^_AreT(Q zr3T#>`wMw6V+6WiW~*N;*A-ef@^0lz)$GVd_6oz;By1@!xX{W^+%TZ}Uf+ms2&vyd z>sa2va_X+*sT_R7^Nq5TkLBv-onPJE9p*Ipom7bo+6nuzPtr}8S9=nVmtRwF!>$&N z?IA_b5m)As6;X>6+xCjm+lGx@W&su&(dkp*5wiL(@OZ}X_am`@5Z7;p^=!8&=g-kG z@X9r>=s}aCckPuQv&x^{1c|ytH~(hD(QyC*zJCsWZDwI8%L7&`b&=Y+2m!VI@r?ll z%<P6F_o_^8$FZ8ejxRUWDPnA>s(}0NSXa^J4BfeL5Lm<0K)cy`c|bKVI%jZq^gv+Y z4q)+ru>gX>9HCz$g+^!c_Q#P<%Oy4oH{8OA7Fj;?x-Rt7M=A0uT};9@v*XJ*tbdMH z>0%C7g#y3i1;4c<Q>)xrhJC;4sAL-_%gw2AXSwHQ8hRlr`w>s+Y=FLkZqV?<HvA9T zN)ios{D<{lE9Xoa`%UNWTHyl(*jVJ)knRx6fT7B(5V2l`9;bRn)(=e(JaS%+^ZpG= z9sKU?{*91$*Q>W<P9T9&QUMsT?MYJ;#}B>R;N`T__3p~VF?M0Y<DX|dfY%S*b98*r zc8wpo1sj#qb_Hlt=&0A7b-ZWkfXs!P=WW3PAa4cR!ZEprNA~mrG2j`|QJSr_o+N~w zhwLk<<jdLv6P_!-sh>kY0EhLk{&vqDm?havGC#2u#@JjSl;kk^1a1$1y7tO@(h|2= z2AZ-!UacAW?VK%74j93cwcmB`o1I5i#+DRg-}WyOH3a-#1s$k(Fm>)F85qGmy5cEJ z5mk$MMNH{{`FO~kYfFhA{iq;=-C2?Bw?)0Hl;kx;WZ0^2rwoZ^Hhhsy{xvJzaP$$F z)|QW}&~4LEsrG_oJ*ppmgB(!&RtEoMdE&-b*jI|vdbTyuatawrgFj=|9m^hhJqLaD zCow*?5&3n(@UV*Y+Ya}XZ@KsM-kw6^uj$vpT4>pantx6j48=1P8#>ms1m^R^KX)%= z)5As+5~!RB-u8a)T{hf;LoJ8p(M`{+PJhO%CeR*yr|b$*R#7BsiROy3&%~NyMESR$ zCbs#2SZfmyG$XL#SHQyBA{A0mZtGR3($eO)D|54)-W3HQVGa)BUk#~#^O4)kQkvAG ze0Hon72z`h<s|Txa@4v)4oIcxN%YOMRjSAa-wP%3(-HF7)W_!LNQb*cE}BeHbktw3 z(+JkOaM_qI`URS>aR*CGuBbAoorNdPD-P#12`VJXX&g#?;XYd$2Q!oCm;c6dN0$J^ z;e%1UIYq|SKUy+FBV<=83)K|2QnYvScxiMv*u7S860}qtDRL4Hdx>n9P`H{QG6QyT zQK$;yL7(r2)W>n-3Q>4(R|kPN^lvu8m7?;}|8hRaX)3F@=SNs@&p)VR`~eoXaTvb^ zaR!br;SN94K0i#modd~t6W_Wxsw6fVUGi7wRiL*bzuFJCo<LALPUY~C_bxY3Zl~{? zlKF6ziZ5Xd^vY*y8)?8Tz@T1sih`tpX=o~U<NCe~o`YrLDln)9U1qmbH-NM05}{^_ zOw`SN{cgcK=W#pzwZsNU5R-;ZdIrm?Z<;gc=D1Z|)z(&V^T=qN##u}7$Ci5xZFfBn zSe|v=BT&T_ARTz(11{4`OzjT$Q4~Mnpz`f*<|9zm7Rt}U{Uimzyd7$f%C)ljfZF>a z|Eq}-Aw|}Tj8Lnljr0g3UC`Y-dUb<4^AYv?5*2L9eTC9T5)YrR`l0uLgy8YoTSraw z0PNDouX>+4M_#8xsxb|{i4JESvuzVi!8oC}8^glSV{bx$zV9&U&uYuBuZc{SeTRBJ z<%`|?`{iz8k2IUkHa}Y`{GfVMV@@)J1%=oD5ZG`{$uauLtu>!B`1aEWM9E2lzn?S* zTYdjSZK|%^>^zn3eiQ59;+v~F>5+?2mfKPV0G19UND9xX@u(YY8fm9f<R&**CKc|# z%+f6*PwwPCclU1Ytd_2Fx;~HCj{+jnGLP2}#}!PWa=vy>&S-Nr<mc#*6*+@jDkO(w zJ<8aA53by?8MUBi6Om6Y5hby^ngSO~sa14@A{(v%>rdNu>qWRw2A@?og5k7P2{A%& zO#i&r&e0GWO?m}U&P@LDFgG-c<u$z5j8Ay{I(ag<(In)wh}G+iG&c)+E&85FHv2*q z%p+V*#=pw@oxS2S9=?$?37X{X2mjs~YUYtTW3IkCP6lWjou0YZq3r1{7xs>>9lYd& zizUy8t&cp-QYI@52Qib6y?h{v1l-JgXLx;MbE6>EOR?#+Q`Bi`u1q(tcg2(CbNisB zX3mY+NX-9`t~ewExUKGQF1V8{28btWp<U3l1QL$K-#PXuI!<;0$`uspdpi^Q%1rao z85V{=uuB7s*eG#EH(N9gcs%${%f2)DOXyLxCz8$_qK9#tAjIN-Zh~j}XD*+-#D=~! z8c9;<FfTG(Yria6N51+9JM1ZqjEuQjCc$DhMLMpn(^xQl{0GYX{JYAw04DPRH$7ga z2)-XAcR(@cKeauwG<GlpHU?Xe4Ai<-za?2RX?ebS*vg5t54#x~smg=;FLxf*F5Npb z<H{4bu?L;Y{nUo(_{*zx*)}IgrvIy2h-sd4t@+E1%<!38zm6kqhi_tb);*MF#1fX6 zsvwby{MtjTk_l@8J_;>43LRoS`@QWOjQ#Q^Z1^<(N3HX6>%{&yu5(F(CJo~W7{+uI zaX;{oO7z1s6L*@QNIUgk#_O+cUtxcoDH;g39=zq8S#yo`U~iemZ;v}$4e%7w%6*Z} zAhtE-Fx(2R7iWqKZsB~<YUML0dW}4&HPPm3IHf{mZb;Fk<rfmz=7<IA$|arvCOqFd z`!$B8u1h1fEu|BJSWa?Z^N>Or*TDiQUM|u=G<jV8{uRe<rrD)A%f3f^w+>pl?_X;! zg0n`cV)!qoL-9kF3Y+ZrHO!7l=4AMw2E$u$qgj)5lP#~hnRneB7s*luFFx2sj`*=K zto`Da@J4tM(U0Rnjx~c>SG3RkCg1@y<<We}Tj3kmp-QecYK-BCsTZgx0PXOajukG> z{FhQhCYXF4p9$Hp1ZXo<yGa`F$syk%vq00MO3-PGgPpT3e)zm@PJz9G9LvStmK4ue zo4c~TohRSvPrBFsM{Ij)>gYKYfu#2N<TuAD1}N>|;4FV*bVzzp3iZny0hjd;{lB`x zr?ZPV>V$Be5j|?07A-0w7!gbVnum7B!1@efaK=oF9r_8v<+wm0YNgvp-#?@2yxF+; z$(qrKO;LDu8H-4K+o<?Yu_ozl&ke#lY^ox($*ijJ*1*av_mZ66xcioA-8Opld~6b4 z!CUzEZ-VEBZR-(uncBhQLd&ofT=J6lHsw{y8+)9}jL%NGtPbw1t!*4s2j|KZ=J3&6 zI$R>#_5Y9s8xpWz1}Ltr!N~<o0M({fGFBoVXAMrhbLO9-+3M{(K6eIw!W(Xx{Wwy) zL*i=W-1?(dmeYUoxU$yJkF(2yF3o6MG%$_xe$Ol+)kZ;)8$SQ~*V$xU0}gw%OfrX^ z^vanpaxH)m3v|Al*P_k~Mx-&@Vr)7AtuITZ*S#qM0`5NI1?#v4O4KzLll*(>4U_vT zU_v%O5vs6J+CR3s^bDNmYRyU0$7VB_U{U*!<2ck=(n+#sel1Bl#HeM}mY|j0@xa*q zEfv>vgop>-e7{G=QgR4qeBL%E0KtYrth%5sW~?_fm@mMSuIb`yGZOH}aXI67vQCQD z&pXyqY&pLyC9(#{6?!a!co(RMZwMN#Z^hKqtIKI#Mw5{W3iL}<n97n9ZF|C;6(M-q zAfeR}EZ1Xb%kA^U!|}LST2|7O6Krb<`dE8AWLtc?nPbT)6CF$<fH*<5#m>lb!Ph}r z5HO~H(d0*buJCc(sC)v!gM-Y^!+aLt=MX%)JJa@-Ln}-21xI+2XhXsm^zmJ5IQ3D$ z&_y@S{A~|sh08l-zeA%Mc4Bl7Q>^6XJfdyn6M@`bkcs#{JO94%nsYGo@q3Y&e%tEn zC61lWmE>7X&T?RtUnYX!>2V1J|D?xM1kGO?kM(;TRfjEB70WjR0U!<>bMM#iN|&td zjWj%b>U759;$A|+pI9$4pSzo+H+-6vIM)Lrpk_kWS(W{}6L+dynvsiOT+mN>*2{*} z2qne(KVZ_6F^m&Nuhqj_(@5ITHPxJ95Hy1U*`eE=6&>m&@d}_Wri4Q1nh92bWM>+| zDu-_F95cCSG(XYW+PGvpKXW^6Jiw_$=PYeJPZsPeaBkKh&pGWO(7Whv=BGf8dLRS` z(70yJyi;L~9lk+i9ng0fC^$6CT&~pA=hQ9JIqH-1Pq~A%c$h#twvsi4%R*I++<c(b z;*7{j5>t~xw=5tRo%FB1;?~x9NeYC>VWXWTb!nrU{V`!mD|EXu-(>@CObJ$2oqd>u z3FSNv=Ad6A%;vc9sWn<X?a^yL^Lr1SDbuu97AJBi!DNv7O~{@m5FM1fKX*3gsikR^ z%V4`1sMAO4lU-J6=HL|h??(FEw=E(m@xQ=UPFsD<lsO|00`EZ@6&>PSjQ9}Uy}3?2 zV3%GGl^^C<pUAg8w(Iy-yqA3`nc@yDVsLK9><(+W$54mBf<JJM?)Sf>znqi^;Sssc zQCbEHIcPAX+n{lOtle^-bNE=Qny}}Yn0{;i@~-KaWlK)aGEY0&y7;=1XG2j9%Iny} z)+5psJXr7ZfloDC_?u~#x?&ZJZ*E1cn+uunBowjlp`gg1sqphxfdRR%^3k+wa|`0D zZV53`kYE}~y(eVvCqic_E$xLIdT6z>P&aD*oNOz|Of^WswseT6uqiF6%8ibhf(CpJ z0`aVng2q)IEN_jg_F=DU<gA%rQ&_E)eeY{_((j1OpKYM`2ti`~#}>WUvDM4-N#0`= zCCE0n4>1b#YkbPPasQe-#4wsr*!Ih#v+Lxvtdgj-dh_p<alH0Kq&)QL*D2kB>|jfI zve-g;hqc{A5~!04r=_ijue2+26PmzPy9MOHEoiumS8vPoh==WwY@E+@AI>M;Sn`e0 zR3KvXJFnc+0`>e9t&4!f9YPN&MqZ*8RF*su)D895ww$kRCx>sR9VbtnYkd$tR!ELn z9s}a4J5>~tZ5HL0B7Mzd=+gvi4y`S5cN1FA(d)eZ@&?Jp=Gbi`%AGZZ9olCx<`ylS zyc<DjvQjW>&UqhZMeFy$442Am3J;l(l_Ppi3kB3g%^{6On*;f{9(w%HS@c|C&G$PK zW8hs^eM$=VUyksw8RIP%+J>RQL>sp^3lFa#*1)AeiG{Ih+EO+6HLjCHm-+9e5!G~C z$ocUm9v_c+hK<X6e&<67k;knB=&AY8s0bN?BDhY@no5xpt}-egq1+6;;B`T&kwNXb zTOmhn!8nh<7HPS))7763tGpDwD{s?lyPiZB9p;{xm3YmG#M4l1XHxh#BA#OZp_L9K zTt~F!d{w%{7Fih4=ZlU$YO8KV$RfN%Yg0owX<y8+M>aHp8T0jBAWU(5n49(~b~rox z#I}S|BQsYIIhQn<J@+}E&nS<Wb%j<*wUR3X`yL_xV+QQ@OVkUwrGwX`J4xZ3NI68z zStH=@{b5DKcayv>7r(Lh5h-U-`~SrPmUY)Z77rTVi_;QZmCJgjxZB7SLaBjmT=Z7a z&fbnr!$Em)K8NSswak}cGsOB45olfKs}jk41Q~2ka7X{x2Xju9HOdS-A}&}da~4v; z2&%N@vAOpR^A7QCLw3Uvck#2{z6ZlcFAXDF5cb1AQ4mYf%e)6a_(*<}{jG+Xg*lnF zX4We)NA3tJ9!`qWqf<2bUOVzC20S(Nm2MQWtrT&s2kmy_TaNu{5b=-s0Akb%CR_hd zfhKVt2bZ8}U`+7o#UEph^P5F=^dlKEKrSs1LwbWjfbb6Ef#qKiJBz#O&ZX)}--Z!Y z-^nN9MkcoL;yV9!s2+#xgH8)>UzpMrH4_1p3%p*?B~upCsyc1;p)*@I;7X*-zm(*% z7e-`?|Ii;p;=CLLb4?L*gzL#BXcXw@LgIaMDpLwF0+E}ZrIJRB5(mOWF=-z7{Vj7F z;r2M=2+Nt{w|XD(dYv`rs7yCs>y(bDOcI)_a+~Pr9ZJhmUv9-rdsX`1Y5#Q{1D?~9 zFZd=I5uYJ`^0}98{<jL_AtC**8A}pPPHy?%k1RJY=LJ+7WD_`t^vU&LZcYz(r$$@P z-prLX#qsww7E{86Cla#T9Lmjlhu-+DI9t6eehymIihin-oqglM%4i=plNv{la<EG4 zIHLX>uc@i|k;amH#9(a)U@pQIh*GZodEkZ0`RT~@RnE`OxhBcM>G`n5{mLKkbSj3( zPNcFd&+GMcpuIU?xD+ps$L9JA@s>OK$g^dXg#m-z>D<%4j;9HYGLE3<*NJ1zP7@3- z^PS(mvVK*>J?z8dEzZEmJeY7S@ZV;{_Au%sOyqr6pl<}DW^eRWf}}<s2tKWUJp1EC z)>%OTsWWy`)=a^7NmZFqMM3=4#EVzn_-O{@)>+@@1osDQGQO(s4kxK^Kef+rpCJcX zgT=vSfV9xn5-X#nAQ1K*zwKGnH_t}z*Pg0HAIh?*($?xkLOM!ylfGBowrEWnP8oPs z;I;lHbyDz{#~gp8u)U{gdPQc!OwND3{EwcD^?~LC$JZ0zefXDpyhPr5-fHE;q<s8u zs)K|^vy~yt|Jxn5TkPzh%t_VM8PWT_MUKw@hqdpFYHI7E#exc`s0fG%D82V0-9qmz z^xj*Dln{DRK>-2jQUcO@D1n3yf^-Pd5<&<_4ISwn9@l%n@y7fA&X0_dWS^X!z4uvX zt-0o!+f_$Il%_7I`gu4i8&t+#EEbhRQK)&JI^p4qlcfs28BXmQxsy{Y)sKDhm@jv= zOv|+*eqP7CD&-!Owpr@!ng*)2>a!-KejBh)3pmerj|+mqM<+o_wq7^u!DjBNgZ9R8 z%4UFKX2w)CtwOCtj0+>v&yPHcDN|YxTZ@W?*bH6T1@iE3+82LF{j=(>jvEG`o0g1; z;kQWK^tej6h@ZMGFUOsf8kDSYri0}kKXo1~Wc?6B6)w-%m1gDphJ)!jXF1x^gFAcC zc)AcXaceNap{qtcQ+Ro&LoxiexJ!FeNRL1VEVBuGKCrSTEdJ?BlfQR-lX^D#I}9ZF zKw(ZXw<a5An$4=V*YohgPhML+DM#G;qipmqiSp0_x8l||{HeD2#mRjCUTb_6oJw8p z!9R)^L_|-%`mqp=#uuBmmpeCsKPcuUe0Wo9-H}8Kkbqknes1O2A$6Q%xmB*A`T5(o zJ<haG^^6Zq)@to6hb!xDUN*dU**8#mn)7yX4$X3^s^mGoqDzn$D*TAE=GBz&FrHLO zD1enLw=b4PMsk7Oca#*bd)pceSN{C?PBy2aw9Jk5x=|jtk{%mxgFYk|X7{m`A-4PT z&7Wle5!%l+Hf^<Hp-U0WI)Cl%KenX=a-Bbxgw#%{xuBDq?%@L4uqv?x!lLwf{rOX4 zE3L85Un6t+N{LyRb$<EmH$;XHyiCpVyk;7V?dk1Mp5KNq8uWL6j3M#3x{3c3C#1fg z4>O2`QVl`{G<cu0E+#d#ODO-mQy<cO;KcKw9+6sr1v{&KmV4@2zOm|3!a2Uz8rj6x zS}P5!GsiqzA@Gq#)6QB1)vm4^75nDN8dPZSzL|H0f@%e6?$#&_zWpb~`p*!5_G2TW z2xXSzeE#$XQ&PmuH?P0yz02)<exJm{^gGwx%$NS*%dS?#*ip=c`FBNBX2t_7%-_!3 za$(s@erAT7qnK8F9D9$-;=xl%|K!cac^2vz!tRnL4b#J;r~%>>zGQfqIgHtUq)scv zd*Hg$XYR3KXY4OSnB$AHKO__ix3?pdb%SQ-_D|A9CO;bnhX%9{90!FtL`B9Vr8^l( zFp3MK>c1wZ7sk%mrqIXNIR<f;wEgWl(T#_S|C62p*d}KD{jlv<2g|?T621L55W0Hz z|Bu|0wf7*Z^9_;Ty-yu4{=E!x*89f0?x`r|yV5<W{!kp{Uu>C($V>C^>goPV{%$zE z16c!%Hh%5#Ps_ij`~g6&R|+L~HO(IIz7qRYUIb56Eo8d&kDEvoQgKDb*?7Zup3*(P zLma?GpAz-zy7Yi6;z=|slO2Dmn!U*hSpP#@=wBSAO|^yC(qS2V!9_(TZyipw_tZ~c zo_%4I!OtXj*h$2X@D^tE@AINfh~fIX#ywTC)~mEWeXJtUNu=SxottOL_T?@dPiX#a z)HDor58=_jxOU~yE&B(^#Jc$-qQCy_Gm+0Aj%c0xY|`!M_{#V|+J)LSa&ehi47fkj z^{*NKiH5J@;glxl>v&$9Uq?UquU~&h;AhM>2MMPR{2Zo4Te{rA7oE4(uI{RAzMmnM zeF~Ds<~jO$0^!cDf2VbS+-M296?PC6EXvSqDf)5Sf%l$|S3wBMvS=jeXsDoxk&I-1 z=sbcskTXj|52}B0!6U7F-w+<J9XN8dq`g^<xn4+eH_J_net*|u*QHe}`&dQ4!$i^7 z>qITb*Au)8_^>Z>^Q_x~EREL6iUB_qv_3a`7Eyc=%lr6bSaR@$>C*LN?u#<;c|6I* zkn|cg@A?t1QYRsr);rx8BdK*XQ=!a8BMjT>|1^I8P2*o`+@I(nsHHYz+=CR;cBnk^ zRa$6zy0GoL`{B0QNy{opd*R1@PPs44msdXO!h?oPRzIjro2j1LL~J{!8VM!bNdtS$ zX@9W%q4{wkp#KMub7$?lVmH<V=*a7+G4nXaoA*bSEJrBhPf?2=$NhaFDyq~@rk}Yt z#6QA9LhjXEWq~P9-8(v#39iy)tiO4VB8nDY?H*>;sHsq?kurj*jSn&eVoe|Oi)9ui zK6}l!Wj$ebZKx}i>pแ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%0D1xstGK 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 Mt@f(orCG@T0EOthi~s-t literal 0 HcmV?d00001 diff --git a/docs/test-results/demo-fresh-20261018/runs/39105569049-1/browser/ssr-auth.json b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/browser/ssr-auth.json new file mode 100644 index 00000000..46444f3c --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/browser/ssr-auth.json @@ -0,0 +1,7 @@ +{ + "purpose": "hydration 이전 인증정보 URL 제출 방지", + "timestamp": "2026-10-18T06:56:31.669Z", + "postFallback": true, + "initiallyDisabled": true, + "verdict": "PASS" +} \ No newline at end of file diff --git a/docs/test-results/demo-fresh-20261018/runs/39105569049-1/browser/summary.json b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/browser/summary.json new file mode 100644 index 00000000..f2f2979b --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/browser/summary.json @@ -0,0 +1,11 @@ +{ + "verdict": "PASS", + "timestamp": "2026-10-18T06:56:33.938Z", + "browser": "156.0.8078.4", + "login": "PASS", + "search": "PASS", + "download": "PASS", + "documentId": 3, + "bytes": 52683, + "sha256": "b8dae14d4ba98ceda83e672be41d20895a70ee01f4cf128a0431d137ea581304" +} \ No newline at end of file diff --git a/docs/test-results/demo-fresh-20261018/runs/39105569049-1/cold-start.log b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/cold-start.log new file mode 100644 index 00000000..ed070b75 --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/cold-start.log @@ -0,0 +1,11 @@ +실행 ID: 39105569049-1/cold-start +목적: 모델·의존성 최초 준비를 포함한 전체 기동 +시작: 2026-10-18T15:52:46+09:00 +장소: 독립 GitHub hosted 실행기 +기대 종료 코드: 0 +절차: ./scripts/demo.py start --timeout 1200 +2026-10-18T15:52:48+09:00 [시작] 로컬 시연 세션 1bd07e5ccd714d77a817b67f1d272a0f · 범위 search +2026-10-18T15:56:02+09:00 [준비 완료] Web: <설정된 서버> · verify로 예제 시연을 검사하세요. +종료: 2026-10-18T15:56:03+09:00 +실제 종료 코드: 0 +소요 시간: 196.632초 diff --git a/docs/test-results/demo-fresh-20261018/runs/39105569049-1/concurrent-start.log b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/concurrent-start.log new file mode 100644 index 00000000..398166e6 --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/concurrent-start.log @@ -0,0 +1,10 @@ +실행 ID: 39105569049-1/concurrent-start +목적: 진행 중 start의 잠금으로 두 번째 start 거부 +시작: 2026-10-18T15:52:48+09:00 +장소: 독립 GitHub hosted 실행기 +기대 종료 코드: 1 +절차: ./scripts/demo.py start +2026-10-18T15:52:48+09:00 [실패] 다른 시작·검증·종료 명령이 실행 중입니다. +종료: 2026-10-18T15:52:48+09:00 +실제 종료 코드: 1 +소요 시간: 0.114초 diff --git a/docs/test-results/demo-fresh-20261018/runs/39105569049-1/first-result/events.jsonl b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/first-result/events.jsonl new file mode 100644 index 00000000..5002214d --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/first-result/events.jsonl @@ -0,0 +1,56 @@ +{"timestamp": "2026-10-18T15:56:04.024+09:00", "message": "[실행] 20261018T155604022729+0900 · 범위 search"} +{"timestamp": "2026-10-18T15:56:04.201+09:00", "message": "[계정] 회원가입 완료"} +{"timestamp": "2026-10-18T15:56:04.325+09:00", "message": "[계정] 로그인 완료"} +{"timestamp": "2026-10-18T15:56:04.806+09:00", "message": "[업로드] 1/15 · 문서 3"} +{"timestamp": "2026-10-18T15:56:04.858+09:00", "message": "[업로드] 2/15 · 문서 4"} +{"timestamp": "2026-10-18T15:56:04.894+09:00", "message": "[업로드] 3/15 · 문서 5"} +{"timestamp": "2026-10-18T15:56:04.929+09:00", "message": "[업로드] 4/15 · 문서 6"} +{"timestamp": "2026-10-18T15:56:04.964+09:00", "message": "[업로드] 5/15 · 문서 7"} +{"timestamp": "2026-10-18T15:56:04.995+09:00", "message": "[업로드] 6/15 · 문서 8"} +{"timestamp": "2026-10-18T15:56:05.024+09:00", "message": "[업로드] 7/15 · 문서 9"} +{"timestamp": "2026-10-18T15:56:05.080+09:00", "message": "[업로드] 8/15 · 문서 10"} +{"timestamp": "2026-10-18T15:56:05.114+09:00", "message": "[업로드] 9/15 · 문서 11"} +{"timestamp": "2026-10-18T15:56:05.186+09:00", "message": "[업로드] 10/15 · 문서 12"} +{"timestamp": "2026-10-18T15:56:05.232+09:00", "message": "[업로드] 11/15 · 문서 13"} +{"timestamp": "2026-10-18T15:56:05.268+09:00", "message": "[업로드] 12/15 · 문서 14"} +{"timestamp": "2026-10-18T15:56:05.299+09:00", "message": "[업로드] 13/15 · 문서 15"} +{"timestamp": "2026-10-18T15:56:05.330+09:00", "message": "[업로드] 14/15 · 문서 16"} +{"timestamp": "2026-10-18T15:56:05.363+09:00", "message": "[업로드] 15/15 · 문서 17"} +{"timestamp": "2026-10-18T15:56:05.825+09:00", "message": "[인덱싱] INDEXED 0/15 · 처리 중 2 · 대기 13 · 실패 0 (0.5초)"} +{"timestamp": "2026-10-18T15:56:09.450+09:00", "message": "[인덱싱] INDEXED 1/15 · 처리 중 2 · 대기 12 · 실패 0 (4.1초)"} +{"timestamp": "2026-10-18T15:56:13.100+09:00", "message": "[인덱싱] INDEXED 4/15 · 처리 중 2 · 대기 9 · 실패 0 (7.7초)"} +{"timestamp": "2026-10-18T15:56:16.474+09:00", "message": "[인덱싱] INDEXED 7/15 · 처리 중 1 · 대기 7 · 실패 0 (11.1초)"} +{"timestamp": "2026-10-18T15:56:19.761+09:00", "message": "[인덱싱] INDEXED 9/15 · 처리 중 2 · 대기 4 · 실패 0 (14.4초)"} +{"timestamp": "2026-10-18T15:56:22.899+09:00", "message": "[인덱싱] INDEXED 13/15 · 처리 중 1 · 대기 1 · 실패 0 (17.5초)"} +{"timestamp": "2026-10-18T15:56:25.933+09:00", "message": "[인덱싱] INDEXED 15/15 · 처리 중 0 · 대기 0 · 실패 0 (20.6초)"} +{"timestamp": "2026-10-18T15:56:26.231+09:00", "message": "[검색] 통과: 결과 3건, 기대 문서 포함 여부 확인"} +{"timestamp": "2026-10-18T15:56:26.231+09:00", "message": "[RAG] 미검증: search 범위에서는 생성 답변 성공을 주장하지 않습니다."} +{"timestamp": "2026-10-18T15:56:26.231+09:00", "message": "[질문 1] 검색 PASS · 생성 답변 NOT_RUN"} +{"timestamp": "2026-10-18T15:56:26.444+09:00", "message": "[검색] 통과: 결과 3건, 기대 문서 포함 여부 확인"} +{"timestamp": "2026-10-18T15:56:26.444+09:00", "message": "[RAG] 미검증: search 범위에서는 생성 답변 성공을 주장하지 않습니다."} +{"timestamp": "2026-10-18T15:56:26.465+09:00", "message": "[질문 2] 검색 PASS · 생성 답변 NOT_RUN"} +{"timestamp": "2026-10-18T15:56:26.641+09:00", "message": "[검색] 통과: 결과 3건, 기대 문서 포함 여부 확인"} +{"timestamp": "2026-10-18T15:56:26.641+09:00", "message": "[RAG] 미검증: search 범위에서는 생성 답변 성공을 주장하지 않습니다."} +{"timestamp": "2026-10-18T15:56:26.641+09:00", "message": "[질문 3] 검색 PASS · 생성 답변 NOT_RUN"} +{"timestamp": "2026-10-18T15:56:26.667+09:00", "message": "[원본] 문서 3: PASS"} +{"timestamp": "2026-10-18T15:56:26.684+09:00", "message": "[원본] 문서 4: PASS"} +{"timestamp": "2026-10-18T15:56:26.703+09:00", "message": "[원본] 문서 5: PASS"} +{"timestamp": "2026-10-18T15:56:26.721+09:00", "message": "[원본] 문서 6: PASS"} +{"timestamp": "2026-10-18T15:56:26.739+09:00", "message": "[원본] 문서 7: PASS"} +{"timestamp": "2026-10-18T15:56:26.758+09:00", "message": "[원본] 문서 8: PASS"} +{"timestamp": "2026-10-18T15:56:26.774+09:00", "message": "[원본] 문서 9: PASS"} +{"timestamp": "2026-10-18T15:56:26.789+09:00", "message": "[원본] 문서 10: PASS"} +{"timestamp": "2026-10-18T15:56:26.804+09:00", "message": "[원본] 문서 11: PASS"} +{"timestamp": "2026-10-18T15:56:26.821+09:00", "message": "[원본] 문서 12: PASS"} +{"timestamp": "2026-10-18T15:56:26.834+09:00", "message": "[원본] 문서 13: PASS"} +{"timestamp": "2026-10-18T15:56:26.850+09:00", "message": "[원본] 문서 14: PASS"} +{"timestamp": "2026-10-18T15:56:26.867+09:00", "message": "[원본] 문서 15: PASS"} +{"timestamp": "2026-10-18T15:56:26.882+09:00", "message": "[원본] 문서 16: PASS"} +{"timestamp": "2026-10-18T15:56:26.897+09:00", "message": "[원본] 문서 17: PASS"} +{"timestamp": "2026-10-18T15:56:26.897+09:00", "message": "[업로드] PASS · 15/15"} +{"timestamp": "2026-10-18T15:56:26.897+09:00", "message": "[인덱싱] PASS · 15/15"} +{"timestamp": "2026-10-18T15:56:26.897+09:00", "message": "[검색] PASS · 3/3"} +{"timestamp": "2026-10-18T15:56:26.897+09:00", "message": "[원본 해시] PASS · 15/15"} +{"timestamp": "2026-10-18T15:56:26.897+09:00", "message": "[생성 답변·인용] NOT_RUN · 0/0"} +{"timestamp": "2026-10-18T15:56:26.897+09:00", "message": "[문서 ID 재사용] NOT_RUN · 0/0"} +{"timestamp": "2026-10-18T15:56:26.897+09:00", "message": "[최종] 종료 코드 0"} diff --git a/docs/test-results/demo-fresh-20261018/runs/39105569049-1/first-result/summary.json b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/first-result/summary.json new file mode 100644 index 00000000..60ca5432 --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/first-result/summary.json @@ -0,0 +1,86 @@ +{ + "schemaVersion": 1, + "runId": "20261018T155604022729+0900", + "revision": "a62175ee3e4621c6411feb3af5f4ed3663802b6c", + "scope": "search", + "startedAt": "2026-10-18T15:56:04.024+09:00", + "stages": { + "upload": { + "status": "PASS", + "passed": 15, + "expected": 15 + }, + "indexing": { + "status": "PASS", + "passed": 15, + "expected": 15 + }, + "search": { + "status": "PASS", + "passed": 3, + "expected": 3 + }, + "download": { + "status": "PASS", + "passed": 15, + "expected": 15 + }, + "rag": { + "status": "NOT_RUN", + "passed": 0, + "expected": 0 + }, + "replay": { + "status": "NOT_RUN", + "passed": 0, + "expected": 0 + } + }, + "documents": { + "b8dae14d4ba98ceda83e672be41d20895a70ee01f4cf128a0431d137ea581304": 3, + "924112041275f193f2296a55ba5ea098e14ff98b8908eff2051e37b8c2848fb3": 4, + "82d7205d795868938f73eb871b0ca29aff632ce5948e0a5c60d7614222265379": 5, + "f0fb63cf9f42118f799082c74d8d1237434313270ff6b9ac12bb05d1d2955d9a": 6, + "6672c9b2faa6d5b1d04bd287d7a7a71746262c6fb126333f217249aacef6caeb": 7, + "3295bab5db9c7ddcd5a6d8e141b25960f167e553b03f80abaaabcc7670cf7760": 8, + "d5e11dad0ac802f01925eaac1c98efff483616ca0bb02f4be098bcbe1e2d315b": 9, + "ece687b9507957c5bc1ba7e0deff426e8803b81332e0cd507b3558974bdd78b0": 10, + "1830ee48e2942f6e80c5d72f26917ea5384e5c6ff2ca10c4b2ff2c2739e61547": 11, + "6d383df3849d304aa941d6733a0e8205c024d9fa2cfb37d21880af32f7c5c43d": 12, + "a5635fe4c4f3f60d0aa52e3cf7e493da741f6e7e8b15adef534f50030cdafa03": 13, + "fab797bb45eef73ace164770c5fc8d47c8e1c9378e87c1aa296b706759b30831": 14, + "c1bc83a520b4b05557ef8cbf48da15b82a16df02c04274c56cf4604ff9ee50b3": 15, + "d1e0658cf5d053175cab29dff6d21667c5e8527def7c6acc6c0efb814baf6285": 16, + "0bebba1fec7239ddd92b23f81b3b35910ae1d031ac02b5432cd460b1d9445244": 17 + }, + "queries": [ + { + "number": 1, + "expectedDocumentId": 3, + "search": "PASS", + "rag": "NOT_RUN", + "queryId": 1 + }, + { + "number": 2, + "expectedDocumentId": 8, + "search": "PASS", + "rag": "NOT_RUN", + "queryId": 2 + }, + { + "number": 3, + "expectedDocumentId": 13, + "search": "PASS", + "rag": "NOT_RUN", + "queryId": 3 + } + ], + "corpusSha256": "e27ae024506149089279f92b88e13262fa96d651f00e360b2815bc96d648e70d", + "targetFingerprint": "208b7156c72415ab41097dabd67a3b01f0a660d0718d0976f6237eaeb2f6b003", + "topK": 3, + "checksSha256": "103c1585e7dd2b45f03eb9ba61463bb9a8647efa8026b270c41a45c8eb677c6c", + "exitCode": 0, + "finishedAt": "2026-10-18T15:56:26.897+09:00", + "elapsedSeconds": 22.875 +} \ No newline at end of file diff --git a/docs/test-results/demo-fresh-20261018/runs/39105569049-1/interrupted-start.log b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/interrupted-start.log new file mode 100644 index 00000000..30657d02 --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/interrupted-start.log @@ -0,0 +1,13 @@ +실행 ID: 39105569049-1/interrupted-start +목적: 실제 백엔드 기동 중 부모 SIGTERM 뒤 소유 자원 정리 +시작: 2026-10-18T15:56:46+09:00 +장소: 독립 GitHub hosted 실행기 +기대 종료 코드: 130 +절차: ./scripts/demo.py start +2026-10-18T15:56:47+09:00 [시작] 로컬 시연 세션 ea791ff132274affb11ed6d134b127ba · 범위 search +2026-10-18T15:56:54+09:00 [기동 중단] 이번 실행이 시작한 자원을 정리합니다. +2026-10-18T15:56:57+09:00 [종료 완료] 소유 서버·컨테이너 중지, 데이터·원본·모델 캐시 보존 +2026-10-18T15:56:57+09:00 [중단] 실행을 취소했습니다. +종료: 2026-10-18T15:56:57+09:00 +실제 종료 코드: 130 +소요 시간: 10.906초 diff --git a/docs/test-results/demo-fresh-20261018/runs/39105569049-1/missing-provider.log b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/missing-provider.log new file mode 100644 index 00000000..2c6629ec --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/missing-provider.log @@ -0,0 +1,13 @@ +실행 ID: 39105569049-1/missing-provider +목적: 잘못 지정된 임베딩 주소는 준비 실패로 판정 +시작: 2026-10-18T15:56:39+09:00 +장소: 독립 GitHub hosted 실행기 +기대 종료 코드: 1 +절차: ./scripts/demo.py start --timeout 5 +2026-10-18T15:56:39+09:00 [시작] 로컬 시연 세션 2cac5af2e629447fb41c291abe0e8feb · 범위 search +2026-10-18T15:56:41+09:00 [기동 중단] 이번 실행이 시작한 자원을 정리합니다. +2026-10-18T15:56:46+09:00 [종료 완료] 소유 서버·컨테이너 중지, 데이터·원본·모델 캐시 보존 +2026-10-18T15:56:46+09:00 [실패] 하위 명령 실패: services (코드 1), 기록: .demo/launcher/sessions/2cac5af2e629447fb41c291abe0e8feb/services.log +종료: 2026-10-18T15:56:46+09:00 +실제 종료 코드: 1 +소요 시간: 7.234초 diff --git a/docs/test-results/demo-fresh-20261018/runs/39105569049-1/ready-status.log b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/ready-status.log new file mode 100644 index 00000000..485f5abd --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/ready-status.log @@ -0,0 +1,14 @@ +실행 ID: 39105569049-1/ready-status +목적: 기록이 아닌 실제 서버·프록시·DB 준비 재확인 +시작: 2026-10-18T15:56:34+09:00 +장소: 독립 GitHub hosted 실행기 +기대 종료 코드: 0 +절차: ./scripts/demo.py status +2026-10-18T15:56:34+09:00 [기록된 상태] READY · 범위 search +2026-10-18T15:56:34+09:00 [기록] .demo/launcher/sessions/1bd07e5ccd714d77a817b67f1d272a0f/ +2026-10-18T15:56:34+09:00 [backend] 소유 프로세스 확인 +2026-10-18T15:56:34+09:00 [frontend] 소유 프로세스 확인 +2026-10-18T15:56:34+09:00 [현재 상태] 서버·API 프록시·대상 DB 준비 확인 +종료: 2026-10-18T15:56:35+09:00 +실제 종료 코드: 0 +소요 시간: 1.016초 diff --git a/docs/test-results/demo-fresh-20261018/runs/39105569049-1/replay-result/events.jsonl b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/replay-result/events.jsonl new file mode 100644 index 00000000..51cfbe53 --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/replay-result/events.jsonl @@ -0,0 +1,49 @@ +{"timestamp": "2026-10-18T15:56:28.168+09:00", "message": "[실행] 20261018T155628167053+0900 · 범위 search"} +{"timestamp": "2026-10-18T15:56:28.296+09:00", "message": "[계정] 로그인 완료"} +{"timestamp": "2026-10-18T15:56:28.315+09:00", "message": "[업로드] 1/15 · 문서 3"} +{"timestamp": "2026-10-18T15:56:28.334+09:00", "message": "[업로드] 2/15 · 문서 4"} +{"timestamp": "2026-10-18T15:56:28.357+09:00", "message": "[업로드] 3/15 · 문서 5"} +{"timestamp": "2026-10-18T15:56:28.375+09:00", "message": "[업로드] 4/15 · 문서 6"} +{"timestamp": "2026-10-18T15:56:28.391+09:00", "message": "[업로드] 5/15 · 문서 7"} +{"timestamp": "2026-10-18T15:56:28.408+09:00", "message": "[업로드] 6/15 · 문서 8"} +{"timestamp": "2026-10-18T15:56:28.426+09:00", "message": "[업로드] 7/15 · 문서 9"} +{"timestamp": "2026-10-18T15:56:28.452+09:00", "message": "[업로드] 8/15 · 문서 10"} +{"timestamp": "2026-10-18T15:56:28.471+09:00", "message": "[업로드] 9/15 · 문서 11"} +{"timestamp": "2026-10-18T15:56:28.494+09:00", "message": "[업로드] 10/15 · 문서 12"} +{"timestamp": "2026-10-18T15:56:28.514+09:00", "message": "[업로드] 11/15 · 문서 13"} +{"timestamp": "2026-10-18T15:56:28.534+09:00", "message": "[업로드] 12/15 · 문서 14"} +{"timestamp": "2026-10-18T15:56:28.552+09:00", "message": "[업로드] 13/15 · 문서 15"} +{"timestamp": "2026-10-18T15:56:28.572+09:00", "message": "[업로드] 14/15 · 문서 16"} +{"timestamp": "2026-10-18T15:56:28.590+09:00", "message": "[업로드] 15/15 · 문서 17"} +{"timestamp": "2026-10-18T15:56:28.827+09:00", "message": "[인덱싱] INDEXED 15/15 · 처리 중 0 · 대기 0 · 실패 0 (0.2초)"} +{"timestamp": "2026-10-18T15:56:29.034+09:00", "message": "[검색] 통과: 결과 3건, 기대 문서 포함 여부 확인"} +{"timestamp": "2026-10-18T15:56:29.034+09:00", "message": "[RAG] 미검증: search 범위에서는 생성 답변 성공을 주장하지 않습니다."} +{"timestamp": "2026-10-18T15:56:29.034+09:00", "message": "[질문 1] 검색 PASS · 생성 답변 NOT_RUN"} +{"timestamp": "2026-10-18T15:56:29.232+09:00", "message": "[검색] 통과: 결과 3건, 기대 문서 포함 여부 확인"} +{"timestamp": "2026-10-18T15:56:29.232+09:00", "message": "[RAG] 미검증: search 범위에서는 생성 답변 성공을 주장하지 않습니다."} +{"timestamp": "2026-10-18T15:56:29.252+09:00", "message": "[질문 2] 검색 PASS · 생성 답변 NOT_RUN"} +{"timestamp": "2026-10-18T15:56:29.429+09:00", "message": "[검색] 통과: 결과 3건, 기대 문서 포함 여부 확인"} +{"timestamp": "2026-10-18T15:56:29.429+09:00", "message": "[RAG] 미검증: search 범위에서는 생성 답변 성공을 주장하지 않습니다."} +{"timestamp": "2026-10-18T15:56:29.429+09:00", "message": "[질문 3] 검색 PASS · 생성 답변 NOT_RUN"} +{"timestamp": "2026-10-18T15:56:29.446+09:00", "message": "[원본] 문서 3: PASS"} +{"timestamp": "2026-10-18T15:56:29.461+09:00", "message": "[원본] 문서 4: PASS"} +{"timestamp": "2026-10-18T15:56:29.476+09:00", "message": "[원본] 문서 5: PASS"} +{"timestamp": "2026-10-18T15:56:29.491+09:00", "message": "[원본] 문서 6: PASS"} +{"timestamp": "2026-10-18T15:56:29.507+09:00", "message": "[원본] 문서 7: PASS"} +{"timestamp": "2026-10-18T15:56:29.522+09:00", "message": "[원본] 문서 8: PASS"} +{"timestamp": "2026-10-18T15:56:29.538+09:00", "message": "[원본] 문서 9: PASS"} +{"timestamp": "2026-10-18T15:56:29.554+09:00", "message": "[원본] 문서 10: PASS"} +{"timestamp": "2026-10-18T15:56:29.574+09:00", "message": "[원본] 문서 11: PASS"} +{"timestamp": "2026-10-18T15:56:29.588+09:00", "message": "[원본] 문서 12: PASS"} +{"timestamp": "2026-10-18T15:56:29.603+09:00", "message": "[원본] 문서 13: PASS"} +{"timestamp": "2026-10-18T15:56:29.618+09:00", "message": "[원본] 문서 14: PASS"} +{"timestamp": "2026-10-18T15:56:29.632+09:00", "message": "[원본] 문서 15: PASS"} +{"timestamp": "2026-10-18T15:56:29.646+09:00", "message": "[원본] 문서 16: PASS"} +{"timestamp": "2026-10-18T15:56:29.660+09:00", "message": "[원본] 문서 17: PASS"} +{"timestamp": "2026-10-18T15:56:29.660+09:00", "message": "[업로드] PASS · 15/15"} +{"timestamp": "2026-10-18T15:56:29.660+09:00", "message": "[인덱싱] PASS · 15/15"} +{"timestamp": "2026-10-18T15:56:29.660+09:00", "message": "[검색] PASS · 3/3"} +{"timestamp": "2026-10-18T15:56:29.660+09:00", "message": "[원본 해시] PASS · 15/15"} +{"timestamp": "2026-10-18T15:56:29.660+09:00", "message": "[생성 답변·인용] NOT_RUN · 0/0"} +{"timestamp": "2026-10-18T15:56:29.660+09:00", "message": "[문서 ID 재사용] PASS · 15/15"} +{"timestamp": "2026-10-18T15:56:29.660+09:00", "message": "[최종] 종료 코드 0"} diff --git a/docs/test-results/demo-fresh-20261018/runs/39105569049-1/replay-result/summary.json b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/replay-result/summary.json new file mode 100644 index 00000000..a5b4674f --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/replay-result/summary.json @@ -0,0 +1,86 @@ +{ + "schemaVersion": 1, + "runId": "20261018T155628167053+0900", + "revision": "a62175ee3e4621c6411feb3af5f4ed3663802b6c", + "scope": "search", + "startedAt": "2026-10-18T15:56:28.168+09:00", + "stages": { + "upload": { + "status": "PASS", + "passed": 15, + "expected": 15 + }, + "indexing": { + "status": "PASS", + "passed": 15, + "expected": 15 + }, + "search": { + "status": "PASS", + "passed": 3, + "expected": 3 + }, + "download": { + "status": "PASS", + "passed": 15, + "expected": 15 + }, + "rag": { + "status": "NOT_RUN", + "passed": 0, + "expected": 0 + }, + "replay": { + "status": "PASS", + "passed": 15, + "expected": 15 + } + }, + "documents": { + "b8dae14d4ba98ceda83e672be41d20895a70ee01f4cf128a0431d137ea581304": 3, + "924112041275f193f2296a55ba5ea098e14ff98b8908eff2051e37b8c2848fb3": 4, + "82d7205d795868938f73eb871b0ca29aff632ce5948e0a5c60d7614222265379": 5, + "f0fb63cf9f42118f799082c74d8d1237434313270ff6b9ac12bb05d1d2955d9a": 6, + "6672c9b2faa6d5b1d04bd287d7a7a71746262c6fb126333f217249aacef6caeb": 7, + "3295bab5db9c7ddcd5a6d8e141b25960f167e553b03f80abaaabcc7670cf7760": 8, + "d5e11dad0ac802f01925eaac1c98efff483616ca0bb02f4be098bcbe1e2d315b": 9, + "ece687b9507957c5bc1ba7e0deff426e8803b81332e0cd507b3558974bdd78b0": 10, + "1830ee48e2942f6e80c5d72f26917ea5384e5c6ff2ca10c4b2ff2c2739e61547": 11, + "6d383df3849d304aa941d6733a0e8205c024d9fa2cfb37d21880af32f7c5c43d": 12, + "a5635fe4c4f3f60d0aa52e3cf7e493da741f6e7e8b15adef534f50030cdafa03": 13, + "fab797bb45eef73ace164770c5fc8d47c8e1c9378e87c1aa296b706759b30831": 14, + "c1bc83a520b4b05557ef8cbf48da15b82a16df02c04274c56cf4604ff9ee50b3": 15, + "d1e0658cf5d053175cab29dff6d21667c5e8527def7c6acc6c0efb814baf6285": 16, + "0bebba1fec7239ddd92b23f81b3b35910ae1d031ac02b5432cd460b1d9445244": 17 + }, + "queries": [ + { + "number": 1, + "expectedDocumentId": 3, + "search": "PASS", + "rag": "NOT_RUN", + "queryId": 4 + }, + { + "number": 2, + "expectedDocumentId": 8, + "search": "PASS", + "rag": "NOT_RUN", + "queryId": 5 + }, + { + "number": 3, + "expectedDocumentId": 13, + "search": "PASS", + "rag": "NOT_RUN", + "queryId": 6 + } + ], + "corpusSha256": "e27ae024506149089279f92b88e13262fa96d651f00e360b2815bc96d648e70d", + "targetFingerprint": "208b7156c72415ab41097dabd67a3b01f0a660d0718d0976f6237eaeb2f6b003", + "topK": 3, + "checksSha256": "103c1585e7dd2b45f03eb9ba61463bb9a8647efa8026b270c41a45c8eb677c6c", + "exitCode": 0, + "finishedAt": "2026-10-18T15:56:29.660+09:00", + "elapsedSeconds": 1.493 +} \ No newline at end of file diff --git a/docs/test-results/demo-fresh-20261018/runs/39105569049-1/reuse-start.log b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/reuse-start.log new file mode 100644 index 00000000..765e101e --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/reuse-start.log @@ -0,0 +1,10 @@ +실행 ID: 39105569049-1/reuse-start +목적: 동일 활성 세션 중복 기동 없이 재사용 +시작: 2026-10-18T15:56:35+09:00 +장소: 독립 GitHub hosted 실행기 +기대 종료 코드: 0 +절차: ./scripts/demo.py start +2026-10-18T15:56:36+09:00 [재사용] 이미 준비된 시연 세션입니다. Web: <설정된 서버> +종료: 2026-10-18T15:56:36+09:00 +실제 종료 코드: 0 +소요 시간: 1.019초 diff --git a/docs/test-results/demo-fresh-20261018/runs/39105569049-1/runtime/0806f0385fd940dc8968a8446fafb9c2/backend.log b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/runtime/0806f0385fd940dc8968a8446fafb9c2/backend.log new file mode 100644 index 00000000..fb6ff6f9 --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/runtime/0806f0385fd940dc8968a8446fafb9c2/backend.log @@ -0,0 +1,143 @@ +2026-10-18T15:57:05+09:00 To honour the JVM settings for this build a single-use Daemon process will be forked. For more on this, please refer to <설정된 서버> in the Gradle documentation. +2026-10-18T15:57:06+09:00 Daemon will be stopped at the end of the build +2026-10-18T15:57:12+09:00 > Task :compileJava UP-TO-DATE +2026-10-18T15:57:12+09:00 > Task :processResources UP-TO-DATE +2026-10-18T15:57:12+09:00 > Task :classes UP-TO-DATE +2026-10-18T15:57:12+09:00 > Task :resolveMainClassName UP-TO-DATE +2026-10-18T15:57:14+09:00 +2026-10-18T15:57:14+09:00 > Task :bootRun +2026-10-18T15:57:14+09:00 Standard Commons Logging discovery in action with spring-jcl: please remove commons-logging.jar from classpath in order to avoid potential conflicts +2026-10-18T15:57:14+09:00 Standard Commons Logging discovery in action with spring-jcl: please remove commons-logging.jar from classpath in order to avoid potential conflicts +2026-10-18T15:57:14+09:00 +2026-10-18T15:57:14+09:00 . ____ _ __ _ _ +2026-10-18T15:57:14+09:00 /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ +2026-10-18T15:57:14+09:00 ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ +2026-10-18T15:57:14+09:00 \\/ ___)| |_)| | | | | || (_| | ) ) ) ) +2026-10-18T15:57:14+09:00 ' |____| .__|_| |_|_| |_\__, | / / / / +2026-10-18T15:57:14+09:00 =========|_|==============|___/=/_/_/_/ +2026-10-18T15:57:14+09:00 +2026-10-18T15:57:14+09:00 :: Spring Boot :: (v3.5.16) +2026-10-18T15:57:14+09:00 +2026-10-18T15:57:14+09:00 2026-10-18T06:57:12.896Z INFO 20660 --- [docgrid] [ restartedMain] c.opensource.docgrid.DocgridApplication : Starting DocgridApplication using Java 17.0.20.1 with PID 20660 (<작업공간>/backend/build/classes/java/main started by runner in <작업공간>) +2026-10-18T15:57:14+09:00 2026-10-18T06:57:12.898Z INFO 20660 --- [docgrid] [ restartedMain] c.opensource.docgrid.DocgridApplication : The following 1 profile is active: "local" +2026-10-18T15:57:14+09:00 2026-10-18T06:57:12.925Z INFO 20660 --- [docgrid] [ restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable +2026-10-18T15:57:14+09:00 2026-10-18T06:57:12.925Z INFO 20660 --- [docgrid] [ restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' +2026-10-18T15:57:14+09:00 2026-10-18T06:57:13.707Z INFO 20660 --- [docgrid] [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode +2026-10-18T15:57:14+09:00 2026-10-18T06:57:13.709Z INFO 20660 --- [docgrid] [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2026-10-18T15:57:14+09:00 2026-10-18T06:57:13.839Z INFO 20660 --- [docgrid] [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 125 ms. Found 31 JPA repository interfaces. +2026-10-18T15:57:14+09:00 2026-10-18T06:57:13.849Z INFO 20660 --- [docgrid] [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode +2026-10-18T15:57:14+09:00 2026-10-18T06:57:13.850Z INFO 20660 --- [docgrid] [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode. +2026-10-18T15:57:14+09:00 2026-10-18T06:57:13.867Z INFO 20660 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.collection.repository.CollectionDocumentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:57:14+09:00 2026-10-18T06:57:13.868Z INFO 20660 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.collection.repository.CollectionRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:57:14+09:00 2026-10-18T06:57:13.868Z INFO 20660 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.document.repository.DocumentChunkRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:57:14+09:00 2026-10-18T06:57:13.868Z INFO 20660 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.document.repository.DocumentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:57:14+09:00 2026-10-18T06:57:13.868Z INFO 20660 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.document.repository.DocumentVersionRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:57:14+09:00 2026-10-18T06:57:13.868Z INFO 20660 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.document.repository.FileObjectRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:57:14+09:00 2026-10-18T06:57:13.868Z INFO 20660 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.embedding.repository.EmbeddingJobRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:57:14+09:00 2026-10-18T06:57:13.869Z INFO 20660 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.embedding.repository.EmbeddingModelRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:57:14+09:00 2026-10-18T06:57:13.869Z INFO 20660 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.embedding.repository.EmbeddingRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:57:14+09:00 2026-10-18T06:57:13.869Z INFO 20660 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.permission.repository.CollectionPermissionRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:57:14+09:00 2026-10-18T06:57:13.869Z INFO 20660 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.permission.repository.DocumentPermissionRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:57:14+09:00 2026-10-18T06:57:13.869Z INFO 20660 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.permission.repository.UserDocumentAccessCacheRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:57:14+09:00 2026-10-18T06:57:13.869Z INFO 20660 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.rag.repository.RagResponseRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:57:14+09:00 2026-10-18T06:57:13.869Z INFO 20660 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.rag.repository.ResponseCitationRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:57:14+09:00 2026-10-18T06:57:13.869Z INFO 20660 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.search.repository.SearchConversationRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:57:14+09:00 2026-10-18T06:57:13.870Z INFO 20660 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.search.repository.SearchQueryRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:57:14+09:00 2026-10-18T06:57:13.870Z INFO 20660 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.search.repository.SearchResultRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:57:14+09:00 2026-10-18T06:57:13.870Z INFO 20660 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.search.repository.VectorSearchRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:57:14+09:00 2026-10-18T06:57:13.870Z INFO 20660 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.sync.repository.SyncAdminActionRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:57:14+09:00 2026-10-18T06:57:13.870Z INFO 20660 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.sync.repository.SyncConsistencyIssueRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:57:14+09:00 2026-10-18T06:57:13.871Z INFO 20660 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.sync.repository.SyncEventDeliveryAttemptRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:57:14+09:00 2026-10-18T06:57:13.871Z INFO 20660 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.sync.repository.SyncOutboxEventRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:57:14+09:00 2026-10-18T06:57:13.871Z INFO 20660 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.sync.repository.SyncReconciliationRunRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:57:14+09:00 2026-10-18T06:57:13.871Z INFO 20660 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.user.repository.DepartmentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:57:14+09:00 2026-10-18T06:57:13.871Z INFO 20660 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.user.repository.McpAccessTokenRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:57:14+09:00 2026-10-18T06:57:13.871Z INFO 20660 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.user.repository.RoleRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:57:14+09:00 2026-10-18T06:57:13.872Z INFO 20660 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.user.repository.UserRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:57:14+09:00 2026-10-18T06:57:13.872Z INFO 20660 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.user.repository.UserRoleRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:57:14+09:00 2026-10-18T06:57:13.872Z INFO 20660 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.worker.repository.EmbeddingJobAttemptRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:57:14+09:00 2026-10-18T06:57:13.872Z INFO 20660 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.worker.repository.IndexingEventRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:57:14+09:00 2026-10-18T06:57:13.872Z INFO 20660 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.worker.repository.WorkerNodeRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:57:14+09:00 2026-10-18T06:57:13.872Z INFO 20660 --- [docgrid] [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 17 ms. Found 0 Redis repository interfaces. +2026-10-18T15:57:14+09:00 2026-10-18T06:57:14.152Z WARN 20660 --- [docgrid] [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.ai.mcp.server.common.autoconfigure.annotations.McpServerAnnotationScannerAutoConfiguration' of type [org.springframework.ai.mcp.server.common.autoconfigure.annotations.McpServerAnnotationScannerAutoConfiguration] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying). Is this bean getting eagerly injected/applied to a currently created BeanPostProcessor [serverAnnotatedMethodBeanPostProcessor]? Check the corresponding BeanPostProcessor declaration and its dependencies/advisors. If this bean does not have to be post-processed, declare it with ROLE_INFRASTRUCTURE. +2026-10-18T15:57:14+09:00 2026-10-18T06:57:14.153Z WARN 20660 --- [docgrid] [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'serverAnnotatedBeanRegistry' of type [org.springframework.ai.mcp.server.common.autoconfigure.annotations.McpServerAnnotationScannerAutoConfiguration$ServerMcpAnnotatedBeans] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying). Is this bean getting eagerly injected/applied to a currently created BeanPostProcessor [serverAnnotatedMethodBeanPostProcessor]? Check the corresponding BeanPostProcessor declaration and its dependencies/advisors. If this bean does not have to be post-processed, declare it with ROLE_INFRASTRUCTURE. +2026-10-18T15:57:14+09:00 2026-10-18T06:57:14.158Z WARN 20660 --- [docgrid] [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'stringOrNumberMigrationVersionConverter' of type [org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration$StringOrNumberToMigrationVersionConverter] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying). Is this bean getting eagerly injected/applied to a currently created BeanPostProcessor [serverAnnotatedMethodBeanPostProcessor]? Check the corresponding BeanPostProcessor declaration and its dependencies/advisors. If this bean does not have to be post-processed, declare it with ROLE_INFRASTRUCTURE. +2026-10-18T15:57:14+09:00 2026-10-18T06:57:14.160Z WARN 20660 --- [docgrid] [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'spring.ai.mcp.server.annotation-scanner-org.springframework.ai.mcp.server.common.autoconfigure.annotations.McpServerAnnotationScannerProperties' of type [org.springframework.ai.mcp.server.common.autoconfigure.annotations.McpServerAnnotationScannerProperties] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying). Is this bean getting eagerly injected/applied to a currently created BeanPostProcessor [serverAnnotatedMethodBeanPostProcessor]? Check the corresponding BeanPostProcessor declaration and its dependencies/advisors. If this bean does not have to be post-processed, declare it with ROLE_INFRASTRUCTURE. +2026-10-18T15:57:14+09:00 2026-10-18T06:57:14.379Z INFO 20660 --- [docgrid] [ restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port 8080 (http) +2026-10-18T15:57:14+09:00 2026-10-18T06:57:14.388Z INFO 20660 --- [docgrid] [ restartedMain] o.apache.catalina.core.StandardService : Starting service [Tomcat] +2026-10-18T15:57:14+09:00 2026-10-18T06:57:14.388Z INFO 20660 --- [docgrid] [ restartedMain] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.55] +2026-10-18T15:57:14+09:00 2026-10-18T06:57:14.420Z INFO 20660 --- [docgrid] [ restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext +2026-10-18T15:57:14+09:00 2026-10-18T06:57:14.420Z INFO 20660 --- [docgrid] [ restartedMain] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1495 ms +2026-10-18T15:57:14+09:00 Standard Commons Logging discovery in action with spring-jcl: please remove commons-logging.jar from classpath in order to avoid potential conflicts +2026-10-18T15:57:14+09:00 2026-10-18T06:57:14.607Z INFO 20660 --- [docgrid] [ restartedMain] com.zaxxer.hikari.HikariDataSource : docgrid-local-db-pool - Starting... +2026-10-18T15:57:14+09:00 2026-10-18T06:57:14.679Z INFO 20660 --- [docgrid] [ restartedMain] com.zaxxer.hikari.pool.HikariPool : docgrid-local-db-pool - Added connection org.postgresql.jdbc.PgConnection@5ccf60a1 +2026-10-18T15:57:14+09:00 2026-10-18T06:57:14.680Z INFO 20660 --- [docgrid] [ restartedMain] com.zaxxer.hikari.HikariDataSource : docgrid-local-db-pool - Start completed. +2026-10-18T15:57:14+09:00 2026-10-18T06:57:14.698Z INFO 20660 --- [docgrid] [ restartedMain] org.flywaydb.core.FlywayExecutor : Database: jdbc:postgresql://127.0.0.1:55432/app?currentSchema=public&sslmode=disable (PostgreSQL 17.8) +2026-10-18T15:57:14+09:00 2026-10-18T06:57:14.748Z INFO 20660 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbValidate : Successfully validated 54 migrations (execution time 00:00.036s) +2026-10-18T15:57:14+09:00 2026-10-18T06:57:14.769Z INFO 20660 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Current version of schema "public": 52 +2026-10-18T15:57:14+09:00 2026-10-18T06:57:14.770Z INFO 20660 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Schema "public" is up to date. No migration necessary. +2026-10-18T15:57:14+09:00 2026-10-18T06:57:14.830Z INFO 20660 --- [docgrid] [ restartedMain] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default] +2026-10-18T15:57:14+09:00 2026-10-18T06:57:14.851Z INFO 20660 --- [docgrid] [ restartedMain] org.hibernate.Version : HHH000412: Hibernate ORM core version 6.6.53.Final +2026-10-18T15:57:14+09:00 2026-10-18T06:57:14.866Z INFO 20660 --- [docgrid] [ restartedMain] o.h.c.internal.RegionFactoryInitiator : HHH000026: Second-level cache disabled +2026-10-18T15:57:15+09:00 2026-10-18T06:57:15.001Z INFO 20660 --- [docgrid] [ restartedMain] o.s.o.j.p.SpringPersistenceUnitInfo : No LoadTimeWeaver setup: ignoring JPA class transformer +2026-10-18T15:57:15+09:00 2026-10-18T06:57:15.038Z INFO 20660 --- [docgrid] [ restartedMain] org.hibernate.orm.connections.pooling : HHH10001005: Database info: +2026-10-18T15:57:15+09:00 Database JDBC URL [Connecting through datasource 'HikariDataSource (docgrid-local-db-pool)'] +2026-10-18T15:57:15+09:00 Database driver: undefined/unknown +2026-10-18T15:57:15+09:00 Database version: 17.8 +2026-10-18T15:57:15+09:00 Autocommit mode: undefined/unknown +2026-10-18T15:57:15+09:00 Isolation level: undefined/unknown +2026-10-18T15:57:15+09:00 Minimum pool size: undefined/unknown +2026-10-18T15:57:15+09:00 Maximum pool size: undefined/unknown +2026-10-18T15:57:15+09:00 2026-10-18T06:57:15.794Z INFO 20660 --- [docgrid] [ restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) +2026-10-18T15:57:15+09:00 2026-10-18T06:57:15.825Z INFO 20660 --- [docgrid] [ restartedMain] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' +2026-10-18T15:57:16+09:00 2026-10-18T06:57:15.986Z INFO 20660 --- [docgrid] [ restartedMain] o.s.d.j.r.query.QueryEnhancerFactory : Hibernate is in classpath; If applicable, HQL parser will be used. +2026-10-18T15:57:17+09:00 2026-10-18T06:57:17.921Z WARN 20660 --- [docgrid] [ restartedMain] .s.s.UserDetailsServiceAutoConfiguration : +2026-10-18T15:57:17+09:00 +2026-10-18T15:57:17+09:00 Using generated security password: bd6e03ba-1d81-451a-abc2-ed9a4ccf21d8 +2026-10-18T15:57:17+09:00 +2026-10-18T15:57:17+09:00 This generated password is for development use only. Your security configuration must be updated before running your application in production. +2026-10-18T15:57:17+09:00 +2026-10-18T15:57:17+09:00 2026-10-18T06:57:17.925Z INFO 20660 --- [docgrid] [ restartedMain] r$InitializeUserDetailsManagerConfigurer : Global AuthenticationManager configured with UserDetailsService bean with name inMemoryUserDetailsManager +2026-10-18T15:57:18+09:00 2026-10-18T06:57:18.376Z INFO 20660 --- [docgrid] [ restartedMain] o.s.a.m.s.c.a.McpServerAutoConfiguration : Enable tools capabilities, notification: true +2026-10-18T15:57:18+09:00 2026-10-18T06:57:18.377Z INFO 20660 --- [docgrid] [ restartedMain] o.s.a.m.s.c.a.McpServerAutoConfiguration : Registered tools: 3 +2026-10-18T15:57:18+09:00 2026-10-18T06:57:18.377Z INFO 20660 --- [docgrid] [ restartedMain] o.s.a.m.s.c.a.McpServerAutoConfiguration : Enable resources capabilities, notification: true +2026-10-18T15:57:18+09:00 2026-10-18T06:57:18.377Z INFO 20660 --- [docgrid] [ restartedMain] o.s.a.m.s.c.a.McpServerAutoConfiguration : Enable resources templates capabilities, notification: true +2026-10-18T15:57:18+09:00 2026-10-18T06:57:18.377Z INFO 20660 --- [docgrid] [ restartedMain] o.s.a.m.s.c.a.McpServerAutoConfiguration : Enable prompts capabilities, notification: true +2026-10-18T15:57:18+09:00 2026-10-18T06:57:18.377Z INFO 20660 --- [docgrid] [ restartedMain] o.s.a.m.s.c.a.McpServerAutoConfiguration : Enable completions capabilities +2026-10-18T15:57:18+09:00 2026-10-18T06:57:18.571Z INFO 20660 --- [docgrid] [ restartedMain] o.s.b.d.a.OptionalLiveReloadServer : LiveReload server is running on port 35729 +2026-10-18T15:57:18+09:00 2026-10-18T06:57:18.607Z INFO 20660 --- [docgrid] [ restartedMain] o.s.m.s.b.SimpleBrokerMessageHandler : Starting... +2026-10-18T15:57:18+09:00 2026-10-18T06:57:18.608Z INFO 20660 --- [docgrid] [ restartedMain] o.s.m.s.b.SimpleBrokerMessageHandler : BrokerAvailabilityEvent[available=true, SimpleBrokerMessageHandler [org.springframework.messaging.simp.broker.DefaultSubscriptionRegistry@75e9b5b2]] +2026-10-18T15:57:18+09:00 2026-10-18T06:57:18.608Z INFO 20660 --- [docgrid] [ restartedMain] o.s.m.s.b.SimpleBrokerMessageHandler : Started. +2026-10-18T15:57:18+09:00 2026-10-18T06:57:18.617Z INFO 20660 --- [docgrid] [ restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port 8080 (http) with context path '/' +2026-10-18T15:57:18+09:00 2026-10-18T06:57:18.668Z INFO 20660 --- [docgrid] [ restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port 8081 (http) +2026-10-18T15:57:18+09:00 2026-10-18T06:57:18.669Z INFO 20660 --- [docgrid] [ restartedMain] o.apache.catalina.core.StandardService : Starting service [Tomcat] +2026-10-18T15:57:18+09:00 2026-10-18T06:57:18.669Z INFO 20660 --- [docgrid] [ restartedMain] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.55] +2026-10-18T15:57:18+09:00 2026-10-18T06:57:18.681Z INFO 20660 --- [docgrid] [ restartedMain] o.a.c.c.C.[Tomcat-1].[localhost].[/] : Initializing Spring embedded WebApplicationContext +2026-10-18T15:57:18+09:00 2026-10-18T06:57:18.682Z INFO 20660 --- [docgrid] [ restartedMain] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 63 ms +2026-10-18T15:57:18+09:00 Standard Commons Logging discovery in action with spring-jcl: please remove commons-logging.jar from classpath in order to avoid potential conflicts +2026-10-18T15:57:18+09:00 2026-10-18T06:57:18.690Z INFO 20660 --- [docgrid] [ restartedMain] o.s.b.a.e.web.EndpointLinksResolver : Exposing 2 endpoints beneath base path '/actuator' +2026-10-18T15:57:18+09:00 2026-10-18T06:57:18.712Z INFO 20660 --- [docgrid] [ restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port 8081 (http) with context path '/' +2026-10-18T15:57:18+09:00 2026-10-18T06:57:18.725Z INFO 20660 --- [docgrid] [ restartedMain] c.opensource.docgrid.DocgridApplication : Started DocgridApplication in 6.113 seconds (process running for 6.396) +2026-10-18T15:57:18+09:00 2026-10-18T06:57:18.821Z INFO 20660 --- [docgrid] [ restartedMain] c.o.d.d.w.l.WorkerLifecycleManager : 인덱싱 Worker를 등록했습니다. workerId=2, workerName=indexing-worker, instanceId=a46d3152-2db7-469e-bfaf-c645bf690cec +2026-10-18T15:57:19+09:00 2026-10-18T06:57:19.057Z INFO 20660 --- [docgrid] [nio-8081-exec-1] o.a.c.c.C.[Tomcat-1].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServletRegistration' +2026-10-18T15:57:19+09:00 2026-10-18T06:57:19.058Z INFO 20660 --- [docgrid] [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServletRegistration' +2026-10-18T15:57:19+09:00 2026-10-18T06:57:19.058Z INFO 20660 --- [docgrid] [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 0 ms +2026-10-18T15:57:22+09:00 2026-10-18T06:57:22.132Z INFO 20660 --- [docgrid] [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' +2026-10-18T15:57:22+09:00 2026-10-18T06:57:22.132Z INFO 20660 --- [docgrid] [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' +2026-10-18T15:57:22+09:00 2026-10-18T06:57:22.133Z INFO 20660 --- [docgrid] [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 1 ms +2026-10-18T15:57:26+09:00 2026-10-18T06:57:26.153Z INFO 20660 --- [docgrid] [nio-8080-exec-7] c.o.d.d.s.s.q.HybridSearchQueryService : [SEARCH] hybrid modelId=1 topK=3 terms=1 vectorPool=12 lexicalPool=2 merged=12 after=3 +2026-10-18T15:57:26+09:00 2026-10-18T06:57:26.159Z INFO 20660 --- [docgrid] [nio-8080-exec-7] c.o.d.d.search.service.SearchFacade : [SEARCH] live check userId=2 before=3 after=3 liveMs=5 +2026-10-18T15:57:26+09:00 2026-10-18T06:57:26.171Z INFO 20660 --- [docgrid] [nio-8080-exec-7] c.o.d.d.search.service.SearchFacade : [SEARCH] done queryId=8 results=3 latencyMs=298 +2026-10-18T15:57:26+09:00 2026-10-18T06:57:26.177Z INFO 20660 --- [docgrid] [nio-8080-exec-7] c.o.d.domain.rag.service.RagFacade : [RAG] enqueued queryId=8 responseId=8 +2026-10-18T15:57:26+09:00 2026-10-18T06:57:26.389Z INFO 20660 --- [docgrid] [nio-8080-exec-6] c.o.d.d.s.s.q.HybridSearchQueryService : [SEARCH] hybrid modelId=1 topK=3 terms=4 vectorPool=12 lexicalPool=4 merged=12 after=3 +2026-10-18T15:57:26+09:00 2026-10-18T06:57:26.394Z INFO 20660 --- [docgrid] [nio-8080-exec-6] c.o.d.d.search.service.SearchFacade : [SEARCH] live check userId=2 before=3 after=3 liveMs=5 +2026-10-18T15:57:26+09:00 2026-10-18T06:57:26.400Z INFO 20660 --- [docgrid] [nio-8080-exec-6] c.o.d.d.search.service.SearchFacade : [SEARCH] done queryId=9 results=3 latencyMs=193 +2026-10-18T15:57:26+09:00 2026-10-18T06:57:26.403Z INFO 20660 --- [docgrid] [nio-8080-exec-6] c.o.d.domain.rag.service.RagFacade : [RAG] enqueued queryId=9 responseId=9 +2026-10-18T15:57:26+09:00 2026-10-18T06:57:26.589Z INFO 20660 --- [docgrid] [nio-8080-exec-9] c.o.d.d.s.s.q.HybridSearchQueryService : [SEARCH] hybrid modelId=1 topK=3 terms=2 vectorPool=12 lexicalPool=3 merged=12 after=3 +2026-10-18T15:57:26+09:00 2026-10-18T06:57:26.594Z INFO 20660 --- [docgrid] [nio-8080-exec-9] c.o.d.d.search.service.SearchFacade : [SEARCH] live check userId=2 before=3 after=3 liveMs=5 +2026-10-18T15:57:26+09:00 2026-10-18T06:57:26.599Z INFO 20660 --- [docgrid] [nio-8080-exec-9] c.o.d.d.search.service.SearchFacade : [SEARCH] done queryId=10 results=3 latencyMs=144 +2026-10-18T15:57:26+09:00 2026-10-18T06:57:26.602Z INFO 20660 --- [docgrid] [nio-8080-exec-9] c.o.d.domain.rag.service.RagFacade : [RAG] enqueued queryId=10 responseId=10 +2026-10-18T15:57:26+09:00 2026-10-18T06:57:26.866Z ERROR 20660 --- [docgrid] [ag-worker-job-2] c.o.d.domain.rag.service.OllamaClient : Ollama 서버 호출 실패: I/O error on POST request for "<설정된 서버> null +2026-10-18T15:57:26+09:00 2026-10-18T06:57:26.866Z ERROR 20660 --- [docgrid] [ag-worker-job-1] c.o.d.domain.rag.service.OllamaClient : Ollama 서버 호출 실패: I/O error on POST request for "<설정된 서버> null +2026-10-18T15:57:26+09:00 2026-10-18T06:57:26.891Z WARN 20660 --- [docgrid] [ag-worker-job-2] c.o.d.domain.rag.service.RagFacade : [RAG] fallback queryId=9 errorCode=RAG-001 +2026-10-18T15:57:26+09:00 2026-10-18T06:57:26.891Z WARN 20660 --- [docgrid] [ag-worker-job-1] c.o.d.domain.rag.service.RagFacade : [RAG] fallback queryId=8 errorCode=RAG-001 diff --git a/docs/test-results/demo-fresh-20261018/runs/39105569049-1/runtime/0806f0385fd940dc8968a8446fafb9c2/events.jsonl b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/runtime/0806f0385fd940dc8968a8446fafb9c2/events.jsonl new file mode 100644 index 00000000..fc462053 --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/runtime/0806f0385fd940dc8968a8446fafb9c2/events.jsonl @@ -0,0 +1,5 @@ +{"timestamp": "2026-10-18T15:56:58+09:00", "message": "[시작] 로컬 시연 세션 0806f0385fd940dc8968a8446fafb9c2 · 범위 search"} +{"timestamp": "2026-10-18T15:57:23+09:00", "message": "[준비 완료] Web: <설정된 서버> · verify로 예제 시연을 검사하세요."} +{"timestamp": "2026-10-18T15:57:27+09:00", "message": "[검증 통과] 업로드·인덱싱·검색·원본 검사 완료. 기록: .demo/reports/f1a295ef524b4da7a989b8acd54bc2ca/summary.json"} +{"timestamp": "2026-10-18T15:57:30+09:00", "message": "[종료 완료] 소유 서버·컨테이너 중지, 데이터·원본·모델 캐시 보존"} +{"timestamp": "2026-10-18T15:57:30+09:00", "message": "[종료] 이미 종료된 세션입니다."} diff --git a/docs/test-results/demo-fresh-20261018/runs/39105569049-1/runtime/0806f0385fd940dc8968a8446fafb9c2/frontend.log b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/runtime/0806f0385fd940dc8968a8446fafb9c2/frontend.log new file mode 100644 index 00000000..0f023103 --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/runtime/0806f0385fd940dc8968a8446fafb9c2/frontend.log @@ -0,0 +1,65 @@ +2026-10-18T15:57:19+09:00 +2026-10-18T15:57:19+09:00 > <이메일 생략> dev +2026-10-18T15:57:19+09:00 > WRANGLER_LOG_PATH=.wrangler/wrangler.log vinext dev --hostname 127.0.0.1 +2026-10-18T15:57:19+09:00 +2026-10-18T15:57:19+09:00 +2026-10-18T15:57:19+09:00 vinext dev (Vite 8.0.13) +2026-10-18T15:57:19+09:00 +2026-10-18T15:57:20+09:00 Using secrets defined in .env.local +2026-10-18T15:57:21+09:00 ➜ Local: <설정된 서버> +2026-10-18T15:57:21+09:00 ➜ Debug: <설정된 서버> +2026-10-18T15:57:22+09:00 GET /api/backend/departments 200 in 245ms +2026-10-18T15:57:23+09:00 GET /login 200 in 1.1s (compile: 1792306639.4s, render: 1.0s) +2026-10-18T15:57:23+09:00 GET /api/backend/departments 200 in 17ms +2026-10-18T15:57:23+09:00 GET /login 200 in 29ms (compile: 1792306639.4s, render: 18ms) +2026-10-18T15:57:24+09:00 POST /api/backend/auth/login 200 in 157ms +2026-10-18T15:57:25+09:00 POST /api/backend/api/documents 201 in 353ms +2026-10-18T15:57:25+09:00 POST /api/backend/api/documents 201 in 25ms +2026-10-18T15:57:25+09:00 POST /api/backend/api/documents 201 in 22ms +2026-10-18T15:57:25+09:00 POST /api/backend/api/documents 201 in 21ms +2026-10-18T15:57:25+09:00 POST /api/backend/api/documents 201 in 20ms +2026-10-18T15:57:25+09:00 POST /api/backend/api/documents 201 in 19ms +2026-10-18T15:57:25+09:00 POST /api/backend/api/documents 201 in 20ms +2026-10-18T15:57:25+09:00 POST /api/backend/api/documents 201 in 20ms +2026-10-18T15:57:25+09:00 POST /api/backend/api/documents 201 in 21ms +2026-10-18T15:57:25+09:00 POST /api/backend/api/documents 201 in 25ms +2026-10-18T15:57:25+09:00 POST /api/backend/api/documents 201 in 24ms +2026-10-18T15:57:25+09:00 POST /api/backend/api/documents 201 in 19ms +2026-10-18T15:57:25+09:00 POST /api/backend/api/documents 201 in 21ms +2026-10-18T15:57:25+09:00 POST /api/backend/api/documents 201 in 23ms +2026-10-18T15:57:25+09:00 POST /api/backend/api/documents 201 in 20ms +2026-10-18T15:57:25+09:00 GET /api/backend/api/documents/3/status 200 in 55ms +2026-10-18T15:57:25+09:00 GET /api/backend/api/documents/4/status 200 in 34ms +2026-10-18T15:57:25+09:00 GET /api/backend/api/documents/5/status 200 in 18ms +2026-10-18T15:57:25+09:00 GET /api/backend/api/documents/6/status 200 in 19ms +2026-10-18T15:57:25+09:00 GET /api/backend/api/documents/7/status 200 in 22ms +2026-10-18T15:57:25+09:00 GET /api/backend/api/documents/8/status 200 in 25ms +2026-10-18T15:57:25+09:00 GET /api/backend/api/documents/9/status 200 in 22ms +2026-10-18T15:57:25+09:00 GET /api/backend/api/documents/10/status 200 in 23ms +2026-10-18T15:57:25+09:00 GET /api/backend/api/documents/11/status 200 in 19ms +2026-10-18T15:57:25+09:00 GET /api/backend/api/documents/12/status 200 in 20ms +2026-10-18T15:57:25+09:00 GET /api/backend/api/documents/13/status 200 in 22ms +2026-10-18T15:57:25+09:00 GET /api/backend/api/documents/14/status 200 in 17ms +2026-10-18T15:57:25+09:00 GET /api/backend/api/documents/15/status 200 in 19ms +2026-10-18T15:57:25+09:00 GET /api/backend/api/documents/16/status 200 in 18ms +2026-10-18T15:57:25+09:00 GET /api/backend/api/documents/17/status 200 in 19ms +2026-10-18T15:57:26+09:00 POST /api/backend/search 200 in 345ms +2026-10-18T15:57:26+09:00 POST /api/backend/search 200 in 218ms +2026-10-18T15:57:26+09:00 GET /api/backend/api/documents/8/content 200 in 30ms +2026-10-18T15:57:26+09:00 POST /api/backend/search 200 in 167ms +2026-10-18T15:57:26+09:00 GET /api/backend/api/documents/3/file 200 in 22ms +2026-10-18T15:57:26+09:00 GET /api/backend/api/documents/4/file 200 in 34ms +2026-10-18T15:57:26+09:00 GET /api/backend/api/documents/5/file 200 in 25ms +2026-10-18T15:57:26+09:00 GET /api/backend/api/documents/6/file 200 in 17ms +2026-10-18T15:57:26+09:00 GET /api/backend/api/documents/7/file 200 in 15ms +2026-10-18T15:57:26+09:00 GET /api/backend/api/documents/8/file 200 in 16ms +2026-10-18T15:57:26+09:00 GET /api/backend/api/documents/9/file 200 in 17ms +2026-10-18T15:57:26+09:00 GET /api/backend/api/documents/10/file 200 in 17ms +2026-10-18T15:57:26+09:00 GET /api/backend/api/documents/11/file 200 in 17ms +2026-10-18T15:57:26+09:00 GET /api/backend/api/documents/12/file 200 in 16ms +2026-10-18T15:57:26+09:00 GET /api/backend/api/documents/13/file 200 in 16ms +2026-10-18T15:57:26+09:00 GET /api/backend/api/documents/14/file 200 in 21ms +2026-10-18T15:57:26+09:00 GET /api/backend/api/documents/15/file 200 in 23ms +2026-10-18T15:57:26+09:00 GET /api/backend/api/documents/16/file 200 in 18ms +2026-10-18T15:57:26+09:00 GET /api/backend/api/documents/17/file 200 in 18ms +2026-10-18T15:57:27+09:00 ➜ Tunnel closed diff --git a/docs/test-results/demo-fresh-20261018/runs/39105569049-1/runtime/0806f0385fd940dc8968a8446fafb9c2/services.log b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/runtime/0806f0385fd940dc8968a8446fafb9c2/services.log new file mode 100644 index 00000000..fbb818e5 --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/runtime/0806f0385fd940dc8968a8446fafb9c2/services.log @@ -0,0 +1,14 @@ +2026-10-18T15:56:58+09:00 [local-services] 로컬 PostgreSQL·Valkey·Embedding Provider를 시작합니다. +2026-10-18T15:56:58+09:00 Container docgrid-valkey Starting +2026-10-18T15:56:58+09:00 Container docgrid-embedding Starting +2026-10-18T15:56:58+09:00 Container docgrid-postgres17 Starting +2026-10-18T15:56:58+09:00 Container docgrid-embedding Started +2026-10-18T15:56:58+09:00 Container docgrid-postgres17 Started +2026-10-18T15:56:59+09:00 Container docgrid-valkey Started +2026-10-18T15:56:59+09:00 [OK] 대상 PostgreSQL 준비 완료 +2026-10-18T15:56:59+09:00 [OK] Valkey 준비 완료 +2026-10-18T15:57:03+09:00 [OK] Embedding Provider 준비 완료 +2026-10-18T15:57:04+09:00 [OK] 대상 PostgreSQL 인증·pgvector 0.8.1 확인 +2026-10-18T15:57:04+09:00 [OK] Valkey 연결 가능 +2026-10-18T15:57:04+09:00 [OK] Embedding Provider 준비 완료 (<설정된 서버>) +2026-10-18T15:57:04+09:00 [OK] 검색 범위 준비 완료 · 생성 답변은 미검증 diff --git a/docs/test-results/demo-fresh-20261018/runs/39105569049-1/runtime/0806f0385fd940dc8968a8446fafb9c2/verify-9bb4bd37d577445d9fa5344f8a9476fa.log b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/runtime/0806f0385fd940dc8968a8446fafb9c2/verify-9bb4bd37d577445d9fa5344f8a9476fa.log new file mode 100644 index 00000000..f766982e --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/runtime/0806f0385fd940dc8968a8446fafb9c2/verify-9bb4bd37d577445d9fa5344f8a9476fa.log @@ -0,0 +1,49 @@ +2026-10-18T15:57:24+09:00 [실행] 20261018T155724600405+0900 · 범위 search +2026-10-18T15:57:24+09:00 [계정] 로그인 완료 +2026-10-18T15:57:25+09:00 [업로드] 1/15 · 문서 3 +2026-10-18T15:57:25+09:00 [업로드] 2/15 · 문서 4 +2026-10-18T15:57:25+09:00 [업로드] 3/15 · 문서 5 +2026-10-18T15:57:25+09:00 [업로드] 4/15 · 문서 6 +2026-10-18T15:57:25+09:00 [업로드] 5/15 · 문서 7 +2026-10-18T15:57:25+09:00 [업로드] 6/15 · 문서 8 +2026-10-18T15:57:25+09:00 [업로드] 7/15 · 문서 9 +2026-10-18T15:57:25+09:00 [업로드] 8/15 · 문서 10 +2026-10-18T15:57:25+09:00 [업로드] 9/15 · 문서 11 +2026-10-18T15:57:25+09:00 [업로드] 10/15 · 문서 12 +2026-10-18T15:57:25+09:00 [업로드] 11/15 · 문서 13 +2026-10-18T15:57:25+09:00 [업로드] 12/15 · 문서 14 +2026-10-18T15:57:25+09:00 [업로드] 13/15 · 문서 15 +2026-10-18T15:57:25+09:00 [업로드] 14/15 · 문서 16 +2026-10-18T15:57:25+09:00 [업로드] 15/15 · 문서 17 +2026-10-18T15:57:25+09:00 [인덱싱] INDEXED 15/15 · 처리 중 0 · 대기 0 · 실패 0 (0.4초) +2026-10-18T15:57:26+09:00 [검색] 통과: 결과 3건, 기대 문서 포함 여부 확인 +2026-10-18T15:57:26+09:00 [RAG] 미검증: search 범위에서는 생성 답변 성공을 주장하지 않습니다. +2026-10-18T15:57:26+09:00 [질문 1] 검색 PASS · 생성 답변 NOT_RUN +2026-10-18T15:57:26+09:00 [검색] 통과: 결과 3건, 기대 문서 포함 여부 확인 +2026-10-18T15:57:26+09:00 [RAG] 미검증: search 범위에서는 생성 답변 성공을 주장하지 않습니다. +2026-10-18T15:57:26+09:00 [질문 2] 검색 PASS · 생성 답변 NOT_RUN +2026-10-18T15:57:26+09:00 [검색] 통과: 결과 3건, 기대 문서 포함 여부 확인 +2026-10-18T15:57:26+09:00 [RAG] 미검증: search 범위에서는 생성 답변 성공을 주장하지 않습니다. +2026-10-18T15:57:26+09:00 [질문 3] 검색 PASS · 생성 답변 NOT_RUN +2026-10-18T15:57:26+09:00 [원본] 문서 3: PASS +2026-10-18T15:57:26+09:00 [원본] 문서 4: PASS +2026-10-18T15:57:26+09:00 [원본] 문서 5: PASS +2026-10-18T15:57:26+09:00 [원본] 문서 6: PASS +2026-10-18T15:57:26+09:00 [원본] 문서 7: PASS +2026-10-18T15:57:26+09:00 [원본] 문서 8: PASS +2026-10-18T15:57:26+09:00 [원본] 문서 9: PASS +2026-10-18T15:57:26+09:00 [원본] 문서 10: PASS +2026-10-18T15:57:26+09:00 [원본] 문서 11: PASS +2026-10-18T15:57:26+09:00 [원본] 문서 12: PASS +2026-10-18T15:57:26+09:00 [원본] 문서 13: PASS +2026-10-18T15:57:26+09:00 [원본] 문서 14: PASS +2026-10-18T15:57:26+09:00 [원본] 문서 15: PASS +2026-10-18T15:57:26+09:00 [원본] 문서 16: PASS +2026-10-18T15:57:26+09:00 [원본] 문서 17: PASS +2026-10-18T15:57:26+09:00 [업로드] PASS · 15/15 +2026-10-18T15:57:26+09:00 [인덱싱] PASS · 15/15 +2026-10-18T15:57:26+09:00 [검색] PASS · 3/3 +2026-10-18T15:57:26+09:00 [원본 해시] PASS · 15/15 +2026-10-18T15:57:26+09:00 [생성 답변·인용] NOT_RUN · 0/0 +2026-10-18T15:57:26+09:00 [문서 ID 재사용] PASS · 15/15 +2026-10-18T15:57:26+09:00 [최종] 종료 코드 0 diff --git a/docs/test-results/demo-fresh-20261018/runs/39105569049-1/runtime/1bd07e5ccd714d77a817b67f1d272a0f/backend.log b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/runtime/1bd07e5ccd714d77a817b67f1d272a0f/backend.log new file mode 100644 index 00000000..47307726 --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/runtime/1bd07e5ccd714d77a817b67f1d272a0f/backend.log @@ -0,0 +1,293 @@ +2026-10-18T15:54:41+09:00 Downloading <설정된 서버> +2026-10-18T15:54:43+09:00 .............10%.............20%.............30%.............40%.............50%..............60%.............70%.............80%.............90%.............100% +2026-10-18T15:54:44+09:00 +2026-10-18T15:54:44+09:00 Welcome to Gradle 8.14.5! +2026-10-18T15:54:44+09:00 +2026-10-18T15:54:44+09:00 Here are the highlights of this release: +2026-10-18T15:54:44+09:00 - Java 24 support +2026-10-18T15:54:44+09:00 - GraalVM Native Image toolchain selection +2026-10-18T15:54:44+09:00 - Enhancements to test reporting +2026-10-18T15:54:44+09:00 - Build Authoring improvements +2026-10-18T15:54:44+09:00 +2026-10-18T15:54:44+09:00 For more details see <설정된 서버> +2026-10-18T15:54:44+09:00 +2026-10-18T15:54:44+09:00 To honour the JVM settings for this build a single-use Daemon process will be forked. For more on this, please refer to <설정된 서버> in the Gradle documentation. +2026-10-18T15:54:45+09:00 Daemon will be stopped at the end of the build +2026-10-18T15:55:50+09:00 > Task :compileJava +2026-10-18T15:55:50+09:00 > Task :processResources +2026-10-18T15:55:50+09:00 > Task :classes +2026-10-18T15:55:50+09:00 > Task :resolveMainClassName +2026-10-18T15:55:52+09:00 +2026-10-18T15:55:52+09:00 > Task :bootRun +2026-10-18T15:55:52+09:00 Standard Commons Logging discovery in action with spring-jcl: please remove commons-logging.jar from classpath in order to avoid potential conflicts +2026-10-18T15:55:52+09:00 Standard Commons Logging discovery in action with spring-jcl: please remove commons-logging.jar from classpath in order to avoid potential conflicts +2026-10-18T15:55:52+09:00 +2026-10-18T15:55:52+09:00 . ____ _ __ _ _ +2026-10-18T15:55:52+09:00 /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ +2026-10-18T15:55:52+09:00 ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ +2026-10-18T15:55:52+09:00 \\/ ___)| |_)| | | | | || (_| | ) ) ) ) +2026-10-18T15:55:52+09:00 ' |____| .__|_| |_|_| |_\__, | / / / / +2026-10-18T15:55:52+09:00 =========|_|==============|___/=/_/_/_/ +2026-10-18T15:55:52+09:00 +2026-10-18T15:55:52+09:00 :: Spring Boot :: (v3.5.16) +2026-10-18T15:55:52+09:00 +2026-10-18T15:55:52+09:00 2026-10-18T06:55:52.047Z INFO 9811 --- [docgrid] [ restartedMain] c.opensource.docgrid.DocgridApplication : Starting DocgridApplication using Java 17.0.20.1 with PID 9811 (<작업공간>/backend/build/classes/java/main started by runner in <작업공간>) +2026-10-18T15:55:52+09:00 2026-10-18T06:55:52.049Z INFO 9811 --- [docgrid] [ restartedMain] c.opensource.docgrid.DocgridApplication : The following 1 profile is active: "local" +2026-10-18T15:55:52+09:00 2026-10-18T06:55:52.074Z INFO 9811 --- [docgrid] [ restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable +2026-10-18T15:55:52+09:00 2026-10-18T06:55:52.074Z INFO 9811 --- [docgrid] [ restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' +2026-10-18T15:55:52+09:00 2026-10-18T06:55:52.836Z INFO 9811 --- [docgrid] [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode +2026-10-18T15:55:52+09:00 2026-10-18T06:55:52.837Z INFO 9811 --- [docgrid] [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2026-10-18T15:55:52+09:00 2026-10-18T06:55:52.961Z INFO 9811 --- [docgrid] [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 119 ms. Found 31 JPA repository interfaces. +2026-10-18T15:55:52+09:00 2026-10-18T06:55:52.969Z INFO 9811 --- [docgrid] [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode +2026-10-18T15:55:52+09:00 2026-10-18T06:55:52.969Z INFO 9811 --- [docgrid] [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode. +2026-10-18T15:55:53+09:00 2026-10-18T06:55:52.987Z INFO 9811 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.collection.repository.CollectionDocumentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:55:53+09:00 2026-10-18T06:55:52.987Z INFO 9811 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.collection.repository.CollectionRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:55:53+09:00 2026-10-18T06:55:52.987Z INFO 9811 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.document.repository.DocumentChunkRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:55:53+09:00 2026-10-18T06:55:52.987Z INFO 9811 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.document.repository.DocumentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:55:53+09:00 2026-10-18T06:55:52.987Z INFO 9811 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.document.repository.DocumentVersionRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:55:53+09:00 2026-10-18T06:55:52.988Z INFO 9811 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.document.repository.FileObjectRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:55:53+09:00 2026-10-18T06:55:52.988Z INFO 9811 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.embedding.repository.EmbeddingJobRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:55:53+09:00 2026-10-18T06:55:52.988Z INFO 9811 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.embedding.repository.EmbeddingModelRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:55:53+09:00 2026-10-18T06:55:52.988Z INFO 9811 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.embedding.repository.EmbeddingRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:55:53+09:00 2026-10-18T06:55:52.988Z INFO 9811 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.permission.repository.CollectionPermissionRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:55:53+09:00 2026-10-18T06:55:52.988Z INFO 9811 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.permission.repository.DocumentPermissionRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:55:53+09:00 2026-10-18T06:55:52.988Z INFO 9811 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.permission.repository.UserDocumentAccessCacheRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:55:53+09:00 2026-10-18T06:55:52.989Z INFO 9811 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.rag.repository.RagResponseRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:55:53+09:00 2026-10-18T06:55:52.989Z INFO 9811 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.rag.repository.ResponseCitationRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:55:53+09:00 2026-10-18T06:55:52.989Z INFO 9811 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.search.repository.SearchConversationRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:55:53+09:00 2026-10-18T06:55:52.989Z INFO 9811 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.search.repository.SearchQueryRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:55:53+09:00 2026-10-18T06:55:52.989Z INFO 9811 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.search.repository.SearchResultRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:55:53+09:00 2026-10-18T06:55:52.989Z INFO 9811 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.search.repository.VectorSearchRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:55:53+09:00 2026-10-18T06:55:52.990Z INFO 9811 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.sync.repository.SyncAdminActionRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:55:53+09:00 2026-10-18T06:55:52.990Z INFO 9811 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.sync.repository.SyncConsistencyIssueRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:55:53+09:00 2026-10-18T06:55:52.990Z INFO 9811 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.sync.repository.SyncEventDeliveryAttemptRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:55:53+09:00 2026-10-18T06:55:52.990Z INFO 9811 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.sync.repository.SyncOutboxEventRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:55:53+09:00 2026-10-18T06:55:52.990Z INFO 9811 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.sync.repository.SyncReconciliationRunRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:55:53+09:00 2026-10-18T06:55:52.990Z INFO 9811 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.user.repository.DepartmentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:55:53+09:00 2026-10-18T06:55:52.990Z INFO 9811 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.user.repository.McpAccessTokenRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:55:53+09:00 2026-10-18T06:55:52.991Z INFO 9811 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.user.repository.RoleRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:55:53+09:00 2026-10-18T06:55:52.991Z INFO 9811 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.user.repository.UserRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:55:53+09:00 2026-10-18T06:55:52.991Z INFO 9811 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.user.repository.UserRoleRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:55:53+09:00 2026-10-18T06:55:52.992Z INFO 9811 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.worker.repository.EmbeddingJobAttemptRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:55:53+09:00 2026-10-18T06:55:52.992Z INFO 9811 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.worker.repository.IndexingEventRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:55:53+09:00 2026-10-18T06:55:52.993Z INFO 9811 --- [docgrid] [ restartedMain] .RepositoryConfigurationExtensionSupport : Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.opensource.docgrid.domain.worker.repository.WorkerNodeRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2026-10-18T15:55:53+09:00 2026-10-18T06:55:52.993Z INFO 9811 --- [docgrid] [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 19 ms. Found 0 Redis repository interfaces. +2026-10-18T15:55:53+09:00 2026-10-18T06:55:53.261Z WARN 9811 --- [docgrid] [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.ai.mcp.server.common.autoconfigure.annotations.McpServerAnnotationScannerAutoConfiguration' of type [org.springframework.ai.mcp.server.common.autoconfigure.annotations.McpServerAnnotationScannerAutoConfiguration] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying). Is this bean getting eagerly injected/applied to a currently created BeanPostProcessor [serverAnnotatedMethodBeanPostProcessor]? Check the corresponding BeanPostProcessor declaration and its dependencies/advisors. If this bean does not have to be post-processed, declare it with ROLE_INFRASTRUCTURE. +2026-10-18T15:55:53+09:00 2026-10-18T06:55:53.262Z WARN 9811 --- [docgrid] [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'serverAnnotatedBeanRegistry' of type [org.springframework.ai.mcp.server.common.autoconfigure.annotations.McpServerAnnotationScannerAutoConfiguration$ServerMcpAnnotatedBeans] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying). Is this bean getting eagerly injected/applied to a currently created BeanPostProcessor [serverAnnotatedMethodBeanPostProcessor]? Check the corresponding BeanPostProcessor declaration and its dependencies/advisors. If this bean does not have to be post-processed, declare it with ROLE_INFRASTRUCTURE. +2026-10-18T15:55:53+09:00 2026-10-18T06:55:53.267Z WARN 9811 --- [docgrid] [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'stringOrNumberMigrationVersionConverter' of type [org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration$StringOrNumberToMigrationVersionConverter] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying). Is this bean getting eagerly injected/applied to a currently created BeanPostProcessor [serverAnnotatedMethodBeanPostProcessor]? Check the corresponding BeanPostProcessor declaration and its dependencies/advisors. If this bean does not have to be post-processed, declare it with ROLE_INFRASTRUCTURE. +2026-10-18T15:55:53+09:00 2026-10-18T06:55:53.269Z WARN 9811 --- [docgrid] [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'spring.ai.mcp.server.annotation-scanner-org.springframework.ai.mcp.server.common.autoconfigure.annotations.McpServerAnnotationScannerProperties' of type [org.springframework.ai.mcp.server.common.autoconfigure.annotations.McpServerAnnotationScannerProperties] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying). Is this bean getting eagerly injected/applied to a currently created BeanPostProcessor [serverAnnotatedMethodBeanPostProcessor]? Check the corresponding BeanPostProcessor declaration and its dependencies/advisors. If this bean does not have to be post-processed, declare it with ROLE_INFRASTRUCTURE. +2026-10-18T15:55:53+09:00 2026-10-18T06:55:53.513Z INFO 9811 --- [docgrid] [ restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port 8080 (http) +2026-10-18T15:55:53+09:00 2026-10-18T06:55:53.523Z INFO 9811 --- [docgrid] [ restartedMain] o.apache.catalina.core.StandardService : Starting service [Tomcat] +2026-10-18T15:55:53+09:00 2026-10-18T06:55:53.523Z INFO 9811 --- [docgrid] [ restartedMain] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.55] +2026-10-18T15:55:53+09:00 2026-10-18T06:55:53.555Z INFO 9811 --- [docgrid] [ restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext +2026-10-18T15:55:53+09:00 2026-10-18T06:55:53.556Z INFO 9811 --- [docgrid] [ restartedMain] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1481 ms +2026-10-18T15:55:53+09:00 Standard Commons Logging discovery in action with spring-jcl: please remove commons-logging.jar from classpath in order to avoid potential conflicts +2026-10-18T15:55:53+09:00 2026-10-18T06:55:53.725Z INFO 9811 --- [docgrid] [ restartedMain] com.zaxxer.hikari.HikariDataSource : docgrid-local-db-pool - Starting... +2026-10-18T15:55:53+09:00 2026-10-18T06:55:53.808Z INFO 9811 --- [docgrid] [ restartedMain] com.zaxxer.hikari.pool.HikariPool : docgrid-local-db-pool - Added connection org.postgresql.jdbc.PgConnection@26d752a1 +2026-10-18T15:55:53+09:00 2026-10-18T06:55:53.810Z INFO 9811 --- [docgrid] [ restartedMain] com.zaxxer.hikari.HikariDataSource : docgrid-local-db-pool - Start completed. +2026-10-18T15:55:53+09:00 2026-10-18T06:55:53.829Z INFO 9811 --- [docgrid] [ restartedMain] org.flywaydb.core.FlywayExecutor : Database: jdbc:postgresql://127.0.0.1:55432/app?currentSchema=public&sslmode=disable (PostgreSQL 17.8) +2026-10-18T15:55:53+09:00 2026-10-18T06:55:53.866Z INFO 9811 --- [docgrid] [ restartedMain] o.f.c.i.s.JdbcTableSchemaHistory : Schema history table "public"."flyway_schema_history" does not exist yet +2026-10-18T15:55:53+09:00 2026-10-18T06:55:53.868Z INFO 9811 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbValidate : Successfully validated 54 migrations (execution time 00:00.026s) +2026-10-18T15:55:53+09:00 2026-10-18T06:55:53.880Z INFO 9811 --- [docgrid] [ restartedMain] o.f.c.i.s.JdbcTableSchemaHistory : Creating Schema History table "public"."flyway_schema_history" ... +2026-10-18T15:55:53+09:00 2026-10-18T06:55:53.922Z INFO 9811 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Current version of schema "public": << Empty Schema >> +2026-10-18T15:55:53+09:00 2026-10-18T06:55:53.926Z INFO 9811 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "1 - init schema" +2026-10-18T15:55:53+09:00 2026-10-18T06:55:53.940Z INFO 9811 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "2 - create departments" +2026-10-18T15:55:53+09:00 2026-10-18T06:55:53.950Z INFO 9811 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "3 - create users" +2026-10-18T15:55:53+09:00 2026-10-18T06:55:53.958Z INFO 9811 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "4 - create file objects" +2026-10-18T15:55:53+09:00 2026-10-18T06:55:53.966Z INFO 9811 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "5 - create documents" +2026-10-18T15:55:53+09:00 2026-10-18T06:55:53.974Z INFO 9811 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "6 - create document versions" +2026-10-18T15:55:53+09:00 2026-10-18T06:55:53.983Z INFO 9811 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "7 - create collections" +2026-10-18T15:55:54+09:00 2026-10-18T06:55:53.990Z INFO 9811 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "8 - create collection documents" +2026-10-18T15:55:54+09:00 2026-10-18T06:55:53.998Z INFO 9811 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "9 - create roles" +2026-10-18T15:55:54+09:00 2026-10-18T06:55:54.003Z INFO 9811 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "10 - create user roles" +2026-10-18T15:55:54+09:00 2026-10-18T06:55:54.009Z INFO 9811 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "11 - create collection permissions" +2026-10-18T15:55:54+09:00 2026-10-18T06:55:54.018Z INFO 9811 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "12 - create document permissions" +2026-10-18T15:55:54+09:00 2026-10-18T06:55:54.026Z INFO 9811 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "13 - create user document access cache" +2026-10-18T15:55:54+09:00 2026-10-18T06:55:54.029Z WARN 9811 --- [docgrid] [ restartedMain] o.f.c.i.s.DefaultSqlScriptExecutor : DB: identifier "uk_user_document_access_cache_user_id_document_id_source_type_source_id" will be truncated to "uk_user_document_access_cache_user_id_document_id_source_type_s" (SQL State: 42622 - Error Code: 0) +2026-10-18T15:55:54+09:00 2026-10-18T06:55:54.034Z INFO 9811 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "14 - create embedding models" +2026-10-18T15:55:54+09:00 2026-10-18T06:55:54.041Z INFO 9811 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "15 - create document chunks" +2026-10-18T15:55:54+09:00 2026-10-18T06:55:54.047Z INFO 9811 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "16 - create embeddings" +2026-10-18T15:55:54+09:00 2026-10-18T06:55:54.053Z INFO 9811 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "17 - create worker nodes" +2026-10-18T15:55:54+09:00 2026-10-18T06:55:54.059Z INFO 9811 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "18 - create embedding jobs" +2026-10-18T15:55:54+09:00 2026-10-18T06:55:54.065Z INFO 9811 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "19 - create embedding job attempts" +2026-10-18T15:55:54+09:00 2026-10-18T06:55:54.070Z INFO 9811 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "20 - create indexing events" +2026-10-18T15:55:54+09:00 2026-10-18T06:55:54.076Z INFO 9811 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "21 - create search queries" +2026-10-18T15:55:54+09:00 2026-10-18T06:55:54.081Z INFO 9811 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "22 - create search results" +2026-10-18T15:55:54+09:00 2026-10-18T06:55:54.088Z INFO 9811 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "23 - create rag responses" +2026-10-18T15:55:54+09:00 2026-10-18T06:55:54.094Z INFO 9811 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "24 - create response citations" +2026-10-18T15:55:54+09:00 2026-10-18T06:55:54.099Z INFO 9811 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "25 - create failover events" +2026-10-18T15:55:54+09:00 2026-10-18T06:55:54.105Z INFO 9811 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "26 - create mcp access tokens" +2026-10-18T15:55:54+09:00 2026-10-18T06:55:54.110Z INFO 9811 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "27 - add embedding model constraints" +2026-10-18T15:55:54+09:00 2026-10-18T06:55:54.114Z INFO 9811 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "28 - seed roles departments admin" +2026-10-18T15:55:54+09:00 2026-10-18T06:55:54.119Z INFO 9811 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "29 - add file object deduplication constraint" +2026-10-18T15:55:54+09:00 2026-10-18T06:55:54.124Z INFO 9811 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "30 - add document version upload metadata" +2026-10-18T15:55:54+09:00 2026-10-18T06:55:54.130Z INFO 9811 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "31 - add worker instance id" +2026-10-18T15:55:54+09:00 2026-10-18T06:55:54.135Z INFO 9811 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "32 - convert vector columns to pgvector" +2026-10-18T15:55:54+09:00 2026-10-18T06:55:54.143Z INFO 9811 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "33 - add embedding job claim token" +2026-10-18T15:55:54+09:00 2026-10-18T06:55:54.147Z INFO 9811 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "34 - add claim token to embedding job attempts" +2026-10-18T15:55:54+09:00 2026-10-18T06:55:54.150Z INFO 9811 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "35 - add embedding job next retry at" +2026-10-18T15:55:54+09:00 2026-10-18T06:55:54.154Z INFO 9811 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "36 - create sync outbox events" +2026-10-18T15:55:54+09:00 2026-10-18T06:55:54.161Z INFO 9811 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "37 - create sync consistency issues" +2026-10-18T15:55:54+09:00 2026-10-18T06:55:54.168Z INFO 9811 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "38 - create sync admin actions" +2026-10-18T15:55:54+09:00 2026-10-18T06:55:54.173Z INFO 9811 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "39 - create sync event delivery attempts" +2026-10-18T15:55:54+09:00 2026-10-18T06:55:54.180Z INFO 9811 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "40 - alter rag responses answer text nullable" +2026-10-18T15:55:54+09:00 2026-10-18T06:55:54.183Z INFO 9811 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "41 - create search conversations" +2026-10-18T15:55:54+09:00 2026-10-18T06:55:54.187Z INFO 9811 --- [docgrid] [ restartedMain] o.f.c.i.s.DefaultSqlScriptExecutor : +--------+ +2026-10-18T15:55:54+09:00 | setval | +2026-10-18T15:55:54+09:00 +--------+ +2026-10-18T15:55:54+09:00 | 1 | +2026-10-18T15:55:54+09:00 +--------+ +2026-10-18T15:55:54+09:00 +2026-10-18T15:55:54+09:00 2026-10-18T06:55:54.191Z INFO 9811 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "42 - create collection closure" +2026-10-18T15:55:54+09:00 2026-10-18T06:55:54.196Z INFO 9811 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "43 - add rag responses claimed at" +2026-10-18T15:55:54+09:00 2026-10-18T06:55:54.198Z INFO 9811 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "44 - create ha probe writes" +2026-10-18T15:55:54+09:00 2026-10-18T06:55:54.202Z INFO 9811 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "45 - create ha probe idempotent writes" +2026-10-18T15:55:54+09:00 2026-10-18T06:55:54.205Z INFO 9811 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "46 - enable pg trgm chunk text index" +2026-10-18T15:55:54+09:00 2026-10-18T06:55:54.213Z INFO 9811 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "47 - create initial upload requests" +2026-10-18T15:55:54+09:00 2026-10-18T06:55:54.217Z INFO 9811 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "48 - track initial upload candidates" +2026-10-18T15:55:54+09:00 2026-10-18T06:55:54.224Z INFO 9811 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "49 - create version upload requests" +2026-10-18T15:55:54+09:00 2026-10-18T06:55:54.228Z INFO 9811 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "50 - track version upload candidates" +2026-10-18T15:55:54+09:00 2026-10-18T06:55:54.236Z INFO 9811 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "51 - add rag response claim lease" +2026-10-18T15:55:54+09:00 2026-10-18T06:55:54.241Z INFO 9811 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" to version "52 - create permission revocation requests" +2026-10-18T15:55:54+09:00 2026-10-18T06:55:54.246Z INFO 9811 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" with repeatable migration "seed bge m3 embedding model" +2026-10-18T15:55:54+09:00 2026-10-18T06:55:54.252Z INFO 9811 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Migrating schema "public" with repeatable migration "seed test fixtures" +2026-10-18T15:55:54+09:00 2026-10-18T06:55:54.268Z INFO 9811 --- [docgrid] [ restartedMain] o.f.core.internal.command.DbMigrate : Successfully applied 54 migrations to schema "public", now at version v52 (execution time 00:00.135s) +2026-10-18T15:55:54+09:00 2026-10-18T06:55:54.328Z INFO 9811 --- [docgrid] [ restartedMain] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default] +2026-10-18T15:55:54+09:00 2026-10-18T06:55:54.351Z INFO 9811 --- [docgrid] [ restartedMain] org.hibernate.Version : HHH000412: Hibernate ORM core version 6.6.53.Final +2026-10-18T15:55:54+09:00 2026-10-18T06:55:54.366Z INFO 9811 --- [docgrid] [ restartedMain] o.h.c.internal.RegionFactoryInitiator : HHH000026: Second-level cache disabled +2026-10-18T15:55:54+09:00 2026-10-18T06:55:54.508Z INFO 9811 --- [docgrid] [ restartedMain] o.s.o.j.p.SpringPersistenceUnitInfo : No LoadTimeWeaver setup: ignoring JPA class transformer +2026-10-18T15:55:54+09:00 2026-10-18T06:55:54.545Z INFO 9811 --- [docgrid] [ restartedMain] org.hibernate.orm.connections.pooling : HHH10001005: Database info: +2026-10-18T15:55:54+09:00 Database JDBC URL [Connecting through datasource 'HikariDataSource (docgrid-local-db-pool)'] +2026-10-18T15:55:54+09:00 Database driver: undefined/unknown +2026-10-18T15:55:54+09:00 Database version: 17.8 +2026-10-18T15:55:54+09:00 Autocommit mode: undefined/unknown +2026-10-18T15:55:54+09:00 Isolation level: undefined/unknown +2026-10-18T15:55:54+09:00 Minimum pool size: undefined/unknown +2026-10-18T15:55:54+09:00 Maximum pool size: undefined/unknown +2026-10-18T15:55:55+09:00 2026-10-18T06:55:55.246Z INFO 9811 --- [docgrid] [ restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) +2026-10-18T15:55:55+09:00 2026-10-18T06:55:55.274Z INFO 9811 --- [docgrid] [ restartedMain] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' +2026-10-18T15:55:55+09:00 2026-10-18T06:55:55.454Z INFO 9811 --- [docgrid] [ restartedMain] o.s.d.j.r.query.QueryEnhancerFactory : Hibernate is in classpath; If applicable, HQL parser will be used. +2026-10-18T15:55:57+09:00 2026-10-18T06:55:57.301Z WARN 9811 --- [docgrid] [ restartedMain] .s.s.UserDetailsServiceAutoConfiguration : +2026-10-18T15:55:57+09:00 +2026-10-18T15:55:57+09:00 Using generated security password: 15b8d1ad-40f7-48e7-9f7c-a33519aedb6b +2026-10-18T15:55:57+09:00 +2026-10-18T15:55:57+09:00 This generated password is for development use only. Your security configuration must be updated before running your application in production. +2026-10-18T15:55:57+09:00 +2026-10-18T15:55:57+09:00 2026-10-18T06:55:57.305Z INFO 9811 --- [docgrid] [ restartedMain] r$InitializeUserDetailsManagerConfigurer : Global AuthenticationManager configured with UserDetailsService bean with name inMemoryUserDetailsManager +2026-10-18T15:55:57+09:00 2026-10-18T06:55:57.736Z INFO 9811 --- [docgrid] [ restartedMain] o.s.a.m.s.c.a.McpServerAutoConfiguration : Enable tools capabilities, notification: true +2026-10-18T15:55:57+09:00 2026-10-18T06:55:57.737Z INFO 9811 --- [docgrid] [ restartedMain] o.s.a.m.s.c.a.McpServerAutoConfiguration : Registered tools: 3 +2026-10-18T15:55:57+09:00 2026-10-18T06:55:57.737Z INFO 9811 --- [docgrid] [ restartedMain] o.s.a.m.s.c.a.McpServerAutoConfiguration : Enable resources capabilities, notification: true +2026-10-18T15:55:57+09:00 2026-10-18T06:55:57.737Z INFO 9811 --- [docgrid] [ restartedMain] o.s.a.m.s.c.a.McpServerAutoConfiguration : Enable resources templates capabilities, notification: true +2026-10-18T15:55:57+09:00 2026-10-18T06:55:57.737Z INFO 9811 --- [docgrid] [ restartedMain] o.s.a.m.s.c.a.McpServerAutoConfiguration : Enable prompts capabilities, notification: true +2026-10-18T15:55:57+09:00 2026-10-18T06:55:57.738Z INFO 9811 --- [docgrid] [ restartedMain] o.s.a.m.s.c.a.McpServerAutoConfiguration : Enable completions capabilities +2026-10-18T15:55:57+09:00 2026-10-18T06:55:57.934Z INFO 9811 --- [docgrid] [ restartedMain] o.s.b.d.a.OptionalLiveReloadServer : LiveReload server is running on port 35729 +2026-10-18T15:55:57+09:00 2026-10-18T06:55:57.977Z INFO 9811 --- [docgrid] [ restartedMain] o.s.m.s.b.SimpleBrokerMessageHandler : Starting... +2026-10-18T15:55:57+09:00 2026-10-18T06:55:57.977Z INFO 9811 --- [docgrid] [ restartedMain] o.s.m.s.b.SimpleBrokerMessageHandler : BrokerAvailabilityEvent[available=true, SimpleBrokerMessageHandler [org.springframework.messaging.simp.broker.DefaultSubscriptionRegistry@6bad9d00]] +2026-10-18T15:55:57+09:00 2026-10-18T06:55:57.978Z INFO 9811 --- [docgrid] [ restartedMain] o.s.m.s.b.SimpleBrokerMessageHandler : Started. +2026-10-18T15:55:58+09:00 2026-10-18T06:55:57.986Z INFO 9811 --- [docgrid] [ restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port 8080 (http) with context path '/' +2026-10-18T15:55:58+09:00 2026-10-18T06:55:58.039Z INFO 9811 --- [docgrid] [ restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port 8081 (http) +2026-10-18T15:55:58+09:00 2026-10-18T06:55:58.040Z INFO 9811 --- [docgrid] [ restartedMain] o.apache.catalina.core.StandardService : Starting service [Tomcat] +2026-10-18T15:55:58+09:00 2026-10-18T06:55:58.040Z INFO 9811 --- [docgrid] [ restartedMain] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.55] +2026-10-18T15:55:58+09:00 2026-10-18T06:55:58.052Z INFO 9811 --- [docgrid] [ restartedMain] o.a.c.c.C.[Tomcat-1].[localhost].[/] : Initializing Spring embedded WebApplicationContext +2026-10-18T15:55:58+09:00 2026-10-18T06:55:58.052Z INFO 9811 --- [docgrid] [ restartedMain] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 63 ms +2026-10-18T15:55:58+09:00 Standard Commons Logging discovery in action with spring-jcl: please remove commons-logging.jar from classpath in order to avoid potential conflicts +2026-10-18T15:55:58+09:00 2026-10-18T06:55:58.062Z INFO 9811 --- [docgrid] [ restartedMain] o.s.b.a.e.web.EndpointLinksResolver : Exposing 2 endpoints beneath base path '/actuator' +2026-10-18T15:55:58+09:00 2026-10-18T06:55:58.085Z INFO 9811 --- [docgrid] [ restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port 8081 (http) with context path '/' +2026-10-18T15:55:58+09:00 2026-10-18T06:55:58.100Z INFO 9811 --- [docgrid] [ restartedMain] c.opensource.docgrid.DocgridApplication : Started DocgridApplication in 6.361 seconds (process running for 6.626) +2026-10-18T15:55:58+09:00 2026-10-18T06:55:58.262Z INFO 9811 --- [docgrid] [ restartedMain] c.o.d.d.w.l.WorkerLifecycleManager : 인덱싱 Worker를 등록했습니다. workerId=1, workerName=indexing-worker, instanceId=e9bfe900-bf46-4a7f-aed5-6fca87ad056f +2026-10-18T15:55:58+09:00 2026-10-18T06:55:58.520Z INFO 9811 --- [docgrid] [nio-8081-exec-1] o.a.c.c.C.[Tomcat-1].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServletRegistration' +2026-10-18T15:55:58+09:00 2026-10-18T06:55:58.520Z INFO 9811 --- [docgrid] [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServletRegistration' +2026-10-18T15:55:58+09:00 2026-10-18T06:55:58.520Z INFO 9811 --- [docgrid] [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 0 ms +2026-10-18T15:56:01+09:00 2026-10-18T06:56:01.612Z INFO 9811 --- [docgrid] [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' +2026-10-18T15:56:01+09:00 2026-10-18T06:56:01.612Z INFO 9811 --- [docgrid] [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' +2026-10-18T15:56:01+09:00 2026-10-18T06:56:01.618Z INFO 9811 --- [docgrid] [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 6 ms +2026-10-18T15:56:04+09:00 2026-10-18T06:56:04.090Z WARN 9811 --- [docgrid] [nio-8080-exec-5] c.o.d.g.e.GlobalExceptionHandler : [DocGridException] POST /auth/login | code=USER-004 | message=이메일 또는 비밀번호가 올바르지 않습니다. +2026-10-18T15:56:04+09:00 2026-10-18T06:56:04.094Z WARN 9811 --- [docgrid] [nio-8080-exec-5] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [com.opensource.docgrid.global.exception.DocGridException: 이메일 또는 비밀번호가 올바르지 않습니다.] +2026-10-18T15:56:05+09:00 2026-10-18T06:56:05.195Z INFO 9811 --- [docgrid] [ng-worker-job-2] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 시작합니다. workerId=1, jobId=2, attemptId=2, initialStatus=UPLOADED +2026-10-18T15:56:05+09:00 2026-10-18T06:56:05.196Z INFO 9811 --- [docgrid] [ng-worker-job-1] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 시작합니다. workerId=1, jobId=1, attemptId=1, initialStatus=UPLOADED +2026-10-18T15:56:07+09:00 2026-10-18T06:56:07.417Z INFO 9811 --- [docgrid] [ng-worker-job-1] .e.s.c.DocumentIndexingCompletionService : 문서 인덱싱 완료: jobId=1, attemptId=1, documentId=3, versionId=3, chunkCount=1, embeddingCount=1, durationMs=2213 +2026-10-18T15:56:07+09:00 2026-10-18T06:56:07.422Z INFO 9811 --- [docgrid] [ng-worker-job-1] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 완료했습니다. workerId=1, jobId=1, attemptId=1 +2026-10-18T15:56:08+09:00 2026-10-18T06:56:08.201Z INFO 9811 --- [docgrid] [ng-worker-job-1] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 시작합니다. workerId=1, jobId=3, attemptId=3, initialStatus=UPLOADED +2026-10-18T15:56:09+09:00 2026-10-18T06:56:09.216Z INFO 9811 --- [docgrid] [ng-worker-job-2] .e.s.c.DocumentIndexingCompletionService : 문서 인덱싱 완료: jobId=2, attemptId=2, documentId=4, versionId=4, chunkCount=1, embeddingCount=1, durationMs=3998 +2026-10-18T15:56:09+09:00 2026-10-18T06:56:09.221Z INFO 9811 --- [docgrid] [ng-worker-job-2] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 완료했습니다. workerId=1, jobId=2, attemptId=2 +2026-10-18T15:56:10+09:00 2026-10-18T06:56:10.216Z INFO 9811 --- [docgrid] [ng-worker-job-2] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 시작합니다. workerId=1, jobId=4, attemptId=4, initialStatus=UPLOADED +2026-10-18T15:56:10+09:00 2026-10-18T06:56:10.353Z INFO 9811 --- [docgrid] [ng-worker-job-1] .e.s.c.DocumentIndexingCompletionService : 문서 인덱싱 완료: jobId=3, attemptId=3, documentId=5, versionId=5, chunkCount=1, embeddingCount=1, durationMs=2157 +2026-10-18T15:56:10+09:00 2026-10-18T06:56:10.356Z INFO 9811 --- [docgrid] [ng-worker-job-1] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 완료했습니다. workerId=1, jobId=3, attemptId=3 +2026-10-18T15:56:11+09:00 2026-10-18T06:56:11.245Z INFO 9811 --- [docgrid] [ng-worker-job-1] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 시작합니다. workerId=1, jobId=5, attemptId=5, initialStatus=UPLOADED +2026-10-18T15:56:11+09:00 2026-10-18T06:56:11.856Z INFO 9811 --- [docgrid] [ng-worker-job-2] .e.s.c.DocumentIndexingCompletionService : 문서 인덱싱 완료: jobId=4, attemptId=4, documentId=6, versionId=6, chunkCount=1, embeddingCount=1, durationMs=1631 +2026-10-18T15:56:11+09:00 2026-10-18T06:56:11.861Z INFO 9811 --- [docgrid] [ng-worker-job-2] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 완료했습니다. workerId=1, jobId=4, attemptId=4 +2026-10-18T15:56:12+09:00 2026-10-18T06:56:12.240Z INFO 9811 --- [docgrid] [ng-worker-job-2] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 시작합니다. workerId=1, jobId=6, attemptId=6, initialStatus=UPLOADED +2026-10-18T15:56:12+09:00 2026-10-18T06:56:12.943Z INFO 9811 --- [docgrid] [ng-worker-job-1] .e.s.c.DocumentIndexingCompletionService : 문서 인덱싱 완료: jobId=5, attemptId=5, documentId=7, versionId=7, chunkCount=1, embeddingCount=1, durationMs=1705 +2026-10-18T15:56:12+09:00 2026-10-18T06:56:12.946Z INFO 9811 --- [docgrid] [ng-worker-job-1] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 완료했습니다. workerId=1, jobId=5, attemptId=5 +2026-10-18T15:56:13+09:00 2026-10-18T06:56:13.250Z INFO 9811 --- [docgrid] [ng-worker-job-1] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 시작합니다. workerId=1, jobId=7, attemptId=7, initialStatus=UPLOADED +2026-10-18T15:56:15+09:00 2026-10-18T06:56:15.187Z INFO 9811 --- [docgrid] [ng-worker-job-2] .e.s.c.DocumentIndexingCompletionService : 문서 인덱싱 완료: jobId=6, attemptId=6, documentId=8, versionId=8, chunkCount=6, embeddingCount=6, durationMs=2941 +2026-10-18T15:56:15+09:00 2026-10-18T06:56:15.191Z INFO 9811 --- [docgrid] [ng-worker-job-2] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 완료했습니다. workerId=1, jobId=6, attemptId=6 +2026-10-18T15:56:15+09:00 2026-10-18T06:56:15.259Z INFO 9811 --- [docgrid] [ng-worker-job-2] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 시작합니다. workerId=1, jobId=8, attemptId=8, initialStatus=UPLOADED +2026-10-18T15:56:15+09:00 2026-10-18T06:56:15.823Z INFO 9811 --- [docgrid] [ng-worker-job-1] .e.s.c.DocumentIndexingCompletionService : 문서 인덱싱 완료: jobId=7, attemptId=7, documentId=9, versionId=9, chunkCount=7, embeddingCount=7, durationMs=2570 +2026-10-18T15:56:15+09:00 2026-10-18T06:56:15.826Z INFO 9811 --- [docgrid] [ng-worker-job-1] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 완료했습니다. workerId=1, jobId=7, attemptId=7 +2026-10-18T15:56:16+09:00 2026-10-18T06:56:16.269Z INFO 9811 --- [docgrid] [ng-worker-job-1] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 시작합니다. workerId=1, jobId=9, attemptId=9, initialStatus=UPLOADED +2026-10-18T15:56:18+09:00 2026-10-18T06:56:18.201Z INFO 9811 --- [docgrid] [ng-worker-job-2] .e.s.c.DocumentIndexingCompletionService : 문서 인덱싱 완료: jobId=8, attemptId=8, documentId=10, versionId=10, chunkCount=7, embeddingCount=7, durationMs=2938 +2026-10-18T15:56:18+09:00 2026-10-18T06:56:18.204Z INFO 9811 --- [docgrid] [ng-worker-job-2] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 완료했습니다. workerId=1, jobId=8, attemptId=8 +2026-10-18T15:56:18+09:00 2026-10-18T06:56:18.277Z INFO 9811 --- [docgrid] [ng-worker-job-2] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 시작합니다. workerId=1, jobId=10, attemptId=10, initialStatus=UPLOADED +2026-10-18T15:56:18+09:00 2026-10-18T06:56:18.614Z INFO 9811 --- [docgrid] [ng-worker-job-1] .e.s.c.DocumentIndexingCompletionService : 문서 인덱싱 완료: jobId=9, attemptId=9, documentId=11, versionId=11, chunkCount=6, embeddingCount=6, durationMs=2344 +2026-10-18T15:56:18+09:00 2026-10-18T06:56:18.617Z INFO 9811 --- [docgrid] [ng-worker-job-1] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 완료했습니다. workerId=1, jobId=9, attemptId=9 +2026-10-18T15:56:19+09:00 2026-10-18T06:56:19.280Z INFO 9811 --- [docgrid] [ng-worker-job-1] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 시작합니다. workerId=1, jobId=11, attemptId=11, initialStatus=UPLOADED +2026-10-18T15:56:19+09:00 2026-10-18T06:56:19.953Z INFO 9811 --- [docgrid] [ng-worker-job-2] .e.s.c.DocumentIndexingCompletionService : 문서 인덱싱 완료: jobId=10, attemptId=10, documentId=12, versionId=12, chunkCount=6, embeddingCount=6, durationMs=1665 +2026-10-18T15:56:19+09:00 2026-10-18T06:56:19.955Z INFO 9811 --- [docgrid] [ng-worker-job-2] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 완료했습니다. workerId=1, jobId=10, attemptId=10 +2026-10-18T15:56:20+09:00 2026-10-18T06:56:20.286Z INFO 9811 --- [docgrid] [ng-worker-job-2] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 시작합니다. workerId=1, jobId=12, attemptId=12, initialStatus=UPLOADED +2026-10-18T15:56:20+09:00 2026-10-18T06:56:20.941Z INFO 9811 --- [docgrid] [ng-worker-job-1] .e.s.c.DocumentIndexingCompletionService : 문서 인덱싱 완료: jobId=11, attemptId=11, documentId=13, versionId=13, chunkCount=1, embeddingCount=1, durationMs=1659 +2026-10-18T15:56:20+09:00 2026-10-18T06:56:20.943Z INFO 9811 --- [docgrid] [ng-worker-job-1] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 완료했습니다. workerId=1, jobId=11, attemptId=11 +2026-10-18T15:56:21+09:00 2026-10-18T06:56:21.291Z INFO 9811 --- [docgrid] [ng-worker-job-1] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 시작합니다. workerId=1, jobId=13, attemptId=13, initialStatus=UPLOADED +2026-10-18T15:56:22+09:00 2026-10-18T06:56:22.025Z INFO 9811 --- [docgrid] [ng-worker-job-2] .e.s.c.DocumentIndexingCompletionService : 문서 인덱싱 완료: jobId=12, attemptId=12, documentId=14, versionId=14, chunkCount=1, embeddingCount=1, durationMs=1731 +2026-10-18T15:56:22+09:00 2026-10-18T06:56:22.028Z INFO 9811 --- [docgrid] [ng-worker-job-2] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 완료했습니다. workerId=1, jobId=12, attemptId=12 +2026-10-18T15:56:22+09:00 2026-10-18T06:56:22.325Z INFO 9811 --- [docgrid] [ng-worker-job-2] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 시작합니다. workerId=1, jobId=14, attemptId=14, initialStatus=UPLOADED +2026-10-18T15:56:22+09:00 2026-10-18T06:56:22.751Z INFO 9811 --- [docgrid] [ng-worker-job-1] .e.s.c.DocumentIndexingCompletionService : 문서 인덱싱 완료: jobId=13, attemptId=13, documentId=15, versionId=15, chunkCount=1, embeddingCount=1, durationMs=1456 +2026-10-18T15:56:22+09:00 2026-10-18T06:56:22.754Z INFO 9811 --- [docgrid] [ng-worker-job-1] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 완료했습니다. workerId=1, jobId=13, attemptId=13 +2026-10-18T15:56:23+09:00 2026-10-18T06:56:23.317Z INFO 9811 --- [docgrid] [ng-worker-job-1] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 시작합니다. workerId=1, jobId=15, attemptId=15, initialStatus=UPLOADED +2026-10-18T15:56:23+09:00 2026-10-18T06:56:23.604Z INFO 9811 --- [docgrid] [ng-worker-job-2] .e.s.c.DocumentIndexingCompletionService : 문서 인덱싱 완료: jobId=14, attemptId=14, documentId=16, versionId=16, chunkCount=1, embeddingCount=1, durationMs=1287 +2026-10-18T15:56:23+09:00 2026-10-18T06:56:23.607Z INFO 9811 --- [docgrid] [ng-worker-job-2] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 완료했습니다. workerId=1, jobId=14, attemptId=14 +2026-10-18T15:56:24+09:00 2026-10-18T06:56:24.234Z INFO 9811 --- [docgrid] [ng-worker-job-1] .e.s.c.DocumentIndexingCompletionService : 문서 인덱싱 완료: jobId=15, attemptId=15, documentId=17, versionId=17, chunkCount=1, embeddingCount=1, durationMs=916 +2026-10-18T15:56:24+09:00 2026-10-18T06:56:24.236Z INFO 9811 --- [docgrid] [ng-worker-job-1] c.o.d.d.w.s.WorkerIndexingPipeline : Worker 인덱싱 실행을 완료했습니다. workerId=1, jobId=15, attemptId=15 +2026-10-18T15:56:26+09:00 2026-10-18T06:56:26.207Z INFO 9811 --- [docgrid] [nio-8080-exec-4] c.o.d.d.s.s.q.HybridSearchQueryService : [SEARCH] hybrid modelId=1 topK=3 terms=1 vectorPool=12 lexicalPool=2 merged=12 after=3 +2026-10-18T15:56:26+09:00 2026-10-18T06:56:26.210Z INFO 9811 --- [docgrid] [nio-8080-exec-4] c.o.d.d.search.service.SearchFacade : [SEARCH] live check userId=2 before=3 after=3 liveMs=2 +2026-10-18T15:56:26+09:00 2026-10-18T06:56:26.218Z INFO 9811 --- [docgrid] [nio-8080-exec-4] c.o.d.d.search.service.SearchFacade : [SEARCH] done queryId=1 results=3 latencyMs=250 +2026-10-18T15:56:26+09:00 2026-10-18T06:56:26.223Z INFO 9811 --- [docgrid] [nio-8080-exec-4] c.o.d.domain.rag.service.RagFacade : [RAG] enqueued queryId=1 responseId=1 +2026-10-18T15:56:26+09:00 2026-10-18T06:56:26.376Z ERROR 9811 --- [docgrid] [ag-worker-job-1] c.o.d.domain.rag.service.OllamaClient : Ollama 서버 호출 실패: I/O error on POST request for "<설정된 서버> null +2026-10-18T15:56:26+09:00 2026-10-18T06:56:26.397Z WARN 9811 --- [docgrid] [ag-worker-job-1] c.o.d.domain.rag.service.RagFacade : [RAG] fallback queryId=1 errorCode=RAG-001 +2026-10-18T15:56:26+09:00 2026-10-18T06:56:26.432Z INFO 9811 --- [docgrid] [nio-8080-exec-5] c.o.d.d.s.s.q.HybridSearchQueryService : [SEARCH] hybrid modelId=1 topK=3 terms=4 vectorPool=12 lexicalPool=4 merged=12 after=3 +2026-10-18T15:56:26+09:00 2026-10-18T06:56:26.435Z INFO 9811 --- [docgrid] [nio-8080-exec-5] c.o.d.d.search.service.SearchFacade : [SEARCH] live check userId=2 before=3 after=3 liveMs=3 +2026-10-18T15:56:26+09:00 2026-10-18T06:56:26.439Z INFO 9811 --- [docgrid] [nio-8080-exec-5] c.o.d.d.search.service.SearchFacade : [SEARCH] done queryId=2 results=3 latencyMs=190 +2026-10-18T15:56:26+09:00 2026-10-18T06:56:26.440Z INFO 9811 --- [docgrid] [nio-8080-exec-5] c.o.d.domain.rag.service.RagFacade : [RAG] enqueued queryId=2 responseId=2 +2026-10-18T15:56:26+09:00 2026-10-18T06:56:26.626Z INFO 9811 --- [docgrid] [nio-8080-exec-7] c.o.d.d.s.s.q.HybridSearchQueryService : [SEARCH] hybrid modelId=1 topK=3 terms=2 vectorPool=12 lexicalPool=3 merged=12 after=3 +2026-10-18T15:56:26+09:00 2026-10-18T06:56:26.630Z INFO 9811 --- [docgrid] [nio-8080-exec-7] c.o.d.d.search.service.SearchFacade : [SEARCH] live check userId=2 before=3 after=3 liveMs=3 +2026-10-18T15:56:26+09:00 2026-10-18T06:56:26.634Z INFO 9811 --- [docgrid] [nio-8080-exec-7] c.o.d.d.search.service.SearchFacade : [SEARCH] done queryId=3 results=3 latencyMs=154 +2026-10-18T15:56:26+09:00 2026-10-18T06:56:26.636Z INFO 9811 --- [docgrid] [nio-8080-exec-7] c.o.d.domain.rag.service.RagFacade : [RAG] enqueued queryId=3 responseId=3 +2026-10-18T15:56:27+09:00 2026-10-18T06:56:27.368Z ERROR 9811 --- [docgrid] [ag-worker-job-2] c.o.d.domain.rag.service.OllamaClient : Ollama 서버 호출 실패: I/O error on POST request for "<설정된 서버> null +2026-10-18T15:56:27+09:00 2026-10-18T06:56:27.371Z ERROR 9811 --- [docgrid] [ag-worker-job-1] c.o.d.domain.rag.service.OllamaClient : Ollama 서버 호출 실패: I/O error on POST request for "<설정된 서버> null +2026-10-18T15:56:27+09:00 2026-10-18T06:56:27.372Z WARN 9811 --- [docgrid] [ag-worker-job-2] c.o.d.domain.rag.service.RagFacade : [RAG] fallback queryId=2 errorCode=RAG-001 +2026-10-18T15:56:27+09:00 2026-10-18T06:56:27.374Z WARN 9811 --- [docgrid] [ag-worker-job-1] c.o.d.domain.rag.service.RagFacade : [RAG] fallback queryId=3 errorCode=RAG-001 +2026-10-18T15:56:28+09:00 2026-10-18T06:56:28.105Z INFO 9811 --- [docgrid] [MessageBroker-2] c.o.d.d.w.l.WorkerLeaseRecoveryScheduler : Worker Lease 복구 주기를 완료했습니다. deadWorkers=0, candidates=0, recovered=0, skipped=0, failed=0 +2026-10-18T15:56:29+09:00 2026-10-18T06:56:29.022Z INFO 9811 --- [docgrid] [nio-8080-exec-6] c.o.d.d.s.s.q.HybridSearchQueryService : [SEARCH] hybrid modelId=1 topK=3 terms=1 vectorPool=12 lexicalPool=2 merged=12 after=3 +2026-10-18T15:56:29+09:00 2026-10-18T06:56:29.025Z INFO 9811 --- [docgrid] [nio-8080-exec-6] c.o.d.d.search.service.SearchFacade : [SEARCH] live check userId=2 before=3 after=3 liveMs=3 +2026-10-18T15:56:29+09:00 2026-10-18T06:56:29.029Z INFO 9811 --- [docgrid] [nio-8080-exec-6] c.o.d.d.search.service.SearchFacade : [SEARCH] done queryId=4 results=3 latencyMs=185 +2026-10-18T15:56:29+09:00 2026-10-18T06:56:29.030Z INFO 9811 --- [docgrid] [nio-8080-exec-6] c.o.d.domain.rag.service.RagFacade : [RAG] enqueued queryId=4 responseId=4 +2026-10-18T15:56:29+09:00 2026-10-18T06:56:29.220Z INFO 9811 --- [docgrid] [nio-8080-exec-7] c.o.d.d.s.s.q.HybridSearchQueryService : [SEARCH] hybrid modelId=1 topK=3 terms=4 vectorPool=12 lexicalPool=4 merged=12 after=3 +2026-10-18T15:56:29+09:00 2026-10-18T06:56:29.223Z INFO 9811 --- [docgrid] [nio-8080-exec-7] c.o.d.d.search.service.SearchFacade : [SEARCH] live check userId=2 before=3 after=3 liveMs=3 +2026-10-18T15:56:29+09:00 2026-10-18T06:56:29.226Z INFO 9811 --- [docgrid] [nio-8080-exec-7] c.o.d.d.search.service.SearchFacade : [SEARCH] done queryId=5 results=3 latencyMs=179 +2026-10-18T15:56:29+09:00 2026-10-18T06:56:29.228Z INFO 9811 --- [docgrid] [nio-8080-exec-7] c.o.d.domain.rag.service.RagFacade : [RAG] enqueued queryId=5 responseId=5 +2026-10-18T15:56:29+09:00 2026-10-18T06:56:29.379Z ERROR 9811 --- [docgrid] [ag-worker-job-1] c.o.d.domain.rag.service.OllamaClient : Ollama 서버 호출 실패: I/O error on POST request for "<설정된 서버> null +2026-10-18T15:56:29+09:00 2026-10-18T06:56:29.384Z ERROR 9811 --- [docgrid] [ag-worker-job-2] c.o.d.domain.rag.service.OllamaClient : Ollama 서버 호출 실패: I/O error on POST request for "<설정된 서버> null +2026-10-18T15:56:29+09:00 2026-10-18T06:56:29.389Z WARN 9811 --- [docgrid] [ag-worker-job-1] c.o.d.domain.rag.service.RagFacade : [RAG] fallback queryId=4 errorCode=RAG-001 +2026-10-18T15:56:29+09:00 2026-10-18T06:56:29.394Z WARN 9811 --- [docgrid] [ag-worker-job-2] c.o.d.domain.rag.service.RagFacade : [RAG] fallback queryId=5 errorCode=RAG-001 +2026-10-18T15:56:29+09:00 2026-10-18T06:56:29.417Z INFO 9811 --- [docgrid] [nio-8080-exec-9] c.o.d.d.s.s.q.HybridSearchQueryService : [SEARCH] hybrid modelId=1 topK=3 terms=2 vectorPool=12 lexicalPool=3 merged=12 after=3 +2026-10-18T15:56:29+09:00 2026-10-18T06:56:29.420Z INFO 9811 --- [docgrid] [nio-8080-exec-9] c.o.d.d.search.service.SearchFacade : [SEARCH] live check userId=2 before=3 after=3 liveMs=2 +2026-10-18T15:56:29+09:00 2026-10-18T06:56:29.423Z INFO 9811 --- [docgrid] [nio-8080-exec-9] c.o.d.d.search.service.SearchFacade : [SEARCH] done queryId=6 results=3 latencyMs=158 +2026-10-18T15:56:29+09:00 2026-10-18T06:56:29.425Z INFO 9811 --- [docgrid] [nio-8080-exec-9] c.o.d.domain.rag.service.RagFacade : [RAG] enqueued queryId=6 responseId=6 +2026-10-18T15:56:30+09:00 2026-10-18T06:56:30.399Z ERROR 9811 --- [docgrid] [ag-worker-job-2] c.o.d.domain.rag.service.OllamaClient : Ollama 서버 호출 실패: I/O error on POST request for "<설정된 서버> null +2026-10-18T15:56:30+09:00 2026-10-18T06:56:30.404Z WARN 9811 --- [docgrid] [ag-worker-job-2] c.o.d.domain.rag.service.RagFacade : [RAG] fallback queryId=6 errorCode=RAG-001 +2026-10-18T15:56:33+09:00 2026-10-18T06:56:33.399Z INFO 9811 --- [docgrid] [nio-8080-exec-1] c.o.d.d.s.s.q.HybridSearchQueryService : [SEARCH] hybrid modelId=1 topK=5 terms=1 vectorPool=20 lexicalPool=2 merged=20 after=5 +2026-10-18T15:56:33+09:00 2026-10-18T06:56:33.403Z INFO 9811 --- [docgrid] [nio-8080-exec-1] c.o.d.d.search.service.SearchFacade : [SEARCH] live check userId=2 before=5 after=5 liveMs=3 +2026-10-18T15:56:33+09:00 2026-10-18T06:56:33.408Z INFO 9811 --- [docgrid] [nio-8080-exec-1] c.o.d.d.search.service.SearchFacade : [SEARCH] done queryId=7 results=5 latencyMs=188 +2026-10-18T15:56:33+09:00 2026-10-18T06:56:33.410Z INFO 9811 --- [docgrid] [nio-8080-exec-1] c.o.d.domain.rag.service.RagFacade : [RAG] enqueued queryId=7 responseId=7 +2026-10-18T15:56:34+09:00 2026-10-18T06:56:34.416Z ERROR 9811 --- [docgrid] [ag-worker-job-2] c.o.d.domain.rag.service.OllamaClient : Ollama 서버 호출 실패: I/O error on POST request for "<설정된 서버> null +2026-10-18T15:56:34+09:00 2026-10-18T06:56:34.421Z WARN 9811 --- [docgrid] [ag-worker-job-2] c.o.d.domain.rag.service.RagFacade : [RAG] fallback queryId=7 errorCode=RAG-001 diff --git a/docs/test-results/demo-fresh-20261018/runs/39105569049-1/runtime/1bd07e5ccd714d77a817b67f1d272a0f/events.jsonl b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/runtime/1bd07e5ccd714d77a817b67f1d272a0f/events.jsonl new file mode 100644 index 00000000..ff1b20ed --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/runtime/1bd07e5ccd714d77a817b67f1d272a0f/events.jsonl @@ -0,0 +1,7 @@ +{"timestamp": "2026-10-18T15:52:48+09:00", "message": "[시작] 로컬 시연 세션 1bd07e5ccd714d77a817b67f1d272a0f · 범위 search"} +{"timestamp": "2026-10-18T15:56:02+09:00", "message": "[준비 완료] Web: <설정된 서버> · verify로 예제 시연을 검사하세요."} +{"timestamp": "2026-10-18T15:56:27+09:00", "message": "[검증 통과] 업로드·인덱싱·검색·원본 검사 완료. 기록: .demo/reports/43aaa87d4ac94307a3639f790aabf3a1/summary.json"} +{"timestamp": "2026-10-18T15:56:30+09:00", "message": "[검증 통과] 업로드·인덱싱·검색·원본 검사 완료. 기록: .demo/reports/3abd7182177c4cc4a95e4d956b49ebed/summary.json"} +{"timestamp": "2026-10-18T15:56:36+09:00", "message": "[재사용] 이미 준비된 시연 세션입니다. Web: <설정된 서버>"} +{"timestamp": "2026-10-18T15:56:39+09:00", "message": "[종료 완료] 소유 서버·컨테이너 중지, 데이터·원본·모델 캐시 보존"} +{"timestamp": "2026-10-18T15:56:39+09:00", "message": "[종료] 이미 종료된 세션입니다."} diff --git a/docs/test-results/demo-fresh-20261018/runs/39105569049-1/runtime/1bd07e5ccd714d77a817b67f1d272a0f/frontend.log b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/runtime/1bd07e5ccd714d77a817b67f1d272a0f/frontend.log new file mode 100644 index 00000000..4a587ab8 --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/runtime/1bd07e5ccd714d77a817b67f1d272a0f/frontend.log @@ -0,0 +1,198 @@ +2026-10-18T15:55:58+09:00 +2026-10-18T15:55:58+09:00 > <이메일 생략> dev +2026-10-18T15:55:58+09:00 > WRANGLER_LOG_PATH=.wrangler/wrangler.log vinext dev --hostname 127.0.0.1 +2026-10-18T15:55:58+09:00 +2026-10-18T15:55:59+09:00 +2026-10-18T15:55:59+09:00 vinext dev (Vite 8.0.13) +2026-10-18T15:55:59+09:00 +2026-10-18T15:55:59+09:00 Using secrets defined in .env.local +2026-10-18T15:56:01+09:00 ➜ Local: <설정된 서버> +2026-10-18T15:56:01+09:00 ➜ Debug: <설정된 서버> +2026-10-18T15:56:01+09:00 GET /api/backend/departments 200 in 226ms +2026-10-18T15:56:02+09:00 GET /login 200 in 1.0s (compile: 1792306558.9s, render: 995ms) +2026-10-18T15:56:03+09:00 GET /api/backend/departments 200 in 18ms +2026-10-18T15:56:03+09:00 GET /login 200 in 27ms (compile: 1792306558.8s, render: 18ms) +2026-10-18T15:56:04+09:00 POST /api/backend/auth/login 401 in 43ms +2026-10-18T15:56:04+09:00 POST /api/backend/auth/signup 201 in 103ms +2026-10-18T15:56:04+09:00 POST /api/backend/auth/login 200 in 123ms +2026-10-18T15:56:04+09:00 POST /api/backend/api/documents 201 in 480ms +2026-10-18T15:56:04+09:00 POST /api/backend/api/documents 201 in 51ms +2026-10-18T15:56:04+09:00 POST /api/backend/api/documents 201 in 35ms +2026-10-18T15:56:04+09:00 POST /api/backend/api/documents 201 in 34ms +2026-10-18T15:56:04+09:00 POST /api/backend/api/documents 201 in 34ms +2026-10-18T15:56:04+09:00 POST /api/backend/api/documents 201 in 30ms +2026-10-18T15:56:05+09:00 POST /api/backend/api/documents 201 in 29ms +2026-10-18T15:56:05+09:00 POST /api/backend/api/documents 201 in 54ms +2026-10-18T15:56:05+09:00 POST /api/backend/api/documents 201 in 33ms +2026-10-18T15:56:05+09:00 POST /api/backend/api/documents 201 in 71ms +2026-10-18T15:56:05+09:00 POST /api/backend/api/documents 201 in 43ms +2026-10-18T15:56:05+09:00 POST /api/backend/api/documents 201 in 32ms +2026-10-18T15:56:05+09:00 POST /api/backend/api/documents 201 in 29ms +2026-10-18T15:56:05+09:00 POST /api/backend/api/documents 201 in 31ms +2026-10-18T15:56:05+09:00 POST /api/backend/api/documents 201 in 32ms +2026-10-18T15:56:05+09:00 GET /api/backend/api/documents/3/status 200 in 33ms +2026-10-18T15:56:05+09:00 GET /api/backend/api/documents/4/status 200 in 19ms +2026-10-18T15:56:05+09:00 GET /api/backend/api/documents/5/status 200 in 26ms +2026-10-18T15:56:05+09:00 GET /api/backend/api/documents/6/status 200 in 50ms +2026-10-18T15:56:05+09:00 GET /api/backend/api/documents/7/status 200 in 27ms +2026-10-18T15:56:05+09:00 GET /api/backend/api/documents/8/status 200 in 31ms +2026-10-18T15:56:05+09:00 GET /api/backend/api/documents/9/status 200 in 21ms +2026-10-18T15:56:05+09:00 GET /api/backend/api/documents/10/status 200 in 20ms +2026-10-18T15:56:05+09:00 GET /api/backend/api/documents/11/status 200 in 18ms +2026-10-18T15:56:05+09:00 GET /api/backend/api/documents/12/status 200 in 21ms +2026-10-18T15:56:05+09:00 GET /api/backend/api/documents/13/status 200 in 25ms +2026-10-18T15:56:05+09:00 GET /api/backend/api/documents/14/status 200 in 19ms +2026-10-18T15:56:05+09:00 GET /api/backend/api/documents/15/status 200 in 18ms +2026-10-18T15:56:05+09:00 GET /api/backend/api/documents/16/status 200 in 23ms +2026-10-18T15:56:05+09:00 GET /api/backend/api/documents/17/status 200 in 74ms +2026-10-18T15:56:08+09:00 GET /api/backend/api/documents/3/status 200 in 53ms +2026-10-18T15:56:08+09:00 GET /api/backend/api/documents/4/status 200 in 32ms +2026-10-18T15:56:08+09:00 GET /api/backend/api/documents/5/status 200 in 30ms +2026-10-18T15:56:08+09:00 GET /api/backend/api/documents/6/status 200 in 24ms +2026-10-18T15:56:09+09:00 GET /api/backend/api/documents/7/status 200 in 27ms +2026-10-18T15:56:09+09:00 GET /api/backend/api/documents/8/status 200 in 34ms +2026-10-18T15:56:09+09:00 GET /api/backend/api/documents/9/status 200 in 58ms +2026-10-18T15:56:09+09:00 GET /api/backend/api/documents/10/status 200 in 47ms +2026-10-18T15:56:09+09:00 GET /api/backend/api/documents/11/status 200 in 52ms +2026-10-18T15:56:09+09:00 GET /api/backend/api/documents/12/status 200 in 33ms +2026-10-18T15:56:09+09:00 GET /api/backend/api/documents/13/status 200 in 30ms +2026-10-18T15:56:09+09:00 GET /api/backend/api/documents/14/status 200 in 42ms +2026-10-18T15:56:09+09:00 GET /api/backend/api/documents/15/status 200 in 24ms +2026-10-18T15:56:09+09:00 GET /api/backend/api/documents/16/status 200 in 28ms +2026-10-18T15:56:09+09:00 GET /api/backend/api/documents/17/status 200 in 63ms +2026-10-18T15:56:12+09:00 GET /api/backend/api/documents/4/status 200 in 26ms +2026-10-18T15:56:12+09:00 GET /api/backend/api/documents/5/status 200 in 32ms +2026-10-18T15:56:12+09:00 GET /api/backend/api/documents/6/status 200 in 49ms +2026-10-18T15:56:12+09:00 GET /api/backend/api/documents/7/status 200 in 39ms +2026-10-18T15:56:12+09:00 GET /api/backend/api/documents/8/status 200 in 49ms +2026-10-18T15:56:12+09:00 GET /api/backend/api/documents/9/status 200 in 62ms +2026-10-18T15:56:12+09:00 GET /api/backend/api/documents/10/status 200 in 47ms +2026-10-18T15:56:12+09:00 GET /api/backend/api/documents/11/status 200 in 35ms +2026-10-18T15:56:12+09:00 GET /api/backend/api/documents/12/status 200 in 53ms +2026-10-18T15:56:12+09:00 GET /api/backend/api/documents/13/status 200 in 33ms +2026-10-18T15:56:12+09:00 GET /api/backend/api/documents/14/status 200 in 30ms +2026-10-18T15:56:12+09:00 GET /api/backend/api/documents/15/status 200 in 31ms +2026-10-18T15:56:13+09:00 GET /api/backend/api/documents/16/status 200 in 51ms +2026-10-18T15:56:13+09:00 GET /api/backend/api/documents/17/status 200 in 44ms +2026-10-18T15:56:16+09:00 GET /api/backend/api/documents/7/status 200 in 27ms +2026-10-18T15:56:16+09:00 GET /api/backend/api/documents/8/status 200 in 33ms +2026-10-18T15:56:16+09:00 GET /api/backend/api/documents/9/status 200 in 21ms +2026-10-18T15:56:16+09:00 GET /api/backend/api/documents/10/status 200 in 20ms +2026-10-18T15:56:16+09:00 GET /api/backend/api/documents/11/status 200 in 19ms +2026-10-18T15:56:16+09:00 GET /api/backend/api/documents/12/status 200 in 21ms +2026-10-18T15:56:16+09:00 GET /api/backend/api/documents/13/status 200 in 32ms +2026-10-18T15:56:16+09:00 GET /api/backend/api/documents/14/status 200 in 32ms +2026-10-18T15:56:16+09:00 GET /api/backend/api/documents/15/status 200 in 33ms +2026-10-18T15:56:16+09:00 GET /api/backend/api/documents/16/status 200 in 46ms +2026-10-18T15:56:16+09:00 GET /api/backend/api/documents/17/status 200 in 54ms +2026-10-18T15:56:19+09:00 GET /api/backend/api/documents/10/status 200 in 46ms +2026-10-18T15:56:19+09:00 GET /api/backend/api/documents/11/status 200 in 47ms +2026-10-18T15:56:19+09:00 GET /api/backend/api/documents/12/status 200 in 21ms +2026-10-18T15:56:19+09:00 GET /api/backend/api/documents/13/status 200 in 23ms +2026-10-18T15:56:19+09:00 GET /api/backend/api/documents/14/status 200 in 27ms +2026-10-18T15:56:19+09:00 GET /api/backend/api/documents/15/status 200 in 26ms +2026-10-18T15:56:19+09:00 GET /api/backend/api/documents/16/status 200 in 35ms +2026-10-18T15:56:19+09:00 GET /api/backend/api/documents/17/status 200 in 29ms +2026-10-18T15:56:22+09:00 GET /api/backend/api/documents/12/status 200 in 26ms +2026-10-18T15:56:22+09:00 GET /api/backend/api/documents/13/status 200 in 19ms +2026-10-18T15:56:22+09:00 GET /api/backend/api/documents/14/status 200 in 17ms +2026-10-18T15:56:22+09:00 GET /api/backend/api/documents/15/status 200 in 18ms +2026-10-18T15:56:22+09:00 GET /api/backend/api/documents/16/status 200 in 21ms +2026-10-18T15:56:22+09:00 GET /api/backend/api/documents/17/status 200 in 24ms +2026-10-18T15:56:25+09:00 GET /api/backend/api/documents/16/status 200 in 16ms +2026-10-18T15:56:25+09:00 GET /api/backend/api/documents/17/status 200 in 13ms +2026-10-18T15:56:26+09:00 POST /api/backend/search 200 in 296ms +2026-10-18T15:56:26+09:00 POST /api/backend/search 200 in 212ms +2026-10-18T15:56:26+09:00 GET /api/backend/api/documents/8/content 200 in 19ms +2026-10-18T15:56:26+09:00 POST /api/backend/search 200 in 175ms +2026-10-18T15:56:26+09:00 GET /api/backend/api/documents/3/file 200 in 22ms +2026-10-18T15:56:26+09:00 GET /api/backend/api/documents/4/file 200 in 15ms +2026-10-18T15:56:26+09:00 GET /api/backend/api/documents/5/file 200 in 17ms +2026-10-18T15:56:26+09:00 GET /api/backend/api/documents/6/file 200 in 16ms +2026-10-18T15:56:26+09:00 GET /api/backend/api/documents/7/file 200 in 16ms +2026-10-18T15:56:26+09:00 GET /api/backend/api/documents/8/file 200 in 16ms +2026-10-18T15:56:26+09:00 GET /api/backend/api/documents/9/file 200 in 14ms +2026-10-18T15:56:26+09:00 GET /api/backend/api/documents/10/file 200 in 13ms +2026-10-18T15:56:26+09:00 GET /api/backend/api/documents/11/file 200 in 13ms +2026-10-18T15:56:26+09:00 GET /api/backend/api/documents/12/file 200 in 15ms +2026-10-18T15:56:26+09:00 GET /api/backend/api/documents/13/file 200 in 12ms +2026-10-18T15:56:26+09:00 GET /api/backend/api/documents/14/file 200 in 14ms +2026-10-18T15:56:26+09:00 GET /api/backend/api/documents/15/file 200 in 15ms +2026-10-18T15:56:26+09:00 GET /api/backend/api/documents/16/file 200 in 13ms +2026-10-18T15:56:26+09:00 GET /api/backend/api/documents/17/file 200 in 13ms +2026-10-18T15:56:27+09:00 GET /api/backend/departments 200 in 11ms +2026-10-18T15:56:27+09:00 GET /login 200 in 26ms (compile: 1792306558.8s, render: 16ms) +2026-10-18T15:56:28+09:00 POST /api/backend/auth/login 200 in 98ms +2026-10-18T15:56:28+09:00 POST /api/backend/api/documents 201 in 18ms +2026-10-18T15:56:28+09:00 POST /api/backend/api/documents 201 in 18ms +2026-10-18T15:56:28+09:00 POST /api/backend/api/documents 201 in 22ms +2026-10-18T15:56:28+09:00 POST /api/backend/api/documents 201 in 16ms +2026-10-18T15:56:28+09:00 POST /api/backend/api/documents 201 in 15ms +2026-10-18T15:56:28+09:00 POST /api/backend/api/documents 201 in 16ms +2026-10-18T15:56:28+09:00 POST /api/backend/api/documents 201 in 17ms +2026-10-18T15:56:28+09:00 POST /api/backend/api/documents 201 in 24ms +2026-10-18T15:56:28+09:00 POST /api/backend/api/documents 201 in 19ms +2026-10-18T15:56:28+09:00 POST /api/backend/api/documents 201 in 22ms +2026-10-18T15:56:28+09:00 POST /api/backend/api/documents 201 in 19ms +2026-10-18T15:56:28+09:00 POST /api/backend/api/documents 201 in 19ms +2026-10-18T15:56:28+09:00 POST /api/backend/api/documents 201 in 17ms +2026-10-18T15:56:28+09:00 POST /api/backend/api/documents 201 in 19ms +2026-10-18T15:56:28+09:00 POST /api/backend/api/documents 201 in 17ms +2026-10-18T15:56:28+09:00 GET /api/backend/api/documents/3/status 200 in 14ms +2026-10-18T15:56:28+09:00 GET /api/backend/api/documents/4/status 200 in 13ms +2026-10-18T15:56:28+09:00 GET /api/backend/api/documents/5/status 200 in 15ms +2026-10-18T15:56:28+09:00 GET /api/backend/api/documents/6/status 200 in 15ms +2026-10-18T15:56:28+09:00 GET /api/backend/api/documents/7/status 200 in 14ms +2026-10-18T15:56:28+09:00 GET /api/backend/api/documents/8/status 200 in 13ms +2026-10-18T15:56:28+09:00 GET /api/backend/api/documents/9/status 200 in 16ms +2026-10-18T15:56:28+09:00 GET /api/backend/api/documents/10/status 200 in 14ms +2026-10-18T15:56:28+09:00 GET /api/backend/api/documents/11/status 200 in 14ms +2026-10-18T15:56:28+09:00 GET /api/backend/api/documents/12/status 200 in 16ms +2026-10-18T15:56:28+09:00 GET /api/backend/api/documents/13/status 200 in 14ms +2026-10-18T15:56:28+09:00 GET /api/backend/api/documents/14/status 200 in 16ms +2026-10-18T15:56:28+09:00 GET /api/backend/api/documents/15/status 200 in 14ms +2026-10-18T15:56:28+09:00 GET /api/backend/api/documents/16/status 200 in 13ms +2026-10-18T15:56:28+09:00 GET /api/backend/api/documents/17/status 200 in 12ms +2026-10-18T15:56:29+09:00 POST /api/backend/search 200 in 204ms +2026-10-18T15:56:29+09:00 POST /api/backend/search 200 in 197ms +2026-10-18T15:56:29+09:00 GET /api/backend/api/documents/8/content 200 in 18ms +2026-10-18T15:56:29+09:00 POST /api/backend/search 200 in 176ms +2026-10-18T15:56:29+09:00 GET /api/backend/api/documents/3/file 200 in 15ms +2026-10-18T15:56:29+09:00 GET /api/backend/api/documents/4/file 200 in 13ms +2026-10-18T15:56:29+09:00 GET /api/backend/api/documents/5/file 200 in 13ms +2026-10-18T15:56:29+09:00 GET /api/backend/api/documents/6/file 200 in 14ms +2026-10-18T15:56:29+09:00 GET /api/backend/api/documents/7/file 200 in 13ms +2026-10-18T15:56:29+09:00 GET /api/backend/api/documents/8/file 200 in 13ms +2026-10-18T15:56:29+09:00 GET /api/backend/api/documents/9/file 200 in 14ms +2026-10-18T15:56:29+09:00 GET /api/backend/api/documents/10/file 200 in 14ms +2026-10-18T15:56:29+09:00 GET /api/backend/api/documents/11/file 200 in 18ms +2026-10-18T15:56:29+09:00 GET /api/backend/api/documents/12/file 200 in 12ms +2026-10-18T15:56:29+09:00 GET /api/backend/api/documents/13/file 200 in 14ms +2026-10-18T15:56:29+09:00 GET /api/backend/api/documents/14/file 200 in 13ms +2026-10-18T15:56:29+09:00 GET /api/backend/api/documents/15/file 200 in 12ms +2026-10-18T15:56:29+09:00 GET /api/backend/api/documents/16/file 200 in 12ms +2026-10-18T15:56:29+09:00 GET /api/backend/api/documents/17/file 200 in 11ms +2026-10-18T15:56:31+09:00 GET /login 200 in 34ms (compile: 1792306558.8s, render: 21ms) +2026-10-18T15:56:31+09:00 GET /login?returnTo=%2Fsearch 200 in 32ms (compile: 1792306558.8s, render: 20ms) +2026-10-18T15:56:32+09:00 POST /api/backend/auth/login 200 in 79ms +2026-10-18T15:56:32+09:00 GET /api/backend/auth/me 200 in 14ms +2026-10-18T15:56:32+09:00 GET /search 200 in 46ms (compile: 1792306558.8s, render: 31ms) +2026-10-18T15:56:33+09:00 GET /api/backend/auth/me 200 in 16ms +2026-10-18T15:56:33+09:00 GET /api/backend/search/conversations?page=0&size=20 200 in 32ms +2026-10-18T15:56:33+09:00 GET /api/backend/collections?page=0&size=100 200 in 41ms +2026-10-18T15:56:33+09:00 GET /api/backend/api/documents?status=INDEXED&page=0&size=3 200 in 40ms +2026-10-18T15:56:33+09:00 POST /api/backend/search 200 in 213ms +2026-10-18T15:56:33+09:00 GET /api/backend/search/conversations?page=0&size=20 200 in 16ms +2026-10-18T15:56:33+09:00 GET /documents/3 200 in 26ms (compile: 1792306558.8s, render: 17ms) +2026-10-18T15:56:33+09:00 GET /api/backend/auth/me 200 in 16ms +2026-10-18T15:56:33+09:00 GET /api/backend/api/documents/3 200 in 38ms +2026-10-18T15:56:33+09:00 GET /api/backend/api/documents/3/status 200 in 41ms +2026-10-18T15:56:33+09:00 GET /api/backend/api/documents/3/versions 200 in 41ms +2026-10-18T15:56:33+09:00 GET /api/backend/permissions/documents/3/me 200 in 44ms +2026-10-18T15:56:33+09:00 GET /api/backend/api/documents/3/content 200 in 16ms +2026-10-18T15:56:33+09:00 GET /api/backend/api/documents/3/file?disposition=attachment 200 in 17ms +2026-10-18T15:56:34+09:00 GET /api/backend/departments 200 in 12ms +2026-10-18T15:56:34+09:00 GET /login 200 in 54ms (compile: 1792306558.9s, render: 20ms) +2026-10-18T15:56:35+09:00 GET /api/backend/departments 200 in 12ms +2026-10-18T15:56:35+09:00 GET /login 200 in 25ms (compile: 1792306558.8s, render: 16ms) +2026-10-18T15:56:36+09:00 ➜ Tunnel closed diff --git a/docs/test-results/demo-fresh-20261018/runs/39105569049-1/runtime/1bd07e5ccd714d77a817b67f1d272a0f/install.log b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/runtime/1bd07e5ccd714d77a817b67f1d272a0f/install.log new file mode 100644 index 00000000..1247a3e5 --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/runtime/1bd07e5ccd714d77a817b67f1d272a0f/install.log @@ -0,0 +1,17 @@ +2026-10-18T15:52:50+09:00 npm warn deprecated @esbuild-kit/<이메일 생략>: Merged into tsx: <설정된 서버> +2026-10-18T15:52:50+09:00 npm warn deprecated @esbuild-kit/<이메일 생략>: Merged into tsx: <설정된 서버> +2026-10-18T15:53:00+09:00 +2026-10-18T15:53:00+09:00 added 502 packages, and audited 503 packages in 12s +2026-10-18T15:53:00+09:00 +2026-10-18T15:53:00+09:00 156 packages are looking for funding +2026-10-18T15:53:00+09:00 run `npm fund` for details +2026-10-18T15:53:00+09:00 +2026-10-18T15:53:00+09:00 30 vulnerabilities (1 low, 6 moderate, 23 high) +2026-10-18T15:53:00+09:00 +2026-10-18T15:53:00+09:00 To address issues that do not require attention, run: +2026-10-18T15:53:00+09:00 npm audit fix +2026-10-18T15:53:00+09:00 +2026-10-18T15:53:00+09:00 To address all issues (including breaking changes), run: +2026-10-18T15:53:00+09:00 npm audit fix --force +2026-10-18T15:53:00+09:00 +2026-10-18T15:53:00+09:00 Run `npm audit` for details. diff --git a/docs/test-results/demo-fresh-20261018/runs/39105569049-1/runtime/1bd07e5ccd714d77a817b67f1d272a0f/services.log b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/runtime/1bd07e5ccd714d77a817b67f1d272a0f/services.log new file mode 100644 index 00000000..a27b476f --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/runtime/1bd07e5ccd714d77a817b67f1d272a0f/services.log @@ -0,0 +1,598 @@ +2026-10-18T15:53:01+09:00 [local-services] 로컬 PostgreSQL·Valkey·Embedding Provider를 시작합니다. +2026-10-18T15:53:01+09:00 postgres Pulling +2026-10-18T15:53:01+09:00 valkey Pulling +2026-10-18T15:53:02+09:00 e2de96513ba9 Already exists +2026-10-18T15:53:02+09:00 4831516dd0cb Pulling fs layer +2026-10-18T15:53:02+09:00 9f4a0348ad2e Pulling fs layer +2026-10-18T15:53:02+09:00 6b6aac9d7476 Pulling fs layer +2026-10-18T15:53:02+09:00 d8a310896f84 Pulling fs layer +2026-10-18T15:53:02+09:00 99bb4ce30ad3 Pulling fs layer +2026-10-18T15:53:02+09:00 31b6f2223c4b Pulling fs layer +2026-10-18T15:53:02+09:00 9da35c01411f Pulling fs layer +2026-10-18T15:53:02+09:00 a6809e067bc1 Pulling fs layer +2026-10-18T15:53:02+09:00 10643155f463 Pulling fs layer +2026-10-18T15:53:02+09:00 a7ef49b2a615 Pulling fs layer +2026-10-18T15:53:02+09:00 29d37472e7c3 Pulling fs layer +2026-10-18T15:53:02+09:00 4d2363af1825 Pulling fs layer +2026-10-18T15:53:02+09:00 4a14fbbe260a Pulling fs layer +2026-10-18T15:53:02+09:00 8cced4a98c7e Pulling fs layer +2026-10-18T15:53:02+09:00 4909bfb5f5ed Pulling fs layer +2026-10-18T15:53:02+09:00 3e1ddef0ec36 Pulling fs layer +2026-10-18T15:53:02+09:00 31b6f2223c4b Waiting +2026-10-18T15:53:02+09:00 9da35c01411f Waiting +2026-10-18T15:53:02+09:00 a6809e067bc1 Waiting +2026-10-18T15:53:02+09:00 10643155f463 Waiting +2026-10-18T15:53:02+09:00 a7ef49b2a615 Waiting +2026-10-18T15:53:02+09:00 29d37472e7c3 Waiting +2026-10-18T15:53:02+09:00 4d2363af1825 Waiting +2026-10-18T15:53:02+09:00 4a14fbbe260a Waiting +2026-10-18T15:53:02+09:00 8cced4a98c7e Waiting +2026-10-18T15:53:02+09:00 4909bfb5f5ed Waiting +2026-10-18T15:53:02+09:00 3e1ddef0ec36 Waiting +2026-10-18T15:53:02+09:00 d8a310896f84 Waiting +2026-10-18T15:53:02+09:00 99bb4ce30ad3 Waiting +2026-10-18T15:53:02+09:00 d78be5cc1e53 Pulling fs layer +2026-10-18T15:53:02+09:00 fe2c7735354a Pulling fs layer +2026-10-18T15:53:02+09:00 95121e5a56c0 Pulling fs layer +2026-10-18T15:53:02+09:00 d9f591c70342 Pulling fs layer +2026-10-18T15:53:02+09:00 4f4fb700ef54 Pulling fs layer +2026-10-18T15:53:02+09:00 4ed485d78f72 Pulling fs layer +2026-10-18T15:53:02+09:00 d78be5cc1e53 Waiting +2026-10-18T15:53:02+09:00 fe2c7735354a Waiting +2026-10-18T15:53:02+09:00 95121e5a56c0 Waiting +2026-10-18T15:53:02+09:00 d9f591c70342 Waiting +2026-10-18T15:53:02+09:00 4f4fb700ef54 Waiting +2026-10-18T15:53:02+09:00 4ed485d78f72 Waiting +2026-10-18T15:53:02+09:00 6b6aac9d7476 Downloading [> ] 49.15kB/4.534MB +2026-10-18T15:53:02+09:00 9f4a0348ad2e Downloading [==================================================>] 1.169kB/1.169kB +2026-10-18T15:53:02+09:00 9f4a0348ad2e Verifying Checksum +2026-10-18T15:53:02+09:00 9f4a0348ad2e Download complete +2026-10-18T15:53:02+09:00 4831516dd0cb Downloading [> ] 294.3kB/28.23MB +2026-10-18T15:53:02+09:00 6b6aac9d7476 Downloading [=============================================> ] 4.1MB/4.534MB +2026-10-18T15:53:02+09:00 6b6aac9d7476 Verifying Checksum +2026-10-18T15:53:02+09:00 6b6aac9d7476 Download complete +2026-10-18T15:53:02+09:00 d8a310896f84 Downloading [> ] 16.38kB/1.25MB +2026-10-18T15:53:02+09:00 4831516dd0cb Downloading [================> ] 9.142MB/28.23MB +2026-10-18T15:53:02+09:00 d8a310896f84 Verifying Checksum +2026-10-18T15:53:02+09:00 d8a310896f84 Download complete +2026-10-18T15:53:02+09:00 4831516dd0cb Verifying Checksum +2026-10-18T15:53:02+09:00 4831516dd0cb Download complete +2026-10-18T15:53:02+09:00 99bb4ce30ad3 Downloading [> ] 81.28kB/8.066MB +2026-10-18T15:53:02+09:00 4831516dd0cb Extracting [> ] 294.9kB/28.23MB +2026-10-18T15:53:02+09:00 31b6f2223c4b Downloading [> ] 15.74kB/1.196MB +2026-10-18T15:53:02+09:00 9da35c01411f Downloading [==================================================>] 116B/116B +2026-10-18T15:53:02+09:00 9da35c01411f Download complete +2026-10-18T15:53:02+09:00 99bb4ce30ad3 Downloading [==============================> ] 4.996MB/8.066MB +2026-10-18T15:53:02+09:00 4831516dd0cb Extracting [=============> ] 7.373MB/28.23MB +2026-10-18T15:53:02+09:00 99bb4ce30ad3 Verifying Checksum +2026-10-18T15:53:02+09:00 99bb4ce30ad3 Download complete +2026-10-18T15:53:02+09:00 31b6f2223c4b Verifying Checksum +2026-10-18T15:53:02+09:00 31b6f2223c4b Download complete +2026-10-18T15:53:02+09:00 4831516dd0cb Extracting [======================> ] 12.98MB/28.23MB +2026-10-18T15:53:02+09:00 a6809e067bc1 Downloading [==================================================>] 3.141kB/3.141kB +2026-10-18T15:53:02+09:00 a6809e067bc1 Verifying Checksum +2026-10-18T15:53:02+09:00 a6809e067bc1 Download complete +2026-10-18T15:53:02+09:00 a7ef49b2a615 Downloading [==================================================>] 10.3kB/10.3kB +2026-10-18T15:53:02+09:00 a7ef49b2a615 Verifying Checksum +2026-10-18T15:53:02+09:00 a7ef49b2a615 Download complete +2026-10-18T15:53:02+09:00 10643155f463 Downloading [> ] 539.3kB/112.8MB +2026-10-18T15:53:02+09:00 4831516dd0cb Extracting [=========================================> ] 23.3MB/28.23MB +2026-10-18T15:53:03+09:00 10643155f463 Downloading [=========> ] 22.35MB/112.8MB +2026-10-18T15:53:03+09:00 29d37472e7c3 Downloading [==================================================>] 128B/128B +2026-10-18T15:53:03+09:00 29d37472e7c3 Verifying Checksum +2026-10-18T15:53:03+09:00 29d37472e7c3 Download complete +2026-10-18T15:53:03+09:00 4d2363af1825 Downloading [==================================================>] 168B/168B +2026-10-18T15:53:03+09:00 4d2363af1825 Verifying Checksum +2026-10-18T15:53:03+09:00 4d2363af1825 Download complete +2026-10-18T15:53:03+09:00 4831516dd0cb Extracting [==========================================> ] 23.89MB/28.23MB +2026-10-18T15:53:03+09:00 10643155f463 Downloading [===============================> ] 71.13MB/112.8MB +2026-10-18T15:53:03+09:00 4a14fbbe260a Downloading [==================================================>] 5.84kB/5.84kB +2026-10-18T15:53:03+09:00 4a14fbbe260a Verifying Checksum +2026-10-18T15:53:03+09:00 4a14fbbe260a Download complete +2026-10-18T15:53:03+09:00 8cced4a98c7e Downloading [==================================================>] 186B/186B +2026-10-18T15:53:03+09:00 8cced4a98c7e Verifying Checksum +2026-10-18T15:53:03+09:00 8cced4a98c7e Download complete +2026-10-18T15:53:03+09:00 10643155f463 Verifying Checksum +2026-10-18T15:53:03+09:00 10643155f463 Download complete +2026-10-18T15:53:03+09:00 4831516dd0cb Extracting [================================================> ] 27.13MB/28.23MB +2026-10-18T15:53:03+09:00 4909bfb5f5ed Downloading [======> ] 16.38kB/123.1kB +2026-10-18T15:53:03+09:00 d78be5cc1e53 Downloading [==================================================>] 951B/951B +2026-10-18T15:53:03+09:00 d78be5cc1e53 Verifying Checksum +2026-10-18T15:53:03+09:00 d78be5cc1e53 Download complete +2026-10-18T15:53:03+09:00 d78be5cc1e53 Extracting [==================================================>] 951B/951B +2026-10-18T15:53:03+09:00 d78be5cc1e53 Extracting [==================================================>] 951B/951B +2026-10-18T15:53:03+09:00 4909bfb5f5ed Verifying Checksum +2026-10-18T15:53:03+09:00 4909bfb5f5ed Download complete +2026-10-18T15:53:03+09:00 3e1ddef0ec36 Downloading [> ] 16.38kB/1.451MB +2026-10-18T15:53:03+09:00 4831516dd0cb Extracting [================================================> ] 27.43MB/28.23MB +2026-10-18T15:53:03+09:00 4831516dd0cb Extracting [==================================================>] 28.23MB/28.23MB +2026-10-18T15:53:03+09:00 3e1ddef0ec36 Verifying Checksum +2026-10-18T15:53:03+09:00 3e1ddef0ec36 Download complete +2026-10-18T15:53:03+09:00 d9f591c70342 Downloading [==================================================>] 140B/140B +2026-10-18T15:53:03+09:00 fe2c7735354a Downloading [=> ] 15.79kB/666.5kB +2026-10-18T15:53:03+09:00 d9f591c70342 Verifying Checksum +2026-10-18T15:53:03+09:00 d9f591c70342 Download complete +2026-10-18T15:53:03+09:00 95121e5a56c0 Downloading [> ] 146.9kB/14.29MB +2026-10-18T15:53:03+09:00 4831516dd0cb Pull complete +2026-10-18T15:53:03+09:00 9f4a0348ad2e Extracting [==================================================>] 1.169kB/1.169kB +2026-10-18T15:53:03+09:00 9f4a0348ad2e Extracting [==================================================>] 1.169kB/1.169kB +2026-10-18T15:53:03+09:00 fe2c7735354a Downloading [==========================================> ] 572.8kB/666.5kB +2026-10-18T15:53:03+09:00 fe2c7735354a Downloading [==================================================>] 666.5kB/666.5kB +2026-10-18T15:53:03+09:00 fe2c7735354a Verifying Checksum +2026-10-18T15:53:03+09:00 fe2c7735354a Download complete +2026-10-18T15:53:03+09:00 95121e5a56c0 Downloading [===> ] 1.032MB/14.29MB +2026-10-18T15:53:03+09:00 4f4fb700ef54 Downloading [==================================================>] 32B/32B +2026-10-18T15:53:03+09:00 4f4fb700ef54 Verifying Checksum +2026-10-18T15:53:03+09:00 4f4fb700ef54 Download complete +2026-10-18T15:53:03+09:00 95121e5a56c0 Downloading [==================> ] 5.16MB/14.29MB +2026-10-18T15:53:03+09:00 4ed485d78f72 Download complete +2026-10-18T15:53:03+09:00 95121e5a56c0 Verifying Checksum +2026-10-18T15:53:03+09:00 95121e5a56c0 Download complete +2026-10-18T15:53:07+09:00 9f4a0348ad2e Pull complete +2026-10-18T15:53:07+09:00 d78be5cc1e53 Pull complete +2026-10-18T15:53:07+09:00 6b6aac9d7476 Extracting [> ] 65.54kB/4.534MB +2026-10-18T15:53:07+09:00 fe2c7735354a Extracting [==> ] 32.77kB/666.5kB +2026-10-18T15:53:07+09:00 fe2c7735354a Extracting [==================================================>] 666.5kB/666.5kB +2026-10-18T15:53:07+09:00 fe2c7735354a Extracting [==================================================>] 666.5kB/666.5kB +2026-10-18T15:53:07+09:00 6b6aac9d7476 Extracting [==================================================>] 4.534MB/4.534MB +2026-10-18T15:53:08+09:00 6b6aac9d7476 Pull complete +2026-10-18T15:53:08+09:00 fe2c7735354a Pull complete +2026-10-18T15:53:08+09:00 d8a310896f84 Extracting [=> ] 32.77kB/1.25MB +2026-10-18T15:53:08+09:00 95121e5a56c0 Extracting [> ] 163.8kB/14.29MB +2026-10-18T15:53:08+09:00 d8a310896f84 Extracting [==================================================>] 1.25MB/1.25MB +2026-10-18T15:53:08+09:00 d8a310896f84 Pull complete +2026-10-18T15:53:08+09:00 99bb4ce30ad3 Extracting [> ] 98.3kB/8.066MB +2026-10-18T15:53:08+09:00 95121e5a56c0 Extracting [===================> ] 5.571MB/14.29MB +2026-10-18T15:53:08+09:00 99bb4ce30ad3 Extracting [============================> ] 4.522MB/8.066MB +2026-10-18T15:53:08+09:00 95121e5a56c0 Extracting [==================================================>] 14.29MB/14.29MB +2026-10-18T15:53:08+09:00 99bb4ce30ad3 Extracting [======================================> ] 6.291MB/8.066MB +2026-10-18T15:53:08+09:00 99bb4ce30ad3 Extracting [==================================================>] 8.066MB/8.066MB +2026-10-18T15:53:08+09:00 95121e5a56c0 Pull complete +2026-10-18T15:53:08+09:00 99bb4ce30ad3 Pull complete +2026-10-18T15:53:08+09:00 d9f591c70342 Extracting [==================================================>] 140B/140B +2026-10-18T15:53:08+09:00 d9f591c70342 Extracting [==================================================>] 140B/140B +2026-10-18T15:53:08+09:00 31b6f2223c4b Extracting [=> ] 32.77kB/1.196MB +2026-10-18T15:53:08+09:00 d9f591c70342 Pull complete +2026-10-18T15:53:08+09:00 4f4fb700ef54 Extracting [==================================================>] 32B/32B +2026-10-18T15:53:08+09:00 4f4fb700ef54 Extracting [==================================================>] 32B/32B +2026-10-18T15:53:08+09:00 4f4fb700ef54 Pull complete +2026-10-18T15:53:08+09:00 4ed485d78f72 Extracting [==================================================>] 668B/668B +2026-10-18T15:53:08+09:00 4ed485d78f72 Extracting [==================================================>] 668B/668B +2026-10-18T15:53:08+09:00 4ed485d78f72 Pull complete +2026-10-18T15:53:08+09:00 valkey Pulled +2026-10-18T15:53:08+09:00 31b6f2223c4b Extracting [==================================================>] 1.196MB/1.196MB +2026-10-18T15:53:08+09:00 31b6f2223c4b Extracting [==================================================>] 1.196MB/1.196MB +2026-10-18T15:53:08+09:00 31b6f2223c4b Pull complete +2026-10-18T15:53:08+09:00 9da35c01411f Extracting [==================================================>] 116B/116B +2026-10-18T15:53:08+09:00 9da35c01411f Extracting [==================================================>] 116B/116B +2026-10-18T15:53:08+09:00 9da35c01411f Pull complete +2026-10-18T15:53:08+09:00 a6809e067bc1 Extracting [==================================================>] 3.141kB/3.141kB +2026-10-18T15:53:08+09:00 a6809e067bc1 Extracting [==================================================>] 3.141kB/3.141kB +2026-10-18T15:53:08+09:00 a6809e067bc1 Pull complete +2026-10-18T15:53:08+09:00 10643155f463 Extracting [> ] 557.1kB/112.8MB +2026-10-18T15:53:08+09:00 10643155f463 Extracting [===> ] 8.913MB/112.8MB +2026-10-18T15:53:08+09:00 10643155f463 Extracting [======> ] 15.6MB/112.8MB +2026-10-18T15:53:09+09:00 10643155f463 Extracting [==========> ] 23.4MB/112.8MB +2026-10-18T15:53:09+09:00 10643155f463 Extracting [===============> ] 35.09MB/112.8MB +2026-10-18T15:53:09+09:00 10643155f463 Extracting [====================> ] 47.35MB/112.8MB +2026-10-18T15:53:09+09:00 10643155f463 Extracting [=========================> ] 56.82MB/112.8MB +2026-10-18T15:53:09+09:00 10643155f463 Extracting [==============================> ] 67.96MB/112.8MB +2026-10-18T15:53:09+09:00 10643155f463 Extracting [===================================> ] 80.77MB/112.8MB +2026-10-18T15:53:09+09:00 10643155f463 Extracting [========================================> ] 91.91MB/112.8MB +2026-10-18T15:53:09+09:00 10643155f463 Extracting [===========================================> ] 98.6MB/112.8MB +2026-10-18T15:53:09+09:00 10643155f463 Extracting [=============================================> ] 102.5MB/112.8MB +2026-10-18T15:53:09+09:00 10643155f463 Extracting [===============================================> ] 107.5MB/112.8MB +2026-10-18T15:53:10+09:00 10643155f463 Extracting [================================================> ] 110.3MB/112.8MB +2026-10-18T15:53:10+09:00 10643155f463 Extracting [=================================================> ] 111.4MB/112.8MB +2026-10-18T15:53:10+09:00 10643155f463 Extracting [==================================================>] 112.8MB/112.8MB +2026-10-18T15:53:11+09:00 10643155f463 Pull complete +2026-10-18T15:53:11+09:00 a7ef49b2a615 Extracting [==================================================>] 10.3kB/10.3kB +2026-10-18T15:53:11+09:00 a7ef49b2a615 Extracting [==================================================>] 10.3kB/10.3kB +2026-10-18T15:53:11+09:00 a7ef49b2a615 Pull complete +2026-10-18T15:53:11+09:00 29d37472e7c3 Extracting [==================================================>] 128B/128B +2026-10-18T15:53:11+09:00 29d37472e7c3 Extracting [==================================================>] 128B/128B +2026-10-18T15:53:11+09:00 29d37472e7c3 Pull complete +2026-10-18T15:53:11+09:00 4d2363af1825 Extracting [==================================================>] 168B/168B +2026-10-18T15:53:11+09:00 4d2363af1825 Extracting [==================================================>] 168B/168B +2026-10-18T15:53:11+09:00 4d2363af1825 Pull complete +2026-10-18T15:53:11+09:00 4a14fbbe260a Extracting [==================================================>] 5.84kB/5.84kB +2026-10-18T15:53:11+09:00 4a14fbbe260a Extracting [==================================================>] 5.84kB/5.84kB +2026-10-18T15:53:11+09:00 4a14fbbe260a Pull complete +2026-10-18T15:53:11+09:00 8cced4a98c7e Extracting [==================================================>] 186B/186B +2026-10-18T15:53:11+09:00 8cced4a98c7e Extracting [==================================================>] 186B/186B +2026-10-18T15:53:11+09:00 8cced4a98c7e Pull complete +2026-10-18T15:53:11+09:00 4909bfb5f5ed Extracting [=============> ] 32.77kB/123.1kB +2026-10-18T15:53:11+09:00 4909bfb5f5ed Extracting [==================================================>] 123.1kB/123.1kB +2026-10-18T15:53:12+09:00 4909bfb5f5ed Pull complete +2026-10-18T15:53:12+09:00 3e1ddef0ec36 Extracting [=> ] 32.77kB/1.451MB +2026-10-18T15:53:12+09:00 3e1ddef0ec36 Extracting [==================================================>] 1.451MB/1.451MB +2026-10-18T15:53:12+09:00 3e1ddef0ec36 Pull complete +2026-10-18T15:53:12+09:00 postgres Pulled +2026-10-18T15:53:12+09:00 #1 [internal] load local bake definitions +2026-10-18T15:53:12+09:00 #1 reading from stdin 449B done +2026-10-18T15:53:12+09:00 #1 DONE 0.0s +2026-10-18T15:53:12+09:00 +2026-10-18T15:53:12+09:00 #2 [internal] load build definition from Dockerfile +2026-10-18T15:53:12+09:00 #2 transferring dockerfile: 500B done +2026-10-18T15:53:12+09:00 #2 DONE 0.0s +2026-10-18T15:53:12+09:00 +2026-10-18T15:53:12+09:00 #3 [auth] library/python:pull token for registry-1.docker.io +2026-10-18T15:53:12+09:00 #3 DONE 0.0s +2026-10-18T15:53:12+09:00 +2026-10-18T15:53:12+09:00 #4 [internal] load metadata for docker.io/library/python:3.11-slim +2026-10-18T15:53:12+09:00 #4 DONE 0.6s +2026-10-18T15:53:13+09:00 +2026-10-18T15:53:13+09:00 #5 [internal] load .dockerignore +2026-10-18T15:53:13+09:00 #5 transferring context: 2B done +2026-10-18T15:53:13+09:00 #5 DONE 0.0s +2026-10-18T15:53:13+09:00 +2026-10-18T15:53:13+09:00 #6 [internal] load build context +2026-10-18T15:53:13+09:00 #6 transferring context: 16.83kB done +2026-10-18T15:53:13+09:00 #6 DONE 0.0s +2026-10-18T15:53:13+09:00 +2026-10-18T15:53:13+09:00 #7 [1/8] FROM docker.io/library/python:3.11-slim@sha256:e88e9763f943ec1834f992a4b51e0f24500486803e8bc534e5767af9ea65f6ce +2026-10-18T15:53:13+09:00 #7 resolve docker.io/library/python:3.11-slim@sha256:e88e9763f943ec1834f992a4b51e0f24500486803e8bc534e5767af9ea65f6ce done +2026-10-18T15:53:13+09:00 #7 sha256:e88e9763f943ec1834f992a4b51e0f24500486803e8bc534e5767af9ea65f6ce 10.37kB / 10.37kB done +2026-10-18T15:53:13+09:00 #7 sha256:e529028263dbe6910a2d96f7d2b8f5266385e917fd45d286ef166977c094a51e 1.75kB / 1.75kB done +2026-10-18T15:53:13+09:00 #7 sha256:541096ae9b05d3b850341b78790e2ed31e94d5aa0ea086933c6ff0c09ffa2e63 5.49kB / 5.49kB done +2026-10-18T15:53:13+09:00 #7 sha256:ecc510c1e359bdc007b39802570bb7e4dec7d6ebccf357c3201a74299113e05e 0B / 29.84MB 0.1s +2026-10-18T15:53:13+09:00 #7 sha256:0f752a1982d6f819fc2c9e78ac1514c63f2f2e1dec7885ffd4cb6809ba4a26ca 0B / 1.29MB 0.1s +2026-10-18T15:53:13+09:00 #7 sha256:759a7f30c31818dda4c97b407b24d93da479c306568d185ced927e1a749164f1 0B / 14.46MB 0.1s +2026-10-18T15:53:13+09:00 #7 sha256:ecc510c1e359bdc007b39802570bb7e4dec7d6ebccf357c3201a74299113e05e 11.53MB / 29.84MB 0.2s +2026-10-18T15:53:13+09:00 #7 sha256:ecc510c1e359bdc007b39802570bb7e4dec7d6ebccf357c3201a74299113e05e 29.84MB / 29.84MB 0.3s +2026-10-18T15:53:13+09:00 #7 sha256:0f752a1982d6f819fc2c9e78ac1514c63f2f2e1dec7885ffd4cb6809ba4a26ca 1.29MB / 1.29MB 0.2s done +2026-10-18T15:53:13+09:00 #7 sha256:759a7f30c31818dda4c97b407b24d93da479c306568d185ced927e1a749164f1 14.46MB / 14.46MB 0.3s +2026-10-18T15:53:13+09:00 #7 sha256:496c1a902b3a93cea3e54b90b79dbcaa0e58ad90c3fe9dd0a43c9557dc47f17d 250B / 250B 0.3s +2026-10-18T15:53:13+09:00 #7 extracting sha256:ecc510c1e359bdc007b39802570bb7e4dec7d6ebccf357c3201a74299113e05e +2026-10-18T15:53:13+09:00 #7 sha256:ecc510c1e359bdc007b39802570bb7e4dec7d6ebccf357c3201a74299113e05e 29.84MB / 29.84MB 0.5s done +2026-10-18T15:53:13+09:00 #7 sha256:759a7f30c31818dda4c97b407b24d93da479c306568d185ced927e1a749164f1 14.46MB / 14.46MB 0.5s done +2026-10-18T15:53:13+09:00 #7 sha256:496c1a902b3a93cea3e54b90b79dbcaa0e58ad90c3fe9dd0a43c9557dc47f17d 250B / 250B 0.4s done +2026-10-18T15:53:14+09:00 #7 extracting sha256:ecc510c1e359bdc007b39802570bb7e4dec7d6ebccf357c3201a74299113e05e 0.6s done +2026-10-18T15:53:14+09:00 #7 extracting sha256:0f752a1982d6f819fc2c9e78ac1514c63f2f2e1dec7885ffd4cb6809ba4a26ca 0.1s done +2026-10-18T15:53:14+09:00 #7 extracting sha256:759a7f30c31818dda4c97b407b24d93da479c306568d185ced927e1a749164f1 +2026-10-18T15:53:15+09:00 #7 extracting sha256:759a7f30c31818dda4c97b407b24d93da479c306568d185ced927e1a749164f1 0.4s done +2026-10-18T15:53:15+09:00 #7 extracting sha256:496c1a902b3a93cea3e54b90b79dbcaa0e58ad90c3fe9dd0a43c9557dc47f17d +2026-10-18T15:53:15+09:00 #7 extracting sha256:496c1a902b3a93cea3e54b90b79dbcaa0e58ad90c3fe9dd0a43c9557dc47f17d done +2026-10-18T15:53:15+09:00 #7 DONE 2.5s +2026-10-18T15:53:15+09:00 +2026-10-18T15:53:15+09:00 #8 [2/8] WORKDIR /app +2026-10-18T15:53:15+09:00 #8 DONE 0.0s +2026-10-18T15:53:15+09:00 +2026-10-18T15:53:15+09:00 #9 [3/8] COPY requirements.txt . +2026-10-18T15:53:15+09:00 #9 DONE 0.0s +2026-10-18T15:53:15+09:00 +2026-10-18T15:53:15+09:00 #10 [4/8] RUN pip install --no-cache-dir -r requirements.txt +2026-10-18T15:53:16+09:00 #10 1.137 Looking in indexes: <설정된 서버> <설정된 서버> +2026-10-18T15:53:16+09:00 #10 1.138 Ignoring torch: markers 'sys_platform != "linux" or platform_machine != "x86_64"' don't match your environment +2026-10-18T15:53:16+09:00 #10 1.487 Collecting fastapi==0.115.0 (from -r requirements.txt (line 4)) +2026-10-18T15:53:17+09:00 #10 1.543 Downloading fastapi-0.115.0-py3-none-any.whl.metadata (27 kB) +2026-10-18T15:53:17+09:00 #10 1.625 Collecting uvicorn==0.30.6 (from -r requirements.txt (line 5)) +2026-10-18T15:53:17+09:00 #10 1.636 Downloading uvicorn-0.30.6-py3-none-any.whl.metadata (6.6 kB) +2026-10-18T15:53:17+09:00 #10 1.700 Collecting FlagEmbedding==1.2.11 (from -r requirements.txt (line 6)) +2026-10-18T15:53:17+09:00 #10 1.711 Downloading FlagEmbedding-1.2.11.tar.gz (147 kB) +2026-10-18T15:53:17+09:00 #10 1.724 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 147.1/147.1 kB 12.0 MB/s eta 0:00:00 +2026-10-18T15:53:17+09:00 #10 1.739 Preparing metadata (setup.py): started +2026-10-18T15:53:17+09:00 #10 1.986 Preparing metadata (setup.py): finished with status 'done' +2026-10-18T15:53:17+09:00 #10 2.144 Collecting torch==2.4.1+cpu (from -r requirements.txt (line 9)) +2026-10-18T15:53:17+09:00 #10 2.184 Downloading <설정된 서버> (194.9 MB) +2026-10-18T15:53:18+09:00 #10 2.974 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 194.9/194.9 MB 341.0 MB/s eta 0:00:00 +2026-10-18T15:53:18+09:00 #10 3.248 Collecting transformers==4.44.2 (from -r requirements.txt (line 11)) +2026-10-18T15:53:18+09:00 #10 3.258 Downloading transformers-4.44.2-py3-none-any.whl.metadata (43 kB) +2026-10-18T15:53:18+09:00 #10 3.260 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 43.7/43.7 kB 438.8 MB/s eta 0:00:00 +2026-10-18T15:53:18+09:00 #10 3.333 Collecting peft==0.12.0 (from -r requirements.txt (line 12)) +2026-10-18T15:53:18+09:00 #10 3.344 Downloading peft-0.12.0-py3-none-any.whl.metadata (13 kB) +2026-10-18T15:53:19+09:00 #10 3.758 Collecting numpy==1.26.4 (from -r requirements.txt (line 13)) +2026-10-18T15:53:19+09:00 #10 3.768 Downloading numpy-1.26.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (61 kB) +2026-10-18T15:53:19+09:00 #10 3.770 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 61.0/61.0 kB 390.3 MB/s eta 0:00:00 +2026-10-18T15:53:19+09:00 #10 3.927 Collecting pyarrow==21.0.0 (from -r requirements.txt (line 15)) +2026-10-18T15:53:19+09:00 #10 3.937 Downloading pyarrow-21.0.0-cp311-cp311-manylinux_2_28_x86_64.whl.metadata (3.3 kB) +2026-10-18T15:53:19+09:00 #10 4.021 Collecting starlette<0.39.0,>=0.37.2 (from fastapi==0.115.0->-r requirements.txt (line 4)) +2026-10-18T15:53:19+09:00 #10 4.030 Downloading starlette-0.38.6-py3-none-any.whl.metadata (6.0 kB) +2026-10-18T15:53:19+09:00 #10 4.184 Collecting pydantic!=1.8,!=1.8.1,!=2.0.0,!=2.0.1,!=2.1.0,<3.0.0,>=1.7.4 (from fastapi==0.115.0->-r requirements.txt (line 4)) +2026-10-18T15:53:19+09:00 #10 4.194 Downloading pydantic-2.14.1-py3-none-any.whl.metadata (133 kB) +2026-10-18T15:53:19+09:00 #10 4.197 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 133.0/133.0 kB 76.2 MB/s eta 0:00:00 +2026-10-18T15:53:19+09:00 #10 4.244 Collecting typing-extensions>=4.8.0 (from fastapi==0.115.0->-r requirements.txt (line 4)) +2026-10-18T15:53:19+09:00 #10 4.253 Downloading typing_extensions-4.16.0-py3-none-any.whl.metadata (3.3 kB) +2026-10-18T15:53:19+09:00 #10 4.360 Collecting click>=7.0 (from uvicorn==0.30.6->-r requirements.txt (line 5)) +2026-10-18T15:53:19+09:00 #10 4.370 Downloading click-8.5.0-py3-none-any.whl.metadata (2.6 kB) +2026-10-18T15:53:19+09:00 #10 4.435 Collecting h11>=0.8 (from uvicorn==0.30.6->-r requirements.txt (line 5)) +2026-10-18T15:53:19+09:00 #10 4.444 Downloading h11-0.16.0-py3-none-any.whl.metadata (8.3 kB) +2026-10-18T15:53:19+09:00 #10 4.524 Collecting datasets (from FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:53:20+09:00 #10 4.534 Downloading datasets-5.1.0-py3-none-any.whl.metadata (24 kB) +2026-10-18T15:53:20+09:00 #10 4.608 Collecting accelerate>=0.20.1 (from FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:53:20+09:00 #10 4.619 Downloading accelerate-1.15.0-py3-none-any.whl.metadata (19 kB) +2026-10-18T15:53:20+09:00 #10 4.683 Collecting sentence_transformers (from FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:53:20+09:00 #10 4.693 Downloading sentence_transformers-6.1.0-py3-none-any.whl.metadata (20 kB) +2026-10-18T15:53:20+09:00 #10 4.751 Collecting filelock (from torch==2.4.1+cpu->-r requirements.txt (line 9)) +2026-10-18T15:53:20+09:00 #10 4.760 Downloading filelock-4.2.1-py3-none-any.whl.metadata (2.0 kB) +2026-10-18T15:53:20+09:00 #10 4.864 Collecting sympy (from torch==2.4.1+cpu->-r requirements.txt (line 9)) +2026-10-18T15:53:20+09:00 #10 4.875 Downloading sympy-1.14.0-py3-none-any.whl.metadata (12 kB) +2026-10-18T15:53:20+09:00 #10 4.928 Collecting networkx (from torch==2.4.1+cpu->-r requirements.txt (line 9)) +2026-10-18T15:53:20+09:00 #10 4.938 Downloading networkx-3.6.1-py3-none-any.whl.metadata (6.8 kB) +2026-10-18T15:53:20+09:00 #10 4.979 Collecting jinja2 (from torch==2.4.1+cpu->-r requirements.txt (line 9)) +2026-10-18T15:53:20+09:00 #10 4.992 Downloading <설정된 서버> (2.9 kB) +2026-10-18T15:53:20+09:00 #10 5.044 Collecting fsspec (from torch==2.4.1+cpu->-r requirements.txt (line 9)) +2026-10-18T15:53:20+09:00 #10 5.054 Downloading fsspec-2026.9.0-py3-none-any.whl.metadata (10 kB) +2026-10-18T15:53:20+09:00 #10 5.242 Collecting huggingface-hub<1.0,>=0.23.2 (from transformers==4.44.2->-r requirements.txt (line 11)) +2026-10-18T15:53:20+09:00 #10 5.252 Downloading huggingface_hub-0.36.2-py3-none-any.whl.metadata (15 kB) +2026-10-18T15:53:20+09:00 #10 5.262 Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.11/site-packages (from transformers==4.44.2->-r requirements.txt (line 11)) (26.3) +2026-10-18T15:53:20+09:00 #10 5.339 Collecting pyyaml>=5.1 (from transformers==4.44.2->-r requirements.txt (line 11)) +2026-10-18T15:53:20+09:00 #10 5.349 Downloading pyyaml-6.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (2.4 kB) +2026-10-18T15:53:21+09:00 #10 5.754 Collecting regex!=2019.12.17 (from transformers==4.44.2->-r requirements.txt (line 11)) +2026-10-18T15:53:21+09:00 #10 5.764 Downloading regex-2026.9.29-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (40 kB) +2026-10-18T15:53:21+09:00 #10 5.766 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 40.6/40.6 kB 350.0 MB/s eta 0:00:00 +2026-10-18T15:53:21+09:00 #10 5.812 Collecting requests (from transformers==4.44.2->-r requirements.txt (line 11)) +2026-10-18T15:53:21+09:00 #10 5.822 Downloading requests-2.34.2-py3-none-any.whl.metadata (4.8 kB) +2026-10-18T15:53:21+09:00 #10 5.952 Collecting safetensors>=0.4.1 (from transformers==4.44.2->-r requirements.txt (line 11)) +2026-10-18T15:53:21+09:00 #10 5.962 Downloading safetensors-0.8.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.2 kB) +2026-10-18T15:53:21+09:00 #10 6.243 Collecting tokenizers<0.20,>=0.19 (from transformers==4.44.2->-r requirements.txt (line 11)) +2026-10-18T15:53:21+09:00 #10 6.253 Downloading tokenizers-0.19.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (6.7 kB) +2026-10-18T15:53:21+09:00 #10 6.309 Collecting tqdm>=4.27 (from transformers==4.44.2->-r requirements.txt (line 11)) +2026-10-18T15:53:21+09:00 #10 6.319 Downloading tqdm-4.70.1-py3-none-any.whl.metadata (57 kB) +2026-10-18T15:53:21+09:00 #10 6.320 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 57.4/57.4 kB 451.6 MB/s eta 0:00:00 +2026-10-18T15:53:21+09:00 #10 6.431 Collecting psutil (from peft==0.12.0->-r requirements.txt (line 12)) +2026-10-18T15:53:22+09:00 #10 6.441 Downloading psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl.metadata (22 kB) +2026-10-18T15:53:22+09:00 #10 6.629 Collecting hf-xet<2.0.0,>=1.1.3 (from huggingface-hub<1.0,>=0.23.2->transformers==4.44.2->-r requirements.txt (line 11)) +2026-10-18T15:53:22+09:00 #10 6.639 Downloading hf_xet-1.7.0-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.metadata (4.9 kB) +2026-10-18T15:53:22+09:00 #10 6.752 Collecting annotated-types>=0.6.0 (from pydantic!=1.8,!=1.8.1,!=2.0.0,!=2.0.1,!=2.1.0,<3.0.0,>=1.7.4->fastapi==0.115.0->-r requirements.txt (line 4)) +2026-10-18T15:53:22+09:00 #10 6.762 Downloading annotated_types-0.8.0-py3-none-any.whl.metadata (15 kB) +2026-10-18T15:53:22+09:00 #10 7.383 Collecting pydantic-core==2.50.1 (from pydantic!=1.8,!=1.8.1,!=2.0.0,!=2.0.1,!=2.1.0,<3.0.0,>=1.7.4->fastapi==0.115.0->-r requirements.txt (line 4)) +2026-10-18T15:53:23+09:00 #10 7.394 Downloading pydantic_core-2.50.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (6.5 kB) +2026-10-18T15:53:23+09:00 #10 7.461 Collecting typing-inspection>=0.4.4 (from pydantic!=1.8,!=1.8.1,!=2.0.0,!=2.0.1,!=2.1.0,<3.0.0,>=1.7.4->fastapi==0.115.0->-r requirements.txt (line 4)) +2026-10-18T15:53:23+09:00 #10 7.471 Downloading typing_inspection-0.4.4-py3-none-any.whl.metadata (2.6 kB) +2026-10-18T15:53:23+09:00 #10 7.562 Collecting anyio<5,>=3.4.0 (from starlette<0.39.0,>=0.37.2->fastapi==0.115.0->-r requirements.txt (line 4)) +2026-10-18T15:53:23+09:00 #10 7.572 Downloading anyio-4.15.1-py3-none-any.whl.metadata (4.7 kB) +2026-10-18T15:53:23+09:00 #10 7.650 INFO: pip is looking at multiple versions of datasets to determine which version is compatible with other requirements. This could take a while. +2026-10-18T15:53:23+09:00 #10 7.654 Collecting datasets (from FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:53:23+09:00 #10 7.664 Downloading datasets-5.0.1-py3-none-any.whl.metadata (23 kB) +2026-10-18T15:53:23+09:00 #10 7.824 Collecting dill<0.4.2,>=0.3.0 (from datasets->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:53:23+09:00 #10 7.833 Downloading dill-0.4.1-py3-none-any.whl.metadata (10 kB) +2026-10-18T15:53:23+09:00 #10 7.966 Collecting pandas (from datasets->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:53:23+09:00 #10 7.976 Downloading pandas-3.0.6-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.metadata (79 kB) +2026-10-18T15:53:23+09:00 #10 7.978 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 79.5/79.5 kB 530.9 MB/s eta 0:00:00 +2026-10-18T15:53:23+09:00 #10 8.065 Collecting httpx<1.0.0 (from datasets->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:53:23+09:00 #10 8.074 Downloading httpx-0.28.1-py3-none-any.whl.metadata (7.1 kB) +2026-10-18T15:53:23+09:00 #10 8.381 Collecting xxhash (from datasets->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:53:23+09:00 #10 8.391 Downloading xxhash-4.0.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (17 kB) +2026-10-18T15:53:23+09:00 #10 8.465 Collecting multiprocess<0.70.20 (from datasets->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:53:23+09:00 #10 8.475 Downloading multiprocess-0.70.19-py311-none-any.whl.metadata (7.5 kB) +2026-10-18T15:53:23+09:00 #10 8.488 Collecting fsspec (from torch==2.4.1+cpu->-r requirements.txt (line 9)) +2026-10-18T15:53:24+09:00 #10 8.498 Downloading fsspec-2026.6.0-py3-none-any.whl.metadata (10 kB) +2026-10-18T15:53:24+09:00 #10 8.656 Collecting charset_normalizer<4,>=2 (from requests->transformers==4.44.2->-r requirements.txt (line 11)) +2026-10-18T15:53:24+09:00 #10 8.666 Downloading charset_normalizer-3.5.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (46 kB) +2026-10-18T15:53:24+09:00 #10 8.668 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 46.4/46.4 kB 420.5 MB/s eta 0:00:00 +2026-10-18T15:53:24+09:00 #10 8.712 Collecting idna<4,>=2.5 (from requests->transformers==4.44.2->-r requirements.txt (line 11)) +2026-10-18T15:53:24+09:00 #10 8.722 Downloading idna-3.20-py3-none-any.whl.metadata (7.2 kB) +2026-10-18T15:53:24+09:00 #10 8.771 Collecting urllib3<3,>=1.26 (from requests->transformers==4.44.2->-r requirements.txt (line 11)) +2026-10-18T15:53:24+09:00 #10 8.781 Downloading urllib3-2.8.0-py3-none-any.whl.metadata (7.4 kB) +2026-10-18T15:53:24+09:00 #10 8.821 Collecting certifi>=2023.5.7 (from requests->transformers==4.44.2->-r requirements.txt (line 11)) +2026-10-18T15:53:24+09:00 #10 8.831 Downloading certifi-2026.7.22-py3-none-any.whl.metadata (2.5 kB) +2026-10-18T15:53:24+09:00 #10 8.903 Collecting MarkupSafe>=2.0 (from jinja2->torch==2.4.1+cpu->-r requirements.txt (line 9)) +2026-10-18T15:53:24+09:00 #10 8.913 Downloading markupsafe-3.0.4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (2.7 kB) +2026-10-18T15:53:24+09:00 #10 8.964 INFO: pip is looking at multiple versions of sentence-transformers to determine which version is compatible with other requirements. This could take a while. +2026-10-18T15:53:24+09:00 #10 8.967 Collecting sentence_transformers (from FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:53:24+09:00 #10 8.978 Downloading sentence_transformers-6.0.1-py3-none-any.whl.metadata (20 kB) +2026-10-18T15:53:24+09:00 #10 9.000 Downloading sentence_transformers-6.0.0-py3-none-any.whl.metadata (20 kB) +2026-10-18T15:53:24+09:00 #10 9.021 Downloading sentence_transformers-5.7.0-py3-none-any.whl.metadata (18 kB) +2026-10-18T15:53:24+09:00 #10 9.174 Collecting scikit-learn>=0.22.0 (from sentence_transformers->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:53:24+09:00 #10 9.184 Downloading scikit_learn-1.9.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.metadata (9.3 kB) +2026-10-18T15:53:24+09:00 #10 9.324 Collecting scipy>=1.0.0 (from sentence_transformers->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:53:25+09:00 #10 9.334 Downloading scipy-1.17.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.metadata (62 kB) +2026-10-18T15:53:25+09:00 #10 9.336 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 62.1/62.1 kB 463.4 MB/s eta 0:00:00 +2026-10-18T15:53:25+09:00 #10 9.396 Collecting mpmath<1.4,>=1.1.0 (from sympy->torch==2.4.1+cpu->-r requirements.txt (line 9)) +2026-10-18T15:53:25+09:00 #10 9.406 Downloading mpmath-1.3.0-py3-none-any.whl.metadata (8.6 kB) +2026-10-18T15:53:25+09:00 #10 10.02 Collecting aiohttp!=4.0.0a0,!=4.0.0a1 (from fsspec[http]<=2026.6.0,>=2023.1.0->datasets->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:53:25+09:00 #10 10.03 Downloading aiohttp-3.14.5-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (8.3 kB) +2026-10-18T15:53:25+09:00 #10 10.11 Collecting httpcore==1.* (from httpx<1.0.0->datasets->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:53:25+09:00 #10 10.12 Downloading httpcore-1.0.9-py3-none-any.whl.metadata (21 kB) +2026-10-18T15:53:25+09:00 #10 10.24 Collecting joblib>=1.4.0 (from scikit-learn>=0.22.0->sentence_transformers->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:53:25+09:00 #10 10.25 Downloading joblib-1.6.0-py3-none-any.whl.metadata (6.5 kB) +2026-10-18T15:53:25+09:00 #10 10.34 Collecting narwhals>=2.0.1 (from scikit-learn>=0.22.0->sentence_transformers->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:53:26+09:00 #10 10.35 Downloading narwhals-2.27.1-py3-none-any.whl.metadata (15 kB) +2026-10-18T15:53:26+09:00 #10 10.42 Collecting threadpoolctl>=3.5.0 (from scikit-learn>=0.22.0->sentence_transformers->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:53:26+09:00 #10 10.43 Downloading threadpoolctl-3.7.0-py3-none-any.whl.metadata (24 kB) +2026-10-18T15:53:26+09:00 #10 10.57 Collecting python-dateutil>=2.8.2 (from pandas->datasets->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:53:26+09:00 #10 10.58 Downloading python_dateutil-2.9.0.post0-py2.py3-none-any.whl.metadata (8.4 kB) +2026-10-18T15:53:26+09:00 #10 10.66 Collecting aiohappyeyeballs>=2.5.0 (from aiohttp!=4.0.0a0,!=4.0.0a1->fsspec[http]<=2026.6.0,>=2023.1.0->datasets->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:53:26+09:00 #10 10.67 Downloading aiohappyeyeballs-2.7.1-py3-none-any.whl.metadata (5.9 kB) +2026-10-18T15:53:26+09:00 #10 10.74 Collecting aiosignal>=1.4.0 (from aiohttp!=4.0.0a0,!=4.0.0a1->fsspec[http]<=2026.6.0,>=2023.1.0->datasets->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:53:26+09:00 #10 10.75 Downloading aiosignal-1.4.0-py3-none-any.whl.metadata (3.7 kB) +2026-10-18T15:53:26+09:00 #10 10.81 Collecting attrs>=17.3.0 (from aiohttp!=4.0.0a0,!=4.0.0a1->fsspec[http]<=2026.6.0,>=2023.1.0->datasets->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:53:26+09:00 #10 10.82 Downloading attrs-26.1.0-py3-none-any.whl.metadata (8.8 kB) +2026-10-18T15:53:26+09:00 #10 10.91 Collecting frozenlist>=1.1.1 (from aiohttp!=4.0.0a0,!=4.0.0a1->fsspec[http]<=2026.6.0,>=2023.1.0->datasets->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:53:26+09:00 #10 10.92 Downloading frozenlist-1.8.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl.metadata (20 kB) +2026-10-18T15:53:26+09:00 #10 11.14 Collecting multidict<8.0,>=4.5 (from aiohttp!=4.0.0a0,!=4.0.0a1->fsspec[http]<=2026.6.0,>=2023.1.0->datasets->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:53:26+09:00 #10 11.15 Downloading multidict-7.1.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (6.2 kB) +2026-10-18T15:53:27+09:00 #10 11.54 Collecting propcache>=0.2.0 (from aiohttp!=4.0.0a0,!=4.0.0a1->fsspec[http]<=2026.6.0,>=2023.1.0->datasets->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:53:27+09:00 #10 11.55 Downloading propcache-0.5.4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (25 kB) +2026-10-18T15:53:27+09:00 #10 11.78 Collecting yarl<2.0,>=1.25.1 (from aiohttp!=4.0.0a0,!=4.0.0a1->fsspec[http]<=2026.6.0,>=2023.1.0->datasets->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:53:27+09:00 #10 11.79 Downloading yarl-1.25.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (111 kB) +2026-10-18T15:53:27+09:00 #10 11.79 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 111.6/111.6 kB 551.7 MB/s eta 0:00:00 +2026-10-18T15:53:27+09:00 #10 11.87 Collecting cloudpickle>=3.0 (from joblib>=1.4.0->scikit-learn>=0.22.0->sentence_transformers->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:53:27+09:00 #10 11.88 Downloading cloudpickle-3.1.2-py3-none-any.whl.metadata (7.1 kB) +2026-10-18T15:53:27+09:00 #10 11.97 Collecting six>=1.5 (from python-dateutil>=2.8.2->pandas->datasets->FlagEmbedding==1.2.11->-r requirements.txt (line 6)) +2026-10-18T15:53:27+09:00 #10 11.98 Downloading six-1.17.0-py2.py3-none-any.whl.metadata (1.7 kB) +2026-10-18T15:53:27+09:00 #10 12.06 Downloading fastapi-0.115.0-py3-none-any.whl (94 kB) +2026-10-18T15:53:27+09:00 #10 12.06 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 94.6/94.6 kB 504.3 MB/s eta 0:00:00 +2026-10-18T15:53:27+09:00 #10 12.07 Downloading uvicorn-0.30.6-py3-none-any.whl (62 kB) +2026-10-18T15:53:27+09:00 #10 12.08 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 62.8/62.8 kB 452.9 MB/s eta 0:00:00 +2026-10-18T15:53:27+09:00 #10 12.09 Downloading transformers-4.44.2-py3-none-any.whl (9.5 MB) +2026-10-18T15:53:27+09:00 #10 12.16 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.5/9.5 MB 137.0 MB/s eta 0:00:00 +2026-10-18T15:53:27+09:00 #10 12.17 Downloading peft-0.12.0-py3-none-any.whl (296 kB) +2026-10-18T15:53:27+09:00 #10 12.17 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 296.4/296.4 kB 333.6 MB/s eta 0:00:00 +2026-10-18T15:53:27+09:00 #10 12.18 Downloading numpy-1.26.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (18.3 MB) +2026-10-18T15:53:27+09:00 #10 12.23 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 18.3/18.3 MB 448.3 MB/s eta 0:00:00 +2026-10-18T15:53:27+09:00 #10 12.24 Downloading pyarrow-21.0.0-cp311-cp311-manylinux_2_28_x86_64.whl (42.8 MB) +2026-10-18T15:53:27+09:00 #10 12.32 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 42.8/42.8 MB 559.6 MB/s eta 0:00:00 +2026-10-18T15:53:27+09:00 #10 12.33 Downloading accelerate-1.15.0-py3-none-any.whl (394 kB) +2026-10-18T15:53:27+09:00 #10 12.33 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 394.3/394.3 kB 627.0 MB/s eta 0:00:00 +2026-10-18T15:53:27+09:00 #10 12.34 Downloading click-8.5.0-py3-none-any.whl (125 kB) +2026-10-18T15:53:27+09:00 #10 12.35 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 125.3/125.3 kB 609.4 MB/s eta 0:00:00 +2026-10-18T15:53:27+09:00 #10 12.36 Downloading h11-0.16.0-py3-none-any.whl (37 kB) +2026-10-18T15:53:27+09:00 #10 12.37 Downloading huggingface_hub-0.36.2-py3-none-any.whl (566 kB) +2026-10-18T15:53:27+09:00 #10 12.37 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 566.4/566.4 kB 670.0 MB/s eta 0:00:00 +2026-10-18T15:53:27+09:00 #10 12.38 Downloading pydantic-2.14.1-py3-none-any.whl (488 kB) +2026-10-18T15:53:27+09:00 #10 12.38 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 488.1/488.1 kB 652.9 MB/s eta 0:00:00 +2026-10-18T15:53:27+09:00 #10 12.39 Downloading pydantic_core-2.50.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.2 MB) +2026-10-18T15:53:27+09:00 #10 12.40 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.2/2.2 MB 612.5 MB/s eta 0:00:00 +2026-10-18T15:53:27+09:00 #10 12.41 Downloading pyyaml-6.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (806 kB) +2026-10-18T15:53:27+09:00 #10 12.41 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 806.6/806.6 kB 676.0 MB/s eta 0:00:00 +2026-10-18T15:53:27+09:00 #10 12.42 Downloading regex-2026.9.29-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (804 kB) +2026-10-18T15:53:27+09:00 #10 12.42 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 805.0/805.0 kB 653.7 MB/s eta 0:00:00 +2026-10-18T15:53:27+09:00 #10 12.43 Downloading safetensors-0.8.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (516 kB) +2026-10-18T15:53:28+09:00 #10 12.43 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 516.0/516.0 kB 545.8 MB/s eta 0:00:00 +2026-10-18T15:53:28+09:00 #10 12.44 Downloading starlette-0.38.6-py3-none-any.whl (71 kB) +2026-10-18T15:53:28+09:00 #10 12.45 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 71.5/71.5 kB 476.8 MB/s eta 0:00:00 +2026-10-18T15:53:28+09:00 #10 12.46 Downloading tokenizers-0.19.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.6 MB) +2026-10-18T15:53:28+09:00 #10 12.47 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.6/3.6 MB 480.9 MB/s eta 0:00:00 +2026-10-18T15:53:28+09:00 #10 12.48 Downloading tqdm-4.70.1-py3-none-any.whl (80 kB) +2026-10-18T15:53:28+09:00 #10 12.48 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 80.2/80.2 kB 505.7 MB/s eta 0:00:00 +2026-10-18T15:53:28+09:00 #10 12.49 Downloading typing_extensions-4.16.0-py3-none-any.whl (45 kB) +2026-10-18T15:53:28+09:00 #10 12.49 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 45.6/45.6 kB 419.4 MB/s eta 0:00:00 +2026-10-18T15:53:28+09:00 #10 12.50 Downloading datasets-5.0.1-py3-none-any.whl (559 kB) +2026-10-18T15:53:28+09:00 #10 12.50 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 559.1/559.1 kB 634.5 MB/s eta 0:00:00 +2026-10-18T15:53:28+09:00 #10 12.51 Downloading fsspec-2026.6.0-py3-none-any.whl (203 kB) +2026-10-18T15:53:28+09:00 #10 12.52 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 203.9/203.9 kB 526.7 MB/s eta 0:00:00 +2026-10-18T15:53:28+09:00 #10 12.53 Downloading requests-2.34.2-py3-none-any.whl (73 kB) +2026-10-18T15:53:28+09:00 #10 12.53 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 73.1/73.1 kB 476.3 MB/s eta 0:00:00 +2026-10-18T15:53:28+09:00 #10 12.54 Downloading filelock-4.2.1-py3-none-any.whl (162 kB) +2026-10-18T15:53:28+09:00 #10 12.54 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 162.5/162.5 kB 420.3 MB/s eta 0:00:00 +2026-10-18T15:53:28+09:00 #10 12.55 Downloading <설정된 서버> (134 kB) +2026-10-18T15:53:28+09:00 #10 12.56 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 134.9/134.9 kB 507.5 MB/s eta 0:00:00 +2026-10-18T15:53:28+09:00 #10 12.57 Downloading networkx-3.6.1-py3-none-any.whl (2.1 MB) +2026-10-18T15:53:28+09:00 #10 12.57 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1/2.1 MB 569.9 MB/s eta 0:00:00 +2026-10-18T15:53:28+09:00 #10 12.58 Downloading psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl (155 kB) +2026-10-18T15:53:28+09:00 #10 12.58 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 155.6/155.6 kB 590.6 MB/s eta 0:00:00 +2026-10-18T15:53:28+09:00 #10 12.59 Downloading sentence_transformers-5.7.0-py3-none-any.whl (611 kB) +2026-10-18T15:53:28+09:00 #10 12.60 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 611.3/611.3 kB 516.5 MB/s eta 0:00:00 +2026-10-18T15:53:28+09:00 #10 12.61 Downloading sympy-1.14.0-py3-none-any.whl (6.3 MB) +2026-10-18T15:53:28+09:00 #10 12.62 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.3/6.3 MB 611.8 MB/s eta 0:00:00 +2026-10-18T15:53:28+09:00 #10 12.63 Downloading annotated_types-0.8.0-py3-none-any.whl (13 kB) +2026-10-18T15:53:28+09:00 #10 12.64 Downloading anyio-4.15.1-py3-none-any.whl (132 kB) +2026-10-18T15:53:28+09:00 #10 12.64 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 132.1/132.1 kB 565.3 MB/s eta 0:00:00 +2026-10-18T15:53:28+09:00 #10 12.65 Downloading certifi-2026.7.22-py3-none-any.whl (136 kB) +2026-10-18T15:53:28+09:00 #10 12.65 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 137.0/137.0 kB 507.0 MB/s eta 0:00:00 +2026-10-18T15:53:28+09:00 #10 12.66 Downloading charset_normalizer-3.5.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (269 kB) +2026-10-18T15:53:28+09:00 #10 12.66 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 270.0/270.0 kB 574.1 MB/s eta 0:00:00 +2026-10-18T15:53:28+09:00 #10 12.67 Downloading dill-0.4.1-py3-none-any.whl (120 kB) +2026-10-18T15:53:28+09:00 #10 12.68 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 120.0/120.0 kB 533.1 MB/s eta 0:00:00 +2026-10-18T15:53:28+09:00 #10 12.69 Downloading hf_xet-1.7.0-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (4.2 MB) +2026-10-18T15:53:28+09:00 #10 12.70 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.2/4.2 MB 558.0 MB/s eta 0:00:00 +2026-10-18T15:53:28+09:00 #10 12.71 Downloading httpx-0.28.1-py3-none-any.whl (73 kB) +2026-10-18T15:53:28+09:00 #10 12.71 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 73.5/73.5 kB 491.8 MB/s eta 0:00:00 +2026-10-18T15:53:28+09:00 #10 12.72 Downloading httpcore-1.0.9-py3-none-any.whl (78 kB) +2026-10-18T15:53:28+09:00 #10 12.72 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 78.8/78.8 kB 522.3 MB/s eta 0:00:00 +2026-10-18T15:53:28+09:00 #10 12.73 Downloading idna-3.20-py3-none-any.whl (69 kB) +2026-10-18T15:53:28+09:00 #10 12.73 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 69.6/69.6 kB 501.6 MB/s eta 0:00:00 +2026-10-18T15:53:28+09:00 #10 12.74 Downloading markupsafe-3.0.4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (22 kB) +2026-10-18T15:53:28+09:00 #10 12.75 Downloading mpmath-1.3.0-py3-none-any.whl (536 kB) +2026-10-18T15:53:28+09:00 #10 12.75 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 536.2/536.2 kB 557.9 MB/s eta 0:00:00 +2026-10-18T15:53:28+09:00 #10 12.76 Downloading multiprocess-0.70.19-py311-none-any.whl (144 kB) +2026-10-18T15:53:28+09:00 #10 12.76 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 144.5/144.5 kB 557.8 MB/s eta 0:00:00 +2026-10-18T15:53:28+09:00 #10 12.77 Downloading scikit_learn-1.9.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (9.3 MB) +2026-10-18T15:53:28+09:00 #10 12.79 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.3/9.3 MB 633.5 MB/s eta 0:00:00 +2026-10-18T15:53:28+09:00 #10 12.80 Downloading scipy-1.17.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (35.3 MB) +2026-10-18T15:53:28+09:00 #10 12.86 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 35.3/35.3 MB 660.5 MB/s eta 0:00:00 +2026-10-18T15:53:28+09:00 #10 12.87 Downloading typing_inspection-0.4.4-py3-none-any.whl (14 kB) +2026-10-18T15:53:28+09:00 #10 12.88 Downloading urllib3-2.8.0-py3-none-any.whl (135 kB) +2026-10-18T15:53:28+09:00 #10 12.89 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 135.7/135.7 kB 561.7 MB/s eta 0:00:00 +2026-10-18T15:53:28+09:00 #10 12.90 Downloading pandas-3.0.6-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (11.1 MB) +2026-10-18T15:53:28+09:00 #10 12.92 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 11.1/11.1 MB 555.6 MB/s eta 0:00:00 +2026-10-18T15:53:28+09:00 #10 12.93 Downloading xxhash-4.0.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (261 kB) +2026-10-18T15:53:28+09:00 #10 12.93 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 261.0/261.0 kB 631.3 MB/s eta 0:00:00 +2026-10-18T15:53:28+09:00 #10 12.94 Downloading aiohttp-3.14.5-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (1.9 MB) +2026-10-18T15:53:28+09:00 #10 12.94 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.9/1.9 MB 674.9 MB/s eta 0:00:00 +2026-10-18T15:53:28+09:00 #10 12.95 Downloading joblib-1.6.0-py3-none-any.whl (306 kB) +2026-10-18T15:53:28+09:00 #10 12.96 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 306.1/306.1 kB 629.3 MB/s eta 0:00:00 +2026-10-18T15:53:28+09:00 #10 12.97 Downloading narwhals-2.27.1-py3-none-any.whl (483 kB) +2026-10-18T15:53:28+09:00 #10 12.97 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 483.2/483.2 kB 618.6 MB/s eta 0:00:00 +2026-10-18T15:53:28+09:00 #10 12.98 Downloading python_dateutil-2.9.0.post0-py2.py3-none-any.whl (229 kB) +2026-10-18T15:53:28+09:00 #10 12.98 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 229.9/229.9 kB 596.5 MB/s eta 0:00:00 +2026-10-18T15:53:28+09:00 #10 12.99 Downloading threadpoolctl-3.7.0-py3-none-any.whl (26 kB) +2026-10-18T15:53:28+09:00 #10 13.00 Downloading aiohappyeyeballs-2.7.1-py3-none-any.whl (15 kB) +2026-10-18T15:53:28+09:00 #10 13.01 Downloading aiosignal-1.4.0-py3-none-any.whl (7.5 kB) +2026-10-18T15:53:28+09:00 #10 13.02 Downloading attrs-26.1.0-py3-none-any.whl (67 kB) +2026-10-18T15:53:28+09:00 #10 13.02 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 67.5/67.5 kB 472.5 MB/s eta 0:00:00 +2026-10-18T15:53:28+09:00 #10 13.03 Downloading cloudpickle-3.1.2-py3-none-any.whl (22 kB) +2026-10-18T15:53:28+09:00 #10 13.04 Downloading frozenlist-1.8.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (231 kB) +2026-10-18T15:53:28+09:00 #10 13.05 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 231.1/231.1 kB 584.0 MB/s eta 0:00:00 +2026-10-18T15:53:28+09:00 #10 13.06 Downloading multidict-7.1.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (480 kB) +2026-10-18T15:53:28+09:00 #10 13.06 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 480.4/480.4 kB 631.7 MB/s eta 0:00:00 +2026-10-18T15:53:28+09:00 #10 13.07 Downloading propcache-0.5.4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (235 kB) +2026-10-18T15:53:28+09:00 #10 13.07 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 235.4/235.4 kB 578.4 MB/s eta 0:00:00 +2026-10-18T15:53:28+09:00 #10 13.08 Downloading six-1.17.0-py2.py3-none-any.whl (11 kB) +2026-10-18T15:53:28+09:00 #10 13.09 Downloading yarl-1.25.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (117 kB) +2026-10-18T15:53:28+09:00 #10 13.09 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 117.7/117.7 kB 500.5 MB/s eta 0:00:00 +2026-10-18T15:53:28+09:00 #10 13.25 Building wheels for collected packages: FlagEmbedding +2026-10-18T15:53:28+09:00 #10 13.26 Building wheel for FlagEmbedding (setup.py): started +2026-10-18T15:53:28+09:00 #10 13.43 Building wheel for FlagEmbedding (setup.py): finished with status 'done' +2026-10-18T15:53:29+09:00 #10 13.43 Created wheel for FlagEmbedding: filename=flagembedding-1.2.11-py3-none-any.whl size=171233 sha256=f922ad34ddd1546f80e6a06ae3bc810fc496131233cb63f13c3b53783cb79a52 +2026-10-18T15:53:29+09:00 #10 13.43 Stored in directory: /tmp/pip-ephem-wheel-cache-i4dt6i3r/wheels/cc/30/56/331f855b95583721e80ba4d5630f701387dcade9d050c88d9d +2026-10-18T15:53:29+09:00 #10 13.43 Successfully built FlagEmbedding +2026-10-18T15:53:29+09:00 #10 13.92 Installing collected packages: mpmath, xxhash, urllib3, typing-extensions, tqdm, threadpoolctl, sympy, six, safetensors, regex, pyyaml, pyarrow, psutil, propcache, numpy, networkx, narwhals, multidict, MarkupSafe, idna, hf-xet, h11, fsspec, frozenlist, filelock, dill, cloudpickle, click, charset_normalizer, certifi, attrs, annotated-types, aiohappyeyeballs, yarl, uvicorn, typing-inspection, scipy, requests, python-dateutil, pydantic-core, multiprocess, joblib, jinja2, httpcore, anyio, aiosignal, torch, starlette, scikit-learn, pydantic, pandas, huggingface-hub, httpx, aiohttp, tokenizers, fastapi, accelerate, transformers, datasets, sentence_transformers, peft, FlagEmbedding +2026-10-18T15:53:53+09:00 #10 38.03 Successfully installed FlagEmbedding-1.2.11 MarkupSafe-3.0.4 accelerate-1.15.0 aiohappyeyeballs-2.7.1 aiohttp-3.14.5 aiosignal-1.4.0 annotated-types-0.8.0 anyio-4.15.1 attrs-26.1.0 certifi-2026.7.22 charset_normalizer-3.5.2 click-8.5.0 cloudpickle-3.1.2 datasets-5.0.1 dill-0.4.1 fastapi-0.115.0 filelock-4.2.1 frozenlist-1.8.0 fsspec-2026.6.0 h11-0.16.0 hf-xet-1.7.0 httpcore-1.0.9 httpx-0.28.1 huggingface-hub-0.36.2 idna-3.20 jinja2-3.1.6 joblib-1.6.0 mpmath-1.3.0 multidict-7.1.0 multiprocess-0.70.19 narwhals-2.27.1 networkx-3.6.1 numpy-1.26.4 pandas-3.0.6 peft-0.12.0 propcache-0.5.4 psutil-7.2.2 pyarrow-21.0.0 pydantic-2.14.1 pydantic-core-2.50.1 python-dateutil-2.9.0.post0 pyyaml-6.0.3 regex-2026.9.29 requests-2.34.2 safetensors-0.8.0 scikit-learn-1.9.1 scipy-1.17.1 sentence_transformers-5.7.0 six-1.17.0 starlette-0.38.6 sympy-1.14.0 threadpoolctl-3.7.0 tokenizers-0.19.1 torch-2.4.1+cpu tqdm-4.70.1 transformers-4.44.2 typing-extensions-4.16.0 typing-inspection-0.4.4 urllib3-2.8.0 uvicorn-0.30.6 xxhash-4.0.1 yarl-1.25.1 +2026-10-18T15:53:53+09:00 #10 38.03 WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: <설정된 서버> +2026-10-18T15:53:53+09:00 #10 38.12 +2026-10-18T15:53:53+09:00 #10 38.12 [notice] A new release of pip is available: 24.0 -> 26.2.1 +2026-10-18T15:53:53+09:00 #10 38.12 [notice] To update, run: pip install --upgrade pip +2026-10-18T15:53:59+09:00 #10 DONE 44.1s +2026-10-18T15:53:59+09:00 +2026-10-18T15:53:59+09:00 #11 [5/8] COPY requirements-observability.txt . +2026-10-18T15:53:59+09:00 #11 DONE 0.0s +2026-10-18T15:53:59+09:00 +2026-10-18T15:53:59+09:00 #12 [6/8] RUN pip install --no-cache-dir -r requirements-observability.txt +2026-10-18T15:54:00+09:00 #12 0.423 Collecting prometheus-client==0.25.0 (from -r requirements-observability.txt (line 1)) +2026-10-18T15:54:00+09:00 #12 0.459 Downloading prometheus_client-0.25.0-py3-none-any.whl.metadata (2.1 kB) +2026-10-18T15:54:00+09:00 #12 0.472 Downloading prometheus_client-0.25.0-py3-none-any.whl (64 kB) +2026-10-18T15:54:00+09:00 #12 0.483 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 64.2/64.2 kB 5.9 MB/s eta 0:00:00 +2026-10-18T15:54:00+09:00 #12 0.921 Installing collected packages: prometheus-client +2026-10-18T15:54:00+09:00 #12 0.953 Successfully installed prometheus-client-0.25.0 +2026-10-18T15:54:00+09:00 #12 0.953 WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: <설정된 서버> +2026-10-18T15:54:00+09:00 #12 1.046 +2026-10-18T15:54:00+09:00 #12 1.046 [notice] A new release of pip is available: 24.0 -> 26.2.1 +2026-10-18T15:54:00+09:00 #12 1.046 [notice] To update, run: pip install --upgrade pip +2026-10-18T15:54:00+09:00 #12 DONE 1.1s +2026-10-18T15:54:00+09:00 +2026-10-18T15:54:00+09:00 #13 [7/8] RUN python -c "from FlagEmbedding import BGEM3FlagModel" +2026-10-18T15:54:04+09:00 #13 DONE 3.4s +2026-10-18T15:54:04+09:00 +2026-10-18T15:54:04+09:00 #14 [8/8] COPY main.py . +2026-10-18T15:54:04+09:00 #14 DONE 0.0s +2026-10-18T15:54:04+09:00 +2026-10-18T15:54:04+09:00 #15 exporting to image +2026-10-18T15:54:04+09:00 #15 exporting layers +2026-10-18T15:54:09+09:00 #15 exporting layers 5.6s done +2026-10-18T15:54:09+09:00 #15 writing image sha256:feb0f015f5224520476af5b8f7df0296808d98591a9363c3bf4c940f7b667bf6 done +2026-10-18T15:54:09+09:00 #15 naming to docker.io/library/docgrid-embedding-server done +2026-10-18T15:54:09+09:00 #15 DONE 5.6s +2026-10-18T15:54:09+09:00 +2026-10-18T15:54:09+09:00 #16 resolving provenance for metadata file +2026-10-18T15:54:09+09:00 #16 DONE 0.0s +2026-10-18T15:54:09+09:00 embedding-server Built +2026-10-18T15:54:09+09:00 Network docgrid_docgrid-local Creating +2026-10-18T15:54:09+09:00 Network docgrid_docgrid-local Created +2026-10-18T15:54:09+09:00 Volume "docgrid_valkey-data" Creating +2026-10-18T15:54:09+09:00 Volume "docgrid_valkey-data" Created +2026-10-18T15:54:09+09:00 Volume "docgrid_postgres17_data" Creating +2026-10-18T15:54:09+09:00 Volume "docgrid_postgres17_data" Created +2026-10-18T15:54:09+09:00 Volume "docgrid_huggingface-cache" Creating +2026-10-18T15:54:09+09:00 Volume "docgrid_huggingface-cache" Created +2026-10-18T15:54:09+09:00 Container docgrid-valkey Creating +2026-10-18T15:54:09+09:00 Container docgrid-embedding Creating +2026-10-18T15:54:09+09:00 Container docgrid-postgres17 Creating +2026-10-18T15:54:09+09:00 Container docgrid-embedding Created +2026-10-18T15:54:09+09:00 Container docgrid-valkey Created +2026-10-18T15:54:09+09:00 Container docgrid-postgres17 Created +2026-10-18T15:54:09+09:00 Container docgrid-embedding Starting +2026-10-18T15:54:09+09:00 Container docgrid-postgres17 Starting +2026-10-18T15:54:09+09:00 Container docgrid-valkey Starting +2026-10-18T15:54:10+09:00 Container docgrid-postgres17 Started +2026-10-18T15:54:10+09:00 Container docgrid-embedding Started +2026-10-18T15:54:10+09:00 Container docgrid-valkey Started +2026-10-18T15:54:13+09:00 [OK] 대상 PostgreSQL 준비 완료 +2026-10-18T15:54:13+09:00 [OK] Valkey 준비 완료 +2026-10-18T15:54:39+09:00 [OK] Embedding Provider 준비 완료 +2026-10-18T15:54:39+09:00 [OK] 대상 PostgreSQL 인증·pgvector 0.8.1 확인 +2026-10-18T15:54:39+09:00 [OK] Valkey 연결 가능 +2026-10-18T15:54:39+09:00 [OK] Embedding Provider 준비 완료 (<설정된 서버>) +2026-10-18T15:54:39+09:00 [OK] 검색 범위 준비 완료 · 생성 답변은 미검증 diff --git a/docs/test-results/demo-fresh-20261018/runs/39105569049-1/runtime/1bd07e5ccd714d77a817b67f1d272a0f/verify-0775c0c6ef524d8fb95fca711451f360.log b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/runtime/1bd07e5ccd714d77a817b67f1d272a0f/verify-0775c0c6ef524d8fb95fca711451f360.log new file mode 100644 index 00000000..ae944691 --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/runtime/1bd07e5ccd714d77a817b67f1d272a0f/verify-0775c0c6ef524d8fb95fca711451f360.log @@ -0,0 +1,49 @@ +2026-10-18T15:56:28+09:00 [실행] 20261018T155628167053+0900 · 범위 search +2026-10-18T15:56:28+09:00 [계정] 로그인 완료 +2026-10-18T15:56:28+09:00 [업로드] 1/15 · 문서 3 +2026-10-18T15:56:28+09:00 [업로드] 2/15 · 문서 4 +2026-10-18T15:56:28+09:00 [업로드] 3/15 · 문서 5 +2026-10-18T15:56:28+09:00 [업로드] 4/15 · 문서 6 +2026-10-18T15:56:28+09:00 [업로드] 5/15 · 문서 7 +2026-10-18T15:56:28+09:00 [업로드] 6/15 · 문서 8 +2026-10-18T15:56:28+09:00 [업로드] 7/15 · 문서 9 +2026-10-18T15:56:28+09:00 [업로드] 8/15 · 문서 10 +2026-10-18T15:56:28+09:00 [업로드] 9/15 · 문서 11 +2026-10-18T15:56:28+09:00 [업로드] 10/15 · 문서 12 +2026-10-18T15:56:28+09:00 [업로드] 11/15 · 문서 13 +2026-10-18T15:56:28+09:00 [업로드] 12/15 · 문서 14 +2026-10-18T15:56:28+09:00 [업로드] 13/15 · 문서 15 +2026-10-18T15:56:28+09:00 [업로드] 14/15 · 문서 16 +2026-10-18T15:56:28+09:00 [업로드] 15/15 · 문서 17 +2026-10-18T15:56:28+09:00 [인덱싱] INDEXED 15/15 · 처리 중 0 · 대기 0 · 실패 0 (0.2초) +2026-10-18T15:56:29+09:00 [검색] 통과: 결과 3건, 기대 문서 포함 여부 확인 +2026-10-18T15:56:29+09:00 [RAG] 미검증: search 범위에서는 생성 답변 성공을 주장하지 않습니다. +2026-10-18T15:56:29+09:00 [질문 1] 검색 PASS · 생성 답변 NOT_RUN +2026-10-18T15:56:29+09:00 [검색] 통과: 결과 3건, 기대 문서 포함 여부 확인 +2026-10-18T15:56:29+09:00 [RAG] 미검증: search 범위에서는 생성 답변 성공을 주장하지 않습니다. +2026-10-18T15:56:29+09:00 [질문 2] 검색 PASS · 생성 답변 NOT_RUN +2026-10-18T15:56:29+09:00 [검색] 통과: 결과 3건, 기대 문서 포함 여부 확인 +2026-10-18T15:56:29+09:00 [RAG] 미검증: search 범위에서는 생성 답변 성공을 주장하지 않습니다. +2026-10-18T15:56:29+09:00 [질문 3] 검색 PASS · 생성 답변 NOT_RUN +2026-10-18T15:56:29+09:00 [원본] 문서 3: PASS +2026-10-18T15:56:29+09:00 [원본] 문서 4: PASS +2026-10-18T15:56:29+09:00 [원본] 문서 5: PASS +2026-10-18T15:56:29+09:00 [원본] 문서 6: PASS +2026-10-18T15:56:29+09:00 [원본] 문서 7: PASS +2026-10-18T15:56:29+09:00 [원본] 문서 8: PASS +2026-10-18T15:56:29+09:00 [원본] 문서 9: PASS +2026-10-18T15:56:29+09:00 [원본] 문서 10: PASS +2026-10-18T15:56:29+09:00 [원본] 문서 11: PASS +2026-10-18T15:56:29+09:00 [원본] 문서 12: PASS +2026-10-18T15:56:29+09:00 [원본] 문서 13: PASS +2026-10-18T15:56:29+09:00 [원본] 문서 14: PASS +2026-10-18T15:56:29+09:00 [원본] 문서 15: PASS +2026-10-18T15:56:29+09:00 [원본] 문서 16: PASS +2026-10-18T15:56:29+09:00 [원본] 문서 17: PASS +2026-10-18T15:56:29+09:00 [업로드] PASS · 15/15 +2026-10-18T15:56:29+09:00 [인덱싱] PASS · 15/15 +2026-10-18T15:56:29+09:00 [검색] PASS · 3/3 +2026-10-18T15:56:29+09:00 [원본 해시] PASS · 15/15 +2026-10-18T15:56:29+09:00 [생성 답변·인용] NOT_RUN · 0/0 +2026-10-18T15:56:29+09:00 [문서 ID 재사용] PASS · 15/15 +2026-10-18T15:56:29+09:00 [최종] 종료 코드 0 diff --git a/docs/test-results/demo-fresh-20261018/runs/39105569049-1/runtime/1bd07e5ccd714d77a817b67f1d272a0f/verify-bd3f7021beb74a68aa22b623ef67065e.log b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/runtime/1bd07e5ccd714d77a817b67f1d272a0f/verify-bd3f7021beb74a68aa22b623ef67065e.log new file mode 100644 index 00000000..02faa85c --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/runtime/1bd07e5ccd714d77a817b67f1d272a0f/verify-bd3f7021beb74a68aa22b623ef67065e.log @@ -0,0 +1,56 @@ +2026-10-18T15:56:04+09:00 [실행] 20261018T155604022729+0900 · 범위 search +2026-10-18T15:56:04+09:00 [계정] 회원가입 완료 +2026-10-18T15:56:04+09:00 [계정] 로그인 완료 +2026-10-18T15:56:04+09:00 [업로드] 1/15 · 문서 3 +2026-10-18T15:56:04+09:00 [업로드] 2/15 · 문서 4 +2026-10-18T15:56:04+09:00 [업로드] 3/15 · 문서 5 +2026-10-18T15:56:04+09:00 [업로드] 4/15 · 문서 6 +2026-10-18T15:56:04+09:00 [업로드] 5/15 · 문서 7 +2026-10-18T15:56:04+09:00 [업로드] 6/15 · 문서 8 +2026-10-18T15:56:05+09:00 [업로드] 7/15 · 문서 9 +2026-10-18T15:56:05+09:00 [업로드] 8/15 · 문서 10 +2026-10-18T15:56:05+09:00 [업로드] 9/15 · 문서 11 +2026-10-18T15:56:05+09:00 [업로드] 10/15 · 문서 12 +2026-10-18T15:56:05+09:00 [업로드] 11/15 · 문서 13 +2026-10-18T15:56:05+09:00 [업로드] 12/15 · 문서 14 +2026-10-18T15:56:05+09:00 [업로드] 13/15 · 문서 15 +2026-10-18T15:56:05+09:00 [업로드] 14/15 · 문서 16 +2026-10-18T15:56:05+09:00 [업로드] 15/15 · 문서 17 +2026-10-18T15:56:05+09:00 [인덱싱] INDEXED 0/15 · 처리 중 2 · 대기 13 · 실패 0 (0.5초) +2026-10-18T15:56:09+09:00 [인덱싱] INDEXED 1/15 · 처리 중 2 · 대기 12 · 실패 0 (4.1초) +2026-10-18T15:56:13+09:00 [인덱싱] INDEXED 4/15 · 처리 중 2 · 대기 9 · 실패 0 (7.7초) +2026-10-18T15:56:16+09:00 [인덱싱] INDEXED 7/15 · 처리 중 1 · 대기 7 · 실패 0 (11.1초) +2026-10-18T15:56:19+09:00 [인덱싱] INDEXED 9/15 · 처리 중 2 · 대기 4 · 실패 0 (14.4초) +2026-10-18T15:56:22+09:00 [인덱싱] INDEXED 13/15 · 처리 중 1 · 대기 1 · 실패 0 (17.5초) +2026-10-18T15:56:25+09:00 [인덱싱] INDEXED 15/15 · 처리 중 0 · 대기 0 · 실패 0 (20.6초) +2026-10-18T15:56:26+09:00 [검색] 통과: 결과 3건, 기대 문서 포함 여부 확인 +2026-10-18T15:56:26+09:00 [RAG] 미검증: search 범위에서는 생성 답변 성공을 주장하지 않습니다. +2026-10-18T15:56:26+09:00 [질문 1] 검색 PASS · 생성 답변 NOT_RUN +2026-10-18T15:56:26+09:00 [검색] 통과: 결과 3건, 기대 문서 포함 여부 확인 +2026-10-18T15:56:26+09:00 [RAG] 미검증: search 범위에서는 생성 답변 성공을 주장하지 않습니다. +2026-10-18T15:56:26+09:00 [질문 2] 검색 PASS · 생성 답변 NOT_RUN +2026-10-18T15:56:26+09:00 [검색] 통과: 결과 3건, 기대 문서 포함 여부 확인 +2026-10-18T15:56:26+09:00 [RAG] 미검증: search 범위에서는 생성 답변 성공을 주장하지 않습니다. +2026-10-18T15:56:26+09:00 [질문 3] 검색 PASS · 생성 답변 NOT_RUN +2026-10-18T15:56:26+09:00 [원본] 문서 3: PASS +2026-10-18T15:56:26+09:00 [원본] 문서 4: PASS +2026-10-18T15:56:26+09:00 [원본] 문서 5: PASS +2026-10-18T15:56:26+09:00 [원본] 문서 6: PASS +2026-10-18T15:56:26+09:00 [원본] 문서 7: PASS +2026-10-18T15:56:26+09:00 [원본] 문서 8: PASS +2026-10-18T15:56:26+09:00 [원본] 문서 9: PASS +2026-10-18T15:56:26+09:00 [원본] 문서 10: PASS +2026-10-18T15:56:26+09:00 [원본] 문서 11: PASS +2026-10-18T15:56:26+09:00 [원본] 문서 12: PASS +2026-10-18T15:56:26+09:00 [원본] 문서 13: PASS +2026-10-18T15:56:26+09:00 [원본] 문서 14: PASS +2026-10-18T15:56:26+09:00 [원본] 문서 15: PASS +2026-10-18T15:56:26+09:00 [원본] 문서 16: PASS +2026-10-18T15:56:26+09:00 [원본] 문서 17: PASS +2026-10-18T15:56:26+09:00 [업로드] PASS · 15/15 +2026-10-18T15:56:26+09:00 [인덱싱] PASS · 15/15 +2026-10-18T15:56:26+09:00 [검색] PASS · 3/3 +2026-10-18T15:56:26+09:00 [원본 해시] PASS · 15/15 +2026-10-18T15:56:26+09:00 [생성 답변·인용] NOT_RUN · 0/0 +2026-10-18T15:56:26+09:00 [문서 ID 재사용] NOT_RUN · 0/0 +2026-10-18T15:56:26+09:00 [최종] 종료 코드 0 diff --git a/docs/test-results/demo-fresh-20261018/runs/39105569049-1/runtime/2cac5af2e629447fb41c291abe0e8feb/events.jsonl b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/runtime/2cac5af2e629447fb41c291abe0e8feb/events.jsonl new file mode 100644 index 00000000..6d40b327 --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/runtime/2cac5af2e629447fb41c291abe0e8feb/events.jsonl @@ -0,0 +1,3 @@ +{"timestamp": "2026-10-18T15:56:39+09:00", "message": "[시작] 로컬 시연 세션 2cac5af2e629447fb41c291abe0e8feb · 범위 search"} +{"timestamp": "2026-10-18T15:56:41+09:00", "message": "[기동 중단] 이번 실행이 시작한 자원을 정리합니다."} +{"timestamp": "2026-10-18T15:56:46+09:00", "message": "[종료 완료] 소유 서버·컨테이너 중지, 데이터·원본·모델 캐시 보존"} diff --git a/docs/test-results/demo-fresh-20261018/runs/39105569049-1/runtime/2cac5af2e629447fb41c291abe0e8feb/services.log b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/runtime/2cac5af2e629447fb41c291abe0e8feb/services.log new file mode 100644 index 00000000..e596ac93 --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/runtime/2cac5af2e629447fb41c291abe0e8feb/services.log @@ -0,0 +1,8 @@ +2026-10-18T15:56:40+09:00 [local-services] 로컬 PostgreSQL·Valkey·Embedding Provider를 시작합니다. +2026-10-18T15:56:40+09:00 Container docgrid-valkey Starting +2026-10-18T15:56:40+09:00 Container docgrid-postgres17 Starting +2026-10-18T15:56:40+09:00 Container docgrid-embedding Starting +2026-10-18T15:56:40+09:00 Container docgrid-postgres17 Started +2026-10-18T15:56:40+09:00 Container docgrid-valkey Started +2026-10-18T15:56:40+09:00 Container docgrid-embedding Started +2026-10-18T15:56:41+09:00 [FAIL] 앱의 대상 포트와 실행 중 컨테이너가 일치하지 않습니다: embedding-server diff --git a/docs/test-results/demo-fresh-20261018/runs/39105569049-1/runtime/ea791ff132274affb11ed6d134b127ba/backend.log b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/runtime/ea791ff132274affb11ed6d134b127ba/backend.log new file mode 100644 index 00000000..d243dc87 --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/runtime/ea791ff132274affb11ed6d134b127ba/backend.log @@ -0,0 +1 @@ +2026-10-18T15:56:54+09:00 To honour the JVM settings for this build a single-use Daemon process will be forked. For more on this, please refer to <설정된 서버> in the Gradle documentation. diff --git a/docs/test-results/demo-fresh-20261018/runs/39105569049-1/runtime/ea791ff132274affb11ed6d134b127ba/events.jsonl b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/runtime/ea791ff132274affb11ed6d134b127ba/events.jsonl new file mode 100644 index 00000000..06686581 --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/runtime/ea791ff132274affb11ed6d134b127ba/events.jsonl @@ -0,0 +1,3 @@ +{"timestamp": "2026-10-18T15:56:47+09:00", "message": "[시작] 로컬 시연 세션 ea791ff132274affb11ed6d134b127ba · 범위 search"} +{"timestamp": "2026-10-18T15:56:54+09:00", "message": "[기동 중단] 이번 실행이 시작한 자원을 정리합니다."} +{"timestamp": "2026-10-18T15:56:57+09:00", "message": "[종료 완료] 소유 서버·컨테이너 중지, 데이터·원본·모델 캐시 보존"} diff --git a/docs/test-results/demo-fresh-20261018/runs/39105569049-1/runtime/ea791ff132274affb11ed6d134b127ba/services.log b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/runtime/ea791ff132274affb11ed6d134b127ba/services.log new file mode 100644 index 00000000..abb40c40 --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/runtime/ea791ff132274affb11ed6d134b127ba/services.log @@ -0,0 +1,14 @@ +2026-10-18T15:56:47+09:00 [local-services] 로컬 PostgreSQL·Valkey·Embedding Provider를 시작합니다. +2026-10-18T15:56:47+09:00 Container docgrid-postgres17 Starting +2026-10-18T15:56:47+09:00 Container docgrid-embedding Starting +2026-10-18T15:56:47+09:00 Container docgrid-valkey Starting +2026-10-18T15:56:48+09:00 Container docgrid-valkey Started +2026-10-18T15:56:48+09:00 Container docgrid-postgres17 Started +2026-10-18T15:56:48+09:00 Container docgrid-embedding Started +2026-10-18T15:56:48+09:00 [OK] 대상 PostgreSQL 준비 완료 +2026-10-18T15:56:48+09:00 [OK] Valkey 준비 완료 +2026-10-18T15:56:52+09:00 [OK] Embedding Provider 준비 완료 +2026-10-18T15:56:53+09:00 [OK] 대상 PostgreSQL 인증·pgvector 0.8.1 확인 +2026-10-18T15:56:53+09:00 [OK] Valkey 연결 가능 +2026-10-18T15:56:53+09:00 [OK] Embedding Provider 준비 완료 (<설정된 서버>) +2026-10-18T15:56:53+09:00 [OK] 검색 범위 준비 완료 · 생성 답변은 미검증 diff --git a/docs/test-results/demo-fresh-20261018/runs/39105569049-1/stop-final.log b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/stop-final.log new file mode 100644 index 00000000..faa1c71d --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/stop-final.log @@ -0,0 +1,10 @@ +실행 ID: 39105569049-1/stop-final +목적: 최종 소유 자원 정리 +시작: 2026-10-18T15:57:27+09:00 +장소: 독립 GitHub hosted 실행기 +기대 종료 코드: 0 +절차: ./scripts/demo.py stop +2026-10-18T15:57:30+09:00 [종료 완료] 소유 서버·컨테이너 중지, 데이터·원본·모델 캐시 보존 +종료: 2026-10-18T15:57:30+09:00 +실제 종료 코드: 0 +소요 시간: 2.971초 diff --git a/docs/test-results/demo-fresh-20261018/runs/39105569049-1/stop-first.log b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/stop-first.log new file mode 100644 index 00000000..3e58f8ec --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/stop-first.log @@ -0,0 +1,10 @@ +실행 ID: 39105569049-1/stop-first +목적: 소유 자원 종료와 데이터·캐시 보존 +시작: 2026-10-18T15:56:36+09:00 +장소: 독립 GitHub hosted 실행기 +기대 종료 코드: 0 +절차: ./scripts/demo.py stop +2026-10-18T15:56:39+09:00 [종료 완료] 소유 서버·컨테이너 중지, 데이터·원본·모델 캐시 보존 +종료: 2026-10-18T15:56:39+09:00 +실제 종료 코드: 0 +소요 시간: 3.124초 diff --git a/docs/test-results/demo-fresh-20261018/runs/39105569049-1/stop-replay.log b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/stop-replay.log new file mode 100644 index 00000000..666c0890 --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/stop-replay.log @@ -0,0 +1,10 @@ +실행 ID: 39105569049-1/stop-replay +목적: 이미 종료된 세션 재종료 +시작: 2026-10-18T15:56:39+09:00 +장소: 독립 GitHub hosted 실행기 +기대 종료 코드: 0 +절차: ./scripts/demo.py stop +2026-10-18T15:56:39+09:00 [종료] 이미 종료된 세션입니다. +종료: 2026-10-18T15:56:39+09:00 +실제 종료 코드: 0 +소요 시간: 0.064초 diff --git a/docs/test-results/demo-fresh-20261018/runs/39105569049-1/summary.json b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/summary.json new file mode 100644 index 00000000..054a19d1 --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/summary.json @@ -0,0 +1,248 @@ +{ + "runId": "39105569049-1", + "revision": "a62175ee3e4621c6411feb3af5f4ed3663802b6c", + "environment": "GitHub hosted Ubuntu 24.04 · actual PostgreSQL/Valkey/BGE-M3 · no Ollama", + "results": [ + { + "id": "preflight", + "purpose": "독립 실행기의 새 환경 확인", + "timestamp": "2026-10-18T15:52:46+09:00", + "verdict": "PASS", + "existingContainers": 0, + "existingImageCount": 6, + "existingVolumes": 0, + "environmentFilesInitiallyPresent": 0, + "workload": { + "documents": 15, + "searchQuestions": 3, + "browserSessions": 1 + } + }, + { + "id": "concurrent-start", + "purpose": "진행 중 start의 잠금으로 두 번째 start 거부", + "timestamp": "2026-10-18T15:52:48+09:00", + "verdict": "PASS", + "exitCode": 1, + "expectedExitCode": 1, + "elapsedSeconds": 0.114, + "log": "concurrent-start.log" + }, + { + "id": "cold-start", + "purpose": "모델·의존성 최초 준비를 포함한 전체 기동", + "timestamp": "2026-10-18T15:56:03+09:00", + "verdict": "PASS", + "exitCode": 0, + "expectedExitCode": 0, + "elapsedSeconds": 196.632, + "log": "cold-start.log" + }, + { + "id": "verify-first", + "purpose": "실제 모델 인덱싱·검색·프록시·원본 대조", + "timestamp": "2026-10-18T15:56:27+09:00", + "verdict": "PASS", + "exitCode": 0, + "expectedExitCode": 0, + "elapsedSeconds": 24.135, + "log": "verify-first.log" + }, + { + "id": "first-result", + "purpose": "예제 필수 단계 수와 이전 원장 문서 ID 검사", + "timestamp": "2026-10-18T15:56:27+09:00", + "verdict": "PASS", + "counts": { + "upload": 15, + "indexing": 15, + "search": 3, + "download": 15 + }, + "rag": "NOT_RUN" + }, + { + "id": "verify-replay", + "purpose": "같은 계정 재실행과 문서 ID 재사용", + "timestamp": "2026-10-18T15:56:30+09:00", + "verdict": "PASS", + "exitCode": 0, + "expectedExitCode": 0, + "elapsedSeconds": 3.072, + "log": "verify-replay.log" + }, + { + "id": "replay-result", + "purpose": "예제 필수 단계 수와 이전 원장 문서 ID 검사", + "timestamp": "2026-10-18T15:56:30+09:00", + "verdict": "PASS", + "counts": { + "upload": 15, + "indexing": 15, + "search": 3, + "download": 15, + "replay": 15 + }, + "rag": "NOT_RUN" + }, + { + "id": "browser", + "purpose": "실제 Chromium 로그인·질문 전송·원본 다운로드 해시", + "timestamp": "2026-10-18T15:56:34+09:00", + "verdict": "PASS", + "exitCode": 0, + "expectedExitCode": 0, + "elapsedSeconds": 3.782, + "log": "browser.log" + }, + { + "id": "ready-status", + "purpose": "기록이 아닌 실제 서버·프록시·DB 준비 재확인", + "timestamp": "2026-10-18T15:56:35+09:00", + "verdict": "PASS", + "exitCode": 0, + "expectedExitCode": 0, + "elapsedSeconds": 1.016, + "log": "ready-status.log" + }, + { + "id": "reuse-start", + "purpose": "동일 활성 세션 중복 기동 없이 재사용", + "timestamp": "2026-10-18T15:56:36+09:00", + "verdict": "PASS", + "exitCode": 0, + "expectedExitCode": 0, + "elapsedSeconds": 1.019, + "log": "reuse-start.log" + }, + { + "id": "stop-first", + "purpose": "소유 자원 종료와 데이터·캐시 보존", + "timestamp": "2026-10-18T15:56:39+09:00", + "verdict": "PASS", + "exitCode": 0, + "expectedExitCode": 0, + "elapsedSeconds": 3.124, + "log": "stop-first.log" + }, + { + "id": "stop-observation", + "purpose": "종료 뒤 실제 서버 포트·컨테이너 실행 상태 확인", + "timestamp": "2026-10-18T15:56:39+09:00", + "verdict": "PASS", + "ownedContainers": 3 + }, + { + "id": "stop-replay", + "purpose": "이미 종료된 세션 재종료", + "timestamp": "2026-10-18T15:56:39+09:00", + "verdict": "PASS", + "exitCode": 0, + "expectedExitCode": 0, + "elapsedSeconds": 0.064, + "log": "stop-replay.log" + }, + { + "id": "missing-provider", + "purpose": "잘못 지정된 임베딩 주소는 준비 실패로 판정", + "timestamp": "2026-10-18T15:56:46+09:00", + "verdict": "PASS", + "exitCode": 1, + "expectedExitCode": 1, + "elapsedSeconds": 7.234, + "log": "missing-provider.log" + }, + { + "id": "missing-provider-cleanup", + "purpose": "종료 뒤 실제 서버 포트·컨테이너 실행 상태 확인", + "timestamp": "2026-10-18T15:56:46+09:00", + "verdict": "PASS", + "ownedContainers": 3 + }, + { + "id": "interrupted-start", + "purpose": "실제 백엔드 기동 중 부모 SIGTERM 뒤 소유 자원 정리", + "timestamp": "2026-10-18T15:56:57+09:00", + "verdict": "PASS", + "exitCode": 130, + "expectedExitCode": 130, + "elapsedSeconds": 10.906, + "log": "interrupted-start.log" + }, + { + "id": "interrupted-cleanup", + "purpose": "종료 뒤 실제 서버 포트·컨테이너 실행 상태 확인", + "timestamp": "2026-10-18T15:56:57+09:00", + "verdict": "PASS", + "ownedContainers": 3 + }, + { + "id": "warm-start", + "purpose": "보존된 의존성·모델 캐시로 재기동", + "timestamp": "2026-10-18T15:57:23+09:00", + "verdict": "PASS", + "exitCode": 0, + "expectedExitCode": 0, + "elapsedSeconds": 26.061, + "log": "warm-start.log" + }, + { + "id": "verify-warm", + "purpose": "재기동 뒤 데이터 보존과 문서 ID 재확인", + "timestamp": "2026-10-18T15:57:27+09:00", + "verdict": "PASS", + "exitCode": 0, + "expectedExitCode": 0, + "elapsedSeconds": 3.626, + "log": "verify-warm.log" + }, + { + "id": "warm-result", + "purpose": "예제 필수 단계 수와 이전 원장 문서 ID 검사", + "timestamp": "2026-10-18T15:57:27+09:00", + "verdict": "PASS", + "counts": { + "upload": 15, + "indexing": 15, + "search": 3, + "download": 15, + "replay": 15 + }, + "rag": "NOT_RUN" + }, + { + "id": "stop-final", + "purpose": "최종 소유 자원 정리", + "timestamp": "2026-10-18T15:57:30+09:00", + "verdict": "PASS", + "exitCode": 0, + "expectedExitCode": 0, + "elapsedSeconds": 2.971, + "log": "stop-final.log" + }, + { + "id": "final-cleanup", + "purpose": "종료 뒤 실제 서버 포트·컨테이너 실행 상태 확인", + "timestamp": "2026-10-18T15:57:30+09:00", + "verdict": "PASS", + "ownedContainers": 3 + }, + { + "id": "environment-preserved", + "purpose": "생성 이후 환경 파일 bytes·mtime 보존", + "timestamp": "2026-10-18T15:57:30+09:00", + "verdict": "PASS", + "unchangedFiles": 2 + }, + { + "id": "always-cleanup", + "purpose": "시험 중단·완료 후 소유 자원 종료", + "timestamp": "2026-10-18T15:57:30+09:00", + "verdict": "PASS", + "exitCode": 0, + "expectedExitCode": 0, + "elapsedSeconds": 0.064, + "log": "always-cleanup.log" + } + ] +} \ No newline at end of file diff --git a/docs/test-results/demo-fresh-20261018/runs/39105569049-1/verify-first.log b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/verify-first.log new file mode 100644 index 00000000..ef943381 --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/verify-first.log @@ -0,0 +1,10 @@ +실행 ID: 39105569049-1/verify-first +목적: 실제 모델 인덱싱·검색·프록시·원본 대조 +시작: 2026-10-18T15:56:03+09:00 +장소: 독립 GitHub hosted 실행기 +기대 종료 코드: 0 +절차: ./scripts/demo.py verify --timeout 900 +2026-10-18T15:56:27+09:00 [검증 통과] 업로드·인덱싱·검색·원본 검사 완료. 기록: .demo/reports/43aaa87d4ac94307a3639f790aabf3a1/summary.json +종료: 2026-10-18T15:56:27+09:00 +실제 종료 코드: 0 +소요 시간: 24.135초 diff --git a/docs/test-results/demo-fresh-20261018/runs/39105569049-1/verify-replay.log b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/verify-replay.log new file mode 100644 index 00000000..618cecc2 --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/verify-replay.log @@ -0,0 +1,10 @@ +실행 ID: 39105569049-1/verify-replay +목적: 같은 계정 재실행과 문서 ID 재사용 +시작: 2026-10-18T15:56:27+09:00 +장소: 독립 GitHub hosted 실행기 +기대 종료 코드: 0 +절차: ./scripts/demo.py verify --timeout 900 +2026-10-18T15:56:30+09:00 [검증 통과] 업로드·인덱싱·검색·원본 검사 완료. 기록: .demo/reports/3abd7182177c4cc4a95e4d956b49ebed/summary.json +종료: 2026-10-18T15:56:30+09:00 +실제 종료 코드: 0 +소요 시간: 3.072초 diff --git a/docs/test-results/demo-fresh-20261018/runs/39105569049-1/verify-warm.log b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/verify-warm.log new file mode 100644 index 00000000..702d9cf2 --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/verify-warm.log @@ -0,0 +1,10 @@ +실행 ID: 39105569049-1/verify-warm +목적: 재기동 뒤 데이터 보존과 문서 ID 재확인 +시작: 2026-10-18T15:57:23+09:00 +장소: 독립 GitHub hosted 실행기 +기대 종료 코드: 0 +절차: ./scripts/demo.py verify +2026-10-18T15:57:27+09:00 [검증 통과] 업로드·인덱싱·검색·원본 검사 완료. 기록: .demo/reports/f1a295ef524b4da7a989b8acd54bc2ca/summary.json +종료: 2026-10-18T15:57:27+09:00 +실제 종료 코드: 0 +소요 시간: 3.626초 diff --git a/docs/test-results/demo-fresh-20261018/runs/39105569049-1/warm-result/events.jsonl b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/warm-result/events.jsonl new file mode 100644 index 00000000..c7c318e9 --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/warm-result/events.jsonl @@ -0,0 +1,49 @@ +{"timestamp": "2026-10-18T15:57:24.602+09:00", "message": "[실행] 20261018T155724600405+0900 · 범위 search"} +{"timestamp": "2026-10-18T15:57:24.788+09:00", "message": "[계정] 로그인 완료"} +{"timestamp": "2026-10-18T15:57:25.142+09:00", "message": "[업로드] 1/15 · 문서 3"} +{"timestamp": "2026-10-18T15:57:25.169+09:00", "message": "[업로드] 2/15 · 문서 4"} +{"timestamp": "2026-10-18T15:57:25.192+09:00", "message": "[업로드] 3/15 · 문서 5"} +{"timestamp": "2026-10-18T15:57:25.214+09:00", "message": "[업로드] 4/15 · 문서 6"} +{"timestamp": "2026-10-18T15:57:25.235+09:00", "message": "[업로드] 5/15 · 문서 7"} +{"timestamp": "2026-10-18T15:57:25.255+09:00", "message": "[업로드] 6/15 · 문서 8"} +{"timestamp": "2026-10-18T15:57:25.276+09:00", "message": "[업로드] 7/15 · 문서 9"} +{"timestamp": "2026-10-18T15:57:25.297+09:00", "message": "[업로드] 8/15 · 문서 10"} +{"timestamp": "2026-10-18T15:57:25.318+09:00", "message": "[업로드] 9/15 · 문서 11"} +{"timestamp": "2026-10-18T15:57:25.344+09:00", "message": "[업로드] 10/15 · 문서 12"} +{"timestamp": "2026-10-18T15:57:25.369+09:00", "message": "[업로드] 11/15 · 문서 13"} +{"timestamp": "2026-10-18T15:57:25.389+09:00", "message": "[업로드] 12/15 · 문서 14"} +{"timestamp": "2026-10-18T15:57:25.412+09:00", "message": "[업로드] 13/15 · 문서 15"} +{"timestamp": "2026-10-18T15:57:25.436+09:00", "message": "[업로드] 14/15 · 문서 16"} +{"timestamp": "2026-10-18T15:57:25.457+09:00", "message": "[업로드] 15/15 · 문서 17"} +{"timestamp": "2026-10-18T15:57:25.840+09:00", "message": "[인덱싱] INDEXED 15/15 · 처리 중 0 · 대기 0 · 실패 0 (0.4초)"} +{"timestamp": "2026-10-18T15:57:26.187+09:00", "message": "[검색] 통과: 결과 3건, 기대 문서 포함 여부 확인"} +{"timestamp": "2026-10-18T15:57:26.187+09:00", "message": "[RAG] 미검증: search 범위에서는 생성 답변 성공을 주장하지 않습니다."} +{"timestamp": "2026-10-18T15:57:26.187+09:00", "message": "[질문 1] 검색 PASS · 생성 답변 NOT_RUN"} +{"timestamp": "2026-10-18T15:57:26.406+09:00", "message": "[검색] 통과: 결과 3건, 기대 문서 포함 여부 확인"} +{"timestamp": "2026-10-18T15:57:26.406+09:00", "message": "[RAG] 미검증: search 범위에서는 생성 답변 성공을 주장하지 않습니다."} +{"timestamp": "2026-10-18T15:57:26.438+09:00", "message": "[질문 2] 검색 PASS · 생성 답변 NOT_RUN"} +{"timestamp": "2026-10-18T15:57:26.605+09:00", "message": "[검색] 통과: 결과 3건, 기대 문서 포함 여부 확인"} +{"timestamp": "2026-10-18T15:57:26.605+09:00", "message": "[RAG] 미검증: search 범위에서는 생성 답변 성공을 주장하지 않습니다."} +{"timestamp": "2026-10-18T15:57:26.605+09:00", "message": "[질문 3] 검색 PASS · 생성 답변 NOT_RUN"} +{"timestamp": "2026-10-18T15:57:26.629+09:00", "message": "[원본] 문서 3: PASS"} +{"timestamp": "2026-10-18T15:57:26.667+09:00", "message": "[원본] 문서 4: PASS"} +{"timestamp": "2026-10-18T15:57:26.693+09:00", "message": "[원본] 문서 5: PASS"} +{"timestamp": "2026-10-18T15:57:26.712+09:00", "message": "[원본] 문서 6: PASS"} +{"timestamp": "2026-10-18T15:57:26.729+09:00", "message": "[원본] 문서 7: PASS"} +{"timestamp": "2026-10-18T15:57:26.747+09:00", "message": "[원본] 문서 8: PASS"} +{"timestamp": "2026-10-18T15:57:26.767+09:00", "message": "[원본] 문서 9: PASS"} +{"timestamp": "2026-10-18T15:57:26.786+09:00", "message": "[원본] 문서 10: PASS"} +{"timestamp": "2026-10-18T15:57:26.806+09:00", "message": "[원본] 문서 11: PASS"} +{"timestamp": "2026-10-18T15:57:26.823+09:00", "message": "[원본] 문서 12: PASS"} +{"timestamp": "2026-10-18T15:57:26.841+09:00", "message": "[원본] 문서 13: PASS"} +{"timestamp": "2026-10-18T15:57:26.864+09:00", "message": "[원본] 문서 14: PASS"} +{"timestamp": "2026-10-18T15:57:26.890+09:00", "message": "[원본] 문서 15: PASS"} +{"timestamp": "2026-10-18T15:57:26.911+09:00", "message": "[원본] 문서 16: PASS"} +{"timestamp": "2026-10-18T15:57:26.931+09:00", "message": "[원본] 문서 17: PASS"} +{"timestamp": "2026-10-18T15:57:26.931+09:00", "message": "[업로드] PASS · 15/15"} +{"timestamp": "2026-10-18T15:57:26.931+09:00", "message": "[인덱싱] PASS · 15/15"} +{"timestamp": "2026-10-18T15:57:26.931+09:00", "message": "[검색] PASS · 3/3"} +{"timestamp": "2026-10-18T15:57:26.931+09:00", "message": "[원본 해시] PASS · 15/15"} +{"timestamp": "2026-10-18T15:57:26.931+09:00", "message": "[생성 답변·인용] NOT_RUN · 0/0"} +{"timestamp": "2026-10-18T15:57:26.931+09:00", "message": "[문서 ID 재사용] PASS · 15/15"} +{"timestamp": "2026-10-18T15:57:26.931+09:00", "message": "[최종] 종료 코드 0"} diff --git a/docs/test-results/demo-fresh-20261018/runs/39105569049-1/warm-result/summary.json b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/warm-result/summary.json new file mode 100644 index 00000000..3fd3f1aa --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/warm-result/summary.json @@ -0,0 +1,86 @@ +{ + "schemaVersion": 1, + "runId": "20261018T155724600405+0900", + "revision": "a62175ee3e4621c6411feb3af5f4ed3663802b6c", + "scope": "search", + "startedAt": "2026-10-18T15:57:24.601+09:00", + "stages": { + "upload": { + "status": "PASS", + "passed": 15, + "expected": 15 + }, + "indexing": { + "status": "PASS", + "passed": 15, + "expected": 15 + }, + "search": { + "status": "PASS", + "passed": 3, + "expected": 3 + }, + "download": { + "status": "PASS", + "passed": 15, + "expected": 15 + }, + "rag": { + "status": "NOT_RUN", + "passed": 0, + "expected": 0 + }, + "replay": { + "status": "PASS", + "passed": 15, + "expected": 15 + } + }, + "documents": { + "b8dae14d4ba98ceda83e672be41d20895a70ee01f4cf128a0431d137ea581304": 3, + "924112041275f193f2296a55ba5ea098e14ff98b8908eff2051e37b8c2848fb3": 4, + "82d7205d795868938f73eb871b0ca29aff632ce5948e0a5c60d7614222265379": 5, + "f0fb63cf9f42118f799082c74d8d1237434313270ff6b9ac12bb05d1d2955d9a": 6, + "6672c9b2faa6d5b1d04bd287d7a7a71746262c6fb126333f217249aacef6caeb": 7, + "3295bab5db9c7ddcd5a6d8e141b25960f167e553b03f80abaaabcc7670cf7760": 8, + "d5e11dad0ac802f01925eaac1c98efff483616ca0bb02f4be098bcbe1e2d315b": 9, + "ece687b9507957c5bc1ba7e0deff426e8803b81332e0cd507b3558974bdd78b0": 10, + "1830ee48e2942f6e80c5d72f26917ea5384e5c6ff2ca10c4b2ff2c2739e61547": 11, + "6d383df3849d304aa941d6733a0e8205c024d9fa2cfb37d21880af32f7c5c43d": 12, + "a5635fe4c4f3f60d0aa52e3cf7e493da741f6e7e8b15adef534f50030cdafa03": 13, + "fab797bb45eef73ace164770c5fc8d47c8e1c9378e87c1aa296b706759b30831": 14, + "c1bc83a520b4b05557ef8cbf48da15b82a16df02c04274c56cf4604ff9ee50b3": 15, + "d1e0658cf5d053175cab29dff6d21667c5e8527def7c6acc6c0efb814baf6285": 16, + "0bebba1fec7239ddd92b23f81b3b35910ae1d031ac02b5432cd460b1d9445244": 17 + }, + "queries": [ + { + "number": 1, + "expectedDocumentId": 3, + "search": "PASS", + "rag": "NOT_RUN", + "queryId": 8 + }, + { + "number": 2, + "expectedDocumentId": 8, + "search": "PASS", + "rag": "NOT_RUN", + "queryId": 9 + }, + { + "number": 3, + "expectedDocumentId": 13, + "search": "PASS", + "rag": "NOT_RUN", + "queryId": 10 + } + ], + "corpusSha256": "e27ae024506149089279f92b88e13262fa96d651f00e360b2815bc96d648e70d", + "targetFingerprint": "208b7156c72415ab41097dabd67a3b01f0a660d0718d0976f6237eaeb2f6b003", + "topK": 3, + "checksSha256": "103c1585e7dd2b45f03eb9ba61463bb9a8647efa8026b270c41a45c8eb677c6c", + "exitCode": 0, + "finishedAt": "2026-10-18T15:57:26.931+09:00", + "elapsedSeconds": 2.331 +} \ No newline at end of file diff --git a/docs/test-results/demo-fresh-20261018/runs/39105569049-1/warm-start.log b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/warm-start.log new file mode 100644 index 00000000..de77b126 --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/runs/39105569049-1/warm-start.log @@ -0,0 +1,11 @@ +실행 ID: 39105569049-1/warm-start +목적: 보존된 의존성·모델 캐시로 재기동 +시작: 2026-10-18T15:56:57+09:00 +장소: 독립 GitHub hosted 실행기 +기대 종료 코드: 0 +절차: ./scripts/demo.py start +2026-10-18T15:56:58+09:00 [시작] 로컬 시연 세션 0806f0385fd940dc8968a8446fafb9c2 · 범위 search +2026-10-18T15:57:23+09:00 [준비 완료] Web: <설정된 서버> · verify로 예제 시연을 검사하세요. +종료: 2026-10-18T15:57:23+09:00 +실제 종료 코드: 0 +소요 시간: 26.061초 diff --git a/docs/test-results/demo-fresh-20261018/workflow-preparation-01.json b/docs/test-results/demo-fresh-20261018/workflow-preparation-01.json new file mode 100644 index 00000000..a23cdc27 --- /dev/null +++ b/docs/test-results/demo-fresh-20261018/workflow-preparation-01.json @@ -0,0 +1,9 @@ +{ + "runId": 39103167964, + "revision": "5722aa56276a556d2fe591233aef9ebbea6de796", + "observedConclusion": "failure", + "jobCount": 0, + "serviceTestExecuted": false, + "evidenceLimitation": "GitHub reports workflow file issue; no job log exists", + "correction": "Move runner.temp from job env to step env" +} \ No newline at end of file