diff --git a/B06_Section/B06_Section_Router.py b/B06_Section/B06_Section_Router.py index 24d24e20..ae4ec6d8 100644 --- a/B06_Section/B06_Section_Router.py +++ b/B06_Section/B06_Section_Router.py @@ -73,13 +73,13 @@ from B06_Section.B06_Section_Schema import ( SectionRegenerateRequest, SectionSummaryResponse, ) +from B06_Section.B06_Section_Server_Calc_Prebuild import conversion_factors_for from common_util.common_util_auth import verify_session from common_util.common_util_storage import resolve_stored_project_path from common_util.common_util_surface_confirmation import get_surface_confirmation_params from common_util.common_util_workflow_state import get_workflow_state from config.config_db import get_db_pool, run_with_connection from config.config_system import ( - EARTHWORK_CONVERSION_FACTORS, EARTHWORK_HAUL_EQUIPMENT_LIMITS_M, FOREST_ROAD_MIN_WIDTH_M, NATURAL_SPOIL_MIN_GROUND_SLOPE, @@ -144,7 +144,9 @@ async def get_section_context(project_id: UUID) -> SectionContextResponse | JSON stored_standard_cross_section=stored_standard, rock_boundary_default_offset_m=STANDARD_ROCK_BOUNDARY_DEFAULT_OFFSET_M, rock_boundary_step_m=STANDARD_ROCK_BOUNDARY_STEP_M, - earthwork_conversion=EARTHWORK_CONVERSION_FACTORS, + # ⚠ 상수를 직접 들지 않는다 — 프로젝트가 고른 계수가 있으면 화면도 그 값으로 + # 그려야 서버가 뒤에 다시 셈한 값과 갈리지 않는다(CLAUDE.md 5장). + earthwork_conversion=await conversion_factors_for(project_id), haul_equipment_limits=[ HaulEquipmentLimit(key=key, max_distance_m=limit) for key, limit in EARTHWORK_HAUL_EQUIPMENT_LIMITS_M diff --git a/B06_Section/B06_Section_Router_HaulPlan.py b/B06_Section/B06_Section_Router_HaulPlan.py index 73454d7f..4c599456 100644 --- a/B06_Section/B06_Section_Router_HaulPlan.py +++ b/B06_Section/B06_Section_Router_HaulPlan.py @@ -25,6 +25,7 @@ from fastapi.responses import JSONResponse from B06_Section.B06_Section_Server_Calc_Prebuild import ( BUNDLE, _mass_haul_context, + conversion_factors_for, haul_inputs_for, ) from common_util.common_util_node_bundle import run_bundle_json @@ -63,6 +64,8 @@ async def compute_haul_plan( # 구조물 몫(공제·잔토)을 **넘겨야** 사토가 줄고 는다 — 인자 없이 부르면 늘 `None` 이라 # 통로만 있고 값이 안 흐른다(2026-09-09 실측으로 드러난 자리). haul_inputs = await haul_inputs_for(project_id) + # 곡선이 쓰는 계수도 프로젝트가 고른 값으로 — 토적표·운반표와 같은 값이어야 한다. + factors = await conversion_factors_for(project_id) try: output = await asyncio.to_thread( run_bundle_json, @@ -70,7 +73,7 @@ async def compute_haul_plan( _NPM_SCRIPT, { "haul_plan_for": result, - "context": _mass_haul_context(haul_inputs), + "context": _mass_haul_context(haul_inputs, factors), }, ) except Exception: diff --git a/B06_Section/B06_Section_Server_Calc_Prebuild.py b/B06_Section/B06_Section_Server_Calc_Prebuild.py index 22a80983..6c0913cd 100644 --- a/B06_Section/B06_Section_Server_Calc_Prebuild.py +++ b/B06_Section/B06_Section_Server_Calc_Prebuild.py @@ -38,6 +38,10 @@ from B06_Section.B06_Section_Repository import ( ) from B06_Section.B06_Section_Repository_Bulk import merge_cross_section_designs from common_util.common_util_node_bundle import run_bundle_json +from common_util.common_util_project_settings import ( + earthwork_conversion_factors, + quantity_settings, +) from common_util.common_util_storage import resolve_stored_project_path from config.config_db import get_db_pool, run_with_connection from config.config_system import ( @@ -79,7 +83,25 @@ async def haul_inputs_for(project_id: Any) -> dict[str, Any]: return {} -def _mass_haul_context(haul_inputs: dict[str, Any] | None = None) -> dict[str, Any]: +async def conversion_factors_for(project_id: Any) -> dict[str, dict[str, float]]: + """이 프로젝트가 쓸 토량환산계수. 못 읽으면 정본 기본값 — 화면은 그대로 선다. + + ⚠ 곡선·운반·토적표가 **같은 계수**로 서야 한다. 그래서 상수를 직접 들지 않고 이 함수를 + 거친다(고른 값은 프로젝트 설정 `conversion_factors_override` 에 산다). + """ + try: + stored_path = await run_with_connection(get_project_storage_relative_path, project_id) + root = resolve_stored_project_path(stored_path) + except Exception: + logger.warning("B06 프로젝트 경로를 못 찾음 — 기본 계수로 진행: project_id=%s", project_id) + return {kind: dict(entry) for kind, entry in EARTHWORK_CONVERSION_FACTORS.items()} + return earthwork_conversion_factors(quantity_settings(root)) + + +def _mass_haul_context( + haul_inputs: dict[str, Any] | None = None, + factors: dict[str, dict[str, float]] | None = None, +) -> dict[str, Any]: """유토곡선 계산에 필요한 값 — 화면이 `sections/context`로 받는 것과 같은 상수다. ⚠ 채집석 공제(`collected_stone_deduction_m3`)만 상수가 아니라 **B08 이 내는 값**이다. @@ -93,7 +115,8 @@ def _mass_haul_context(haul_inputs: dict[str, Any] | None = None) -> dict[str, A """ inputs = haul_inputs or {} return { - "earthwork_conversion": EARTHWORK_CONVERSION_FACTORS, + # 프로젝트가 고른 계수가 있으면 그것, 없으면 정본 기본값. + "earthwork_conversion": factors or EARTHWORK_CONVERSION_FACTORS, "natural_spoil_min_ground_slope": NATURAL_SPOIL_MIN_GROUND_SLOPE, "haul_equipment_limits": [ {"key": key, "max_distance_m": limit} @@ -196,7 +219,9 @@ async def _recompute(project_id: UUID | str, route_id: int) -> int: _NPM_SCRIPT, { "detail": detail, - "context": _mass_haul_context(haul_inputs), + "context": _mass_haul_context( + haul_inputs, earthwork_conversion_factors(quantity_settings(project_root)) + ), }, ) marks.append(("Node 번들(면적·유토곡선)", time.perf_counter())) diff --git a/B06_Section/B06_Section_UI_Page.ts b/B06_Section/B06_Section_UI_Page.ts index 5bc343a5..78a37c90 100644 --- a/B06_Section/B06_Section_UI_Page.ts +++ b/B06_Section/B06_Section_UI_Page.ts @@ -35,7 +35,17 @@ import { type SectionPersistContext, } from "./B06_Section_UI_Page_Persist"; import { maxToeFitHalfWidth } from "./B06_Section_UI_Cross_Fit"; -import { readAlignmentDraft } from "../B05_Profile/B05_Profile_UI_Profile_Edit"; +import { + createProfileEditStore, + readAlignmentDraft, + type ProfileEditStore, +} from "../B05_Profile/B05_Profile_UI_Profile_Edit"; +import { readAlignment } from "../B05_Profile/B05_Profile_UI_Profile_Data"; +import { + adjustStation, + buildAlignment, + toAlignmentBase, +} from "../B05_Profile/B05_Profile_UI_Profile_Alignment"; import { readStructurePick, writeStructurePick, @@ -481,6 +491,41 @@ export async function renderB06ProfileCross(root: HTMLElement): Promise { ); // 좌측 목록이 넘겨 준 구조물을 종단 알약 레인으로 보낸다(표시 통일). structureMarksSink = (structures, types) => sectionView.setStructureMarks(structures, types); + /** + * 계획선 편집(▲/▼) — B05 와 **같은 세션 초안**에 쌓는다(2026-09-12 사용자: B06 에만 + * 버튼이 없었다). 누르면 그 자리에서 계획선·전 측점 횡단을 다시 풀고(`reconcileStale…`), + * 영구저장은 [저장]·[확정]에서만 한다(CLAUDE.md 5장). + */ + let gradeStore: ProfileEditStore | null = null; + let gradeRouteId: number | null = null; + const gradeEditFor = (): ReturnType< + NonNullable[0]> + > => { + const detail = sectionDetail; + if (!detail || currentRouteId === null) return null; + const stored = readAlignment(detail.longitudinal); + if (!stored) return null; // 선형 저장분이 없는 옛 노선 — 편집할 기준선이 없다. + if (!gradeStore || gradeRouteId !== currentRouteId) { + gradeRouteId = currentRouteId; + gradeStore = createProfileEditStore(currentRouteId, stored.edits, () => undefined); + } + const store = gradeStore; + const base = toAlignmentBase(stored); + const alignment = buildAlignment(base, store.edits()); + return { + alignment, + stepM: alignment.policy.edit_step_m, + onStation: (chainageM, delta) => { + store.replace(adjustStation(base, store.edits(), chainageM, delta)); + // 편집분은 세션 초안에 있으므로 재계산이 그것을 그대로 읽는다(강제로 한 번). + void reconcileStaleDesigns({ force: true }).then(() => + sectionView.setGradeEdit(gradeEditFor), + ); + }, + }; + }; + sectionView.setGradeEdit(gradeEditFor); + // 종단 그래프 우클릭 — B05 와 같은 메뉴로 넣고 뺀다(2026-09-12 사용자: B05·B06 은 한 // 페이지라 같은 자리에서 되어야 한다). 어느 길로 들어와도 좌측 「구조물 배치」와 // 같은 함수를 타므로 목록·폼·알약이 함께 선다. diff --git a/B06_Section/B06_Section_UI_Page_Persist.ts b/B06_Section/B06_Section_UI_Page_Persist.ts index 6e99d8be..b2827081 100644 --- a/B06_Section/B06_Section_UI_Page_Persist.ts +++ b/B06_Section/B06_Section_UI_Page_Persist.ts @@ -18,6 +18,11 @@ import { } from "./B06_Section_Api_Fetch"; import { invalidateSectionDetail } from "./B06_Section_Section_Store"; import { flushPendingPipes } from "../B05_Profile/B05_Profile_Api_Pipes_Draft"; +import { saveProfileAlignment } from "../B05_Profile/B05_Profile_Api_Fetch"; +import { + clearAlignmentDrafts, + readAlignmentDraft, +} from "../B05_Profile/B05_Profile_UI_Profile_Edit"; import { flushPendingStructures } from "../B05_Profile/B05_Profile_Api_Structures"; import { flushUphillOverrides } from "../B05_Profile/B05_Profile_Api_Fetch"; import { buildCrossPatches, type CrossPatchSources } from "./B06_Section_UI_Page_Patches"; @@ -418,6 +423,15 @@ export function collectSectionEdits(ctx: SectionPersistContext): { }; } +/** 계획선 편집 초안이 있으면 종단 정본에 쓰고 초안을 지운다. 없으면 아무 일도 하지 않는다. */ +async function flushAlignmentDraft(projectId: string, routeId: number | null): Promise { + if (routeId === null) return; + const draft = readAlignmentDraft(routeId); + if (!draft) return; + await saveProfileAlignment(projectId, routeId, draft); + clearAlignmentDrafts(); +} + /** 세션에 쌓인 조정창·구조물 조작을 정본으로 내보낸다 — [저장]·[확정] 공통 앞단. */ async function flushPendingEdits(ctx: SectionPersistContext, projectId: string): Promise { // ⚠ 순서는 **B05 [임시저장]과 같아야 한다**(2026-09-12 사용자: 어느 페이지에서 저장해도 @@ -439,6 +453,13 @@ async function flushPendingEdits(ctx: SectionPersistContext, projectId: string): // B05에서 만지고 넘어온 구조물 조작분도 여기서 정본에 남긴다. 실패해도 횡단 // 저장까지 막지는 않는다 — 미저장분은 세션에 남으므로 다시 시도할 수 있다 // (2026-08-29 실측: 타입이 거절되자 sections/save가 아예 나가지 않았다). + // 계획선 편집(▲/▼)은 세션 초안에만 있다 — B06 에서 고쳤든 B05 에서 고쳤든 여기서 + // 종단 정본으로 내보낸다(2026-09-12). 종전에는 B06 이 초안을 **읽기만** 해서, B06 에서 + // 저장하면 계획선 편집이 다음 진입 때 사라졌다. + await flushAlignmentDraft(projectId, ctx.routeId()).catch((error) => { + const detail = error instanceof Error ? ` ${error.message}` : ""; + showToast(`계획선 저장에 실패했습니다.${detail}`, "error"); + }); await flushPendingStructures(projectId).catch((error) => { const detail = error instanceof Error ? ` ${error.message}` : ""; showToast(`구조물 저장에 실패했습니다.${detail}`, "error"); diff --git a/B06_Section/B06_Section_UI_Section_View.ts b/B06_Section/B06_Section_UI_Section_View.ts index ba24ec2d..1466a6c3 100644 --- a/B06_Section/B06_Section_UI_Section_View.ts +++ b/B06_Section/B06_Section_UI_Section_View.ts @@ -45,7 +45,11 @@ import { import { CROSS_HEIGHT } from "./B06_Section_UI_Section_Common"; import { STRUCTURE_LANE_HEIGHT_PX } from "../B05_Profile/B05_Profile_UI_Structures_Marks"; import type { SectionStructureEdit } from "./B06_Section_UI_Section_View_Menu"; -import { attachWindowScroll, drawLongitudinalPanel } from "./B06_Section_UI_Section_View_Draw"; +import { + attachWindowScroll, + drawLongitudinalPanel, + type LongitudinalPanelInput, +} from "./B06_Section_UI_Section_View_Draw"; import { type StructureInstance, type StructureType, @@ -118,6 +122,8 @@ export interface SectionViewController { /** 종단 그래프 우클릭으로 구조물을 넣고 빼는 길 — 없으면 메뉴가 안 뜬다 * (2026-09-12 B05·B06 일원화). */ setStructureEdit: (edit: SectionStructureEdit | null) => void; + /** 계획선 편집 ▲/▼ — 그릴 때마다 불러 지금 선형·편집 함수를 받는다(null = 버튼 없음). */ + setGradeEdit: (provider: (() => LongitudinalPanelInput["grade"]) | null) => void; dispose: () => void; } @@ -151,6 +157,7 @@ export function createSectionView( let markStructures: ReadonlyArray = []; let markTypes: ReadonlyArray = []; let structureEdit: SectionStructureEdit | null = null; + let gradeEditProvider: (() => LongitudinalPanelInput["grade"]) | null = null; let renderWidth = 0; let resizeTimer = 0; let panelResizeTimer = 0; @@ -508,6 +515,7 @@ export function createSectionView( naturalSpoilSlope: currentNaturalSpoilSlope, selectStation: (stationId) => selectStation(stationId, true), setMassBadge: (values) => massBadge.set(values), + grade: gradeEditProvider?.() ?? null, }); // 상단 패널이 sticky라 선택 카드가 그 아래로 숨는다 — 패널 높이만큼 스크롤 여백을 잡아 준다. syncScrollMargin(); @@ -525,11 +533,7 @@ export function createSectionView( } } - attachWindowScroll( - chartWrap, - () => updateChartWindow, - () => drawPanel(), - ); + attachWindowScroll(chartWrap, () => updateChartWindow, drawPanel); const draw = (): void => { if (!currentDetail || !Number.isFinite(renderWidth) || renderWidth <= 0) return; @@ -663,6 +667,10 @@ export function createSectionView( structureEdit = edit; drawPanel(); }, + setGradeEdit(provider) { + gradeEditProvider = provider; + drawPanel(); + }, setStructureMarks(structures, types) { markStructures = structures; markTypes = types; diff --git a/B06_Section/B06_Section_UI_Section_View_Chart.ts b/B06_Section/B06_Section_UI_Section_View_Chart.ts index 05701438..1e9c073f 100644 --- a/B06_Section/B06_Section_UI_Section_View_Chart.ts +++ b/B06_Section/B06_Section_UI_Section_View_Chart.ts @@ -32,6 +32,8 @@ export interface LongitudinalChartInput { viewportWidth: number; /** 구조물(비정규) 측점선을 끌어 옮겼다. 안 넘기면 그 선은 못 잡는다. */ onDragStation?: (stationId: string, toChainageM: number) => void; + /** X축·측점 라벨을 바닥에서 이만큼(px) 올린다 — 계획고 편집 ▼ 버튼과 겹치지 않게. */ + bottomInsetPx?: number; } export interface LongitudinalChartResult { @@ -114,7 +116,7 @@ export function buildLongitudinalChart(input: LongitudinalChartInput): Longitudi undefined, // 구조물(비정규) 측점선 끌어 옮기기 — B05 와 같은 조작이다(2026-09-12 일원화). input.onDragStation, - 0, + input.bottomInsetPx ?? 0, 0, visibleElevationRange(detail, fromM, toM) ?? undefined, ), diff --git a/B06_Section/B06_Section_UI_Section_View_Draw.ts b/B06_Section/B06_Section_UI_Section_View_Draw.ts index 8888e8f1..d14408d8 100644 --- a/B06_Section/B06_Section_UI_Section_View_Draw.ts +++ b/B06_Section/B06_Section_UI_Section_View_Draw.ts @@ -32,6 +32,8 @@ import { moveMarkById, type SectionStructureEdit, } from "./B06_Section_UI_Section_View_Menu"; +import { createEditOverlay } from "../B05_Profile/B05_Profile_UI_Profile_Edit"; +import type { ProfileAlignment } from "../B05_Profile/B05_Profile_UI_Profile_Alignment"; /** 그래프 한 벌을 세우는 데 필요한 값 — 본체가 재고 고른 것을 그대로 넘긴다. */ export interface LongitudinalPanelInput { @@ -53,6 +55,14 @@ export interface LongitudinalPanelInput { conversion?: EarthworkConversion; naturalSpoilSlope?: number; selectStation: (stationId: string) => void; + /** 계획선 편집 — 넘기면 종단 그래프 위에 ▲/▼ 버튼층이 선다(B05 와 같은 부품). + * 안 넘기면 버튼이 없고 그래프만 보인다(옛 저장분처럼 선형이 없는 노선). */ + grade?: { + alignment: ProfileAlignment; + /** 한 번 누를 때 오르내리는 양(m) — 선형 정책값. */ + stepM: number; + onStation: (chainageM: number, delta: number) => void; + } | null; /** 좌측 상단 누가토량 배지 — 값이 없으면 null 로 지운다. */ setMassBadge: (values: ReturnType | null) => void; } @@ -91,6 +101,9 @@ export function drawLongitudinalPanel( minWidth: chartWidth, scrollLeft: input.keepScrollLeft, viewportWidth: chartWrap.clientWidth || chartWidth, + // 계획고 편집 ▼ 버튼이 바닥에 붙으므로 X축·측점 라벨을 그만큼 밀어 올린다 + // (B05 와 같은 값 15px). 버튼이 없으면 0 — 종전 여백 그대로다. + bottomInsetPx: input.grade ? 15 : 0, // 측점선을 끌면 그 구조물이 옮겨 간다 — 관은 예약 이동, 구조물은 정본 이동. onDragStation: edit ? moveMark : undefined, }); @@ -130,6 +143,20 @@ export function drawLongitudinalPanel( } chartWrap.replaceChildren(...nodes); + // 계획선 편집 버튼층 — B05 와 **같은 부품**(`createEditOverlay`)이다(2026-09-12 사용자: + // B05·B06 은 한 페이지인데 B06 에만 버튼이 없었다). 누른 값은 B05 와 같은 세션 초안에 + // 쌓이고 [저장]·[확정]에서 종단 정본으로 나간다. + if (input.grade) { + chartWrap.append( + createEditOverlay({ + alignment: input.grade.alignment, + width: chartWidth, + x: chart.toX, + step: input.grade.stepM, + onStation: input.grade.onStation, + }), + ); + } // 종단 그래프 우클릭 — B05 와 같은 메뉴다(가까운 구조물이 있으면 삭제, 없으면 구조물군 // → 종류 2단 추가). 그래프를 다시 그릴 때마다 붙인다(상태를 안 남긴다). if (edit) { diff --git a/B08_Quantity/B08_Quantity_Engine_EarthworkTable.py b/B08_Quantity/B08_Quantity_Engine_EarthworkTable.py index a8cfb315..c0294302 100644 --- a/B08_Quantity/B08_Quantity_Engine_EarthworkTable.py +++ b/B08_Quantity/B08_Quantity_Engine_EarthworkTable.py @@ -16,7 +16,8 @@ 보정량 = 체적 × 토량환산계수(다짐) 절취한 흙이 다져지면 줄거나 부푼다. 성토에 쓸 수 있는 양으로 환산한 것이 보정량이다. 계수의 유일한 정의처는 `config.config_system_design.EARTHWORK_CONVERSION_FACTORS` 이며 - 여기서 값을 다시 적지 않는다. + 여기서 값을 다시 적지 않는다. 프로젝트가 고른 값이 있으면 라우터가 + `earthwork_conversion_factors(settings)` 로 풀어 `factors` 로 넘긴다 — 기본값은 그대로다. 측구터파기 토사·암 — 설계가 가른 값을 그대로 읽는다 B06 이 지반 유형 + 암반 경계선으로 이미 갈라 냈다(`ditch_soil_area_m2`· @@ -49,9 +50,13 @@ _FALLBACK_BASIS = "cut_area_ratio_fallback" _FALLBACK_NOTE = "측구 가름값이 설계에 없어 절토 토사:암 면적비로 안분함" -def _factor(kind: str) -> float: +#: 계수 묶음의 모양 — `{지반유형: {"compacted": C}}`. +Factors = dict[str, dict[str, float]] + + +def _factor(kind: str, factors: Factors) -> float: """지반유형 → 다짐 환산계수. 모르는 유형이면 토사로 본다.""" - entry = EARTHWORK_CONVERSION_FACTORS.get(kind) or EARTHWORK_CONVERSION_FACTORS["soil"] + entry = factors.get(kind) or factors["soil"] return float(entry["compacted"]) @@ -155,8 +160,15 @@ def _split_ditch(area: StationArea) -> tuple[float, float, str]: return ditch * soil / total, ditch * rock / total, _FALLBACK_BASIS -def build_rows(stations: Iterable[StationArea]) -> list[EarthworkRow]: - """측점 목록 → 토적표 줄 목록. 측점은 이정 순으로 정렬해 받는다.""" +def build_rows( + stations: Iterable[StationArea], factors: Factors | None = None +) -> list[EarthworkRow]: + """측점 목록 → 토적표 줄 목록. 측점은 이정 순으로 정렬해 받는다. + + `factors` 는 프로젝트가 고른 토량환산계수다(`earthwork_conversion_factors`). + 안 주면 정본 기본값이 선다 — 설정을 안 읽는 자리(시험·되짚기)를 위한 것이다. + """ + factors = factors or EARTHWORK_CONVERSION_FACTORS ordered = sorted(stations, key=lambda s: s.chainage_m) rows: list[EarthworkRow] = [] previous: StationArea | None = None @@ -165,8 +177,8 @@ def build_rows(stations: Iterable[StationArea]) -> list[EarthworkRow]: for station in ordered: ditch_soil, ditch_rock, ditch_basis = _split_ditch(station) - soil_factor = _factor("soil") - rock_factor = _factor(station.cut_rock_kind or _DEFAULT_ROCK_KIND) + soil_factor = _factor("soil", factors) + rock_factor = _factor(station.cut_rock_kind or _DEFAULT_ROCK_KIND, factors) row = EarthworkRow( chainage_m=station.chainage_m, cut_soil_area_m2=station.cut_soil_area_m2, @@ -238,12 +250,17 @@ def totals(rows: list[EarthworkRow]) -> dict[str, float]: return {key: sum(getattr(row, key) for row in rows) for key in keys} -def build_table(stations: Iterable[StationArea]) -> dict[str, Any]: - """화면·API 가 그대로 쓰는 모양. 값은 자르지 않는다(PLAN 8-16).""" - rows = build_rows(stations) +def build_table(stations: Iterable[StationArea], factors: Factors | None = None) -> dict[str, Any]: + """화면·API 가 그대로 쓰는 모양. 값은 자르지 않는다(PLAN 8-16). + + `conversion_factors` 로 **실제로 쓴 계수**를 되싣는다 — 프로젝트가 고른 값이면 + 그것이 나가야 화면이 「무엇으로 셌나」를 그대로 보인다. + """ + factors = factors or EARTHWORK_CONVERSION_FACTORS + rows = build_rows(stations, factors) return { "method": "average_end_area", - "conversion_factors": EARTHWORK_CONVERSION_FACTORS, + "conversion_factors": factors, "rows": [row.__dict__ if not hasattr(row, "__slots__") else _as_dict(row) for row in rows], "totals": totals(rows), "station_count": len(rows), diff --git a/B08_Quantity/B08_Quantity_Engine_HaulSummary.py b/B08_Quantity/B08_Quantity_Engine_HaulSummary.py index b87a3c06..3f335150 100644 --- a/B08_Quantity/B08_Quantity_Engine_HaulSummary.py +++ b/B08_Quantity/B08_Quantity_Engine_HaulSummary.py @@ -43,14 +43,24 @@ GROUND_LABELS = {"ea_m3": "토사", "rr_m3": "리핑암", "br_m3": "발파암"} GROUND_KIND_OF = {"토사": "soil", "리핑암": "ripping_rock", "발파암": "blasting_rock"} -def _factor_of(ground: str) -> float | None: - """그 갈래의 다짐 환산계수 `C`. 모르면 `None`(받는 쪽이 환산했는지 되짚는 데 쓴다).""" +#: 계수 묶음의 모양 — `{지반유형: {"compacted": C}}`. 안 주면 정본 기본값이 선다. +Factors = dict[str, dict[str, float]] + + +def _factor_of(ground: str, factors: Factors | None = None) -> float | None: + """그 갈래의 다짐 환산계수 `C`. 모르면 `None`(받는 쪽이 환산했는지 되짚는 데 쓴다). + + `factors` 는 프로젝트가 고른 계수다(`earthwork_conversion_factors`) — 안 주면 정본. + """ kind = GROUND_KIND_OF.get(ground) - entry = EARTHWORK_CONVERSION_FACTORS.get(kind) if kind else None + table = factors or EARTHWORK_CONVERSION_FACTORS + entry = table.get(kind) if kind else None return float(entry["compacted"]) if entry else None -def natural_m3(compacted_volume_m3: float, ground: str) -> float | None: +def natural_m3( + compacted_volume_m3: float, ground: str, factors: Factors | None = None +) -> float | None: """**다짐상태 → 자연상태**(÷ C). 내역서에 오르는 수량은 자연상태다. 근거 — `config_system_design` 5-4-3 에 이미 적혀 있던 문장이다. @@ -69,7 +79,8 @@ def natural_m3(compacted_volume_m3: float, ground: str) -> float | None: ⚠ 갈래를 모르면 `None` 이다 — 토사 계수로 눅이면 근거 없이 금액이 움직인다. """ kind = GROUND_KIND_OF.get(ground) - entry = EARTHWORK_CONVERSION_FACTORS.get(kind) if kind else None + table = factors or EARTHWORK_CONVERSION_FACTORS + entry = table.get(kind) if kind else None if not entry: return None factor = float(entry["compacted"]) @@ -189,8 +200,11 @@ def summarize(legs: Iterable[HaulLeg]) -> list[HaulSummaryRow]: ) -def build_table(plan: dict[str, Any] | None) -> dict[str, Any]: - """화면·API 가 그대로 쓰는 모양. 내역 줄과 근거 줄을 함께 낸다.""" +def build_table(plan: dict[str, Any] | None, factors: Factors | None = None) -> dict[str, Any]: + """화면·API 가 그대로 쓰는 모양. 내역 줄과 근거 줄을 함께 낸다. + + `factors` 는 프로젝트가 고른 토량환산계수다 — 다짐 → 자연 되돌리기가 이 값에 걸린다. + """ legs = _legs_of(plan or {}) rows = summarize(legs) return { @@ -203,9 +217,9 @@ def build_table(plan: dict[str, Any] | None) -> dict[str, Any]: "volume_m3": row.volume_m3, "volume_basis": "compacted", # 내역서에 오르는 수량 = **자연상태**(÷C). 갈래를 모르면 `None`. - "natural_m3": natural_m3(row.volume_m3, row.ground), + "natural_m3": natural_m3(row.volume_m3, row.ground, factors), "natural_volume_basis": "natural", - "conversion_c": _factor_of(row.ground), + "conversion_c": _factor_of(row.ground, factors), "average_distance_m": row.average_distance_m, "work_m3m": row.work_m3m, "legs": row.legs, diff --git a/B08_Quantity/B08_Quantity_Provenance.py b/B08_Quantity/B08_Quantity_Provenance.py new file mode 100644 index 00000000..401d3d84 --- /dev/null +++ b/B08_Quantity/B08_Quantity_Provenance.py @@ -0,0 +1,473 @@ +"""B08 수량 화면의 **근거 사전** — 어느 숫자가 어디서 와서 어떻게 나왔나 (PLAN 8-36 ④). + +⚠⚠ **개발 전용.** 사전은 `provenance_payload()` 를 거쳐 나가고, 개발환경이 아니면 `None` + 이라 응답에 칸 자체가 안 생긴다. 화면에서 숨기는 것이 아니라 **안 보내는 것**이다. + +왜 이 파일인가 + 「식」과 「원천」의 정답은 값을 낳는 엔진이 안다. 화면 TS 에 손으로 적어 두면 엔진을 + 고칠 때 설명만 옛것으로 남는다. 엔진 옆(같은 폴더)에 두어 같이 눈에 들어오게 한다. + +⚠ **열 단위로 적는다.** 토적표 한 장이 30열 × 200줄 = 6천 칸이라 칸마다 지으면 응답이 + 붐는다. 줄마다 갈리는 것(측구 안분 폴백 사유 등)은 줄이 이미 `notes` 로 들고 있고, + 화면이 그것을 카드에 덧붙인다. + +⚠ **토적표에는 `final`(최종) 열이 없다 — 억지로 붙이지 않았다.** + 이 표는 중간 장부다. 내역서로 나가는 값은 **토공집계표**에서 선다. 여섯 등급을 + 한 장에 다 채우려고 아무 열에나 `final` 을 붙이면 「분류가 있다」는 거짓만 남는다. + 이 어긋남은 등급을 고칠 근거이므로 PLAN 8-36 ① 에 그대로 남긴다. +""" + +from __future__ import annotations + +from typing import Any + +from common_util.common_util_provenance import ( + TIER_CALC, + TIER_FINAL, + TIER_INPUT, + TIER_STANDARD, + TIER_SURVEY, + ColumnProvenance, + provenance_payload, + sheet_provenance, +) + +#: 토량환산계수가 어디서 오는지 — 여러 열이 같은 문장을 쓰므로 한 벌로 둔다. +_FACTOR_SOURCE = ( + "토량환산계수(다짐) — 기본값 `config_system_design.EARTHWORK_CONVERSION_FACTORS`, " + "프로젝트가 고른 값이 있으면 산출 조건 패널의 값" +) + +#: 단면적 넷의 공통 원천. B06 이 낸 설계 단면을 **그대로** 읽는다(여기서 다시 안 짓는다). +_SECTION_SOURCE = "B06 횡단 설계가 낸 측점별 단면적" + +#: 평균단면적법 한 줄. 신규 문서 5장 「다. 공사수량의 산출」. +_MEAN_AREA = "(앞 측점 단면적 + 이 측점 단면적) ÷ 2 × 두 측점 사이 거리" + + +def _area(key: str, label: str, extra: str = "") -> ColumnProvenance: + """단면적 열 — B06 설계값을 그대로 옮긴 자리라 식이 없다.""" + return ColumnProvenance( + key=key, + label=label, + tier=TIER_SURVEY, + formula="설계가 낸 값을 그대로 읽음 (여기서 다시 계산하지 않음)", + source=_SECTION_SOURCE + (f" · {extra}" if extra else ""), + code="B08_Quantity_Engine_EarthworkTable.py:StationArea.from_design", + ) + + +def _volume(key: str, label: str, area_label: str) -> ColumnProvenance: + return ColumnProvenance( + key=key, + label=label, + tier=TIER_CALC, + formula=_MEAN_AREA.replace("단면적", area_label), + source="첫 측점은 앞이 없어 비어 있음 (실무 토적표도 첫 줄 체적이 빈칸)", + code="B08_Quantity_Engine_EarthworkTable.py:200 mean_volume", + ) + + +def _adjusted(key: str, label: str, volume_label: str) -> ColumnProvenance: + return ColumnProvenance( + key=key, + label=label, + tier=TIER_CALC, + formula=f"{volume_label} × 토량환산계수(다짐)", + source=_FACTOR_SOURCE, + code="B08_Quantity_Engine_EarthworkTable.py:210", + ) + + +def earthwork_sheet() -> dict[str, Any]: + """토적표 한 장의 사전. 열 키는 화면 `EarthworkRow` 와 같은 낱말이라야 한다.""" + return sheet_provenance( + [ + ColumnProvenance( + key="chainage_m", + label="측점", + tier=TIER_SURVEY, + formula="노선 시점에서 잰 이정(m). 화면은 NO.n+m 으로 적음", + source="B05 종단이 놓은 측점 배치", + code="B08_Quantity_Engine_EarthworkTable.py:StationArea.chainage_m", + ), + ColumnProvenance( + key="distance_m", + label="거리", + tier=TIER_CALC, + formula="이 측점 이정 − 앞 측점 이정", + source="B05 종단 측점 배치. 첫 줄은 앞이 없어 0", + code="B08_Quantity_Engine_EarthworkTable.py:195", + ), + _area("cut_soil_area_m2", "절토 토사 단면적"), + _volume("cut_soil_volume_m3", "절토 토사 입적", "절토 토사 단면적"), + _adjusted("cut_soil_adjusted_m3", "절토 토사 보정량", "절토 토사 입적"), + _area("cut_rock_area_m2", "절토 암석 단면적", "암 갈래는 측점의 `cut_rock_kind`"), + _volume("cut_rock_volume_m3", "절토 암석 입적", "절토 암석 단면적"), + _adjusted("cut_rock_adjusted_m3", "절토 암석 보정량", "절토 암석 입적"), + _area( + "ditch_soil_area_m2", + "측구터파기 토사 단면적", + "지반 유형·암반 경계선으로 B06 이 가른 값. 가름이 없는 옛 저장분만 " + "절토 토사:암 면적비로 안분하고 그 줄에 사유가 남음", + ), + _volume("ditch_soil_volume_m3", "측구터파기 토사 입적", "측구 토사 단면적"), + _adjusted("ditch_soil_adjusted_m3", "측구터파기 토사 보정량", "측구 토사 입적"), + _area( + "ditch_rock_area_m2", + "측구터파기 암석 단면적", + "위와 같은 가름값. 0.0 은 설계가 낸 「없음」이고 값 없음과 다름", + ), + _volume("ditch_rock_volume_m3", "측구터파기 암석 입적", "측구 암석 단면적"), + _adjusted("ditch_rock_adjusted_m3", "측구터파기 암석 보정량", "측구 암석 입적"), + ColumnProvenance( + key="adjusted_total_m3", + label="보정량계", + tier=TIER_CALC, + formula="절토 토사 보정량 + 절토 암석 보정량 + 측구 토사 보정량 + 측구 암석 보정량", + source="네 보정량의 합. 성토에 쓸 수 있는 양으로 환산한 뒤의 값", + code="B08_Quantity_Engine_EarthworkTable.py:215", + ), + _area("fill_area_m2", "성토 단면적"), + _volume("fill_volume_m3", "성토 입적", "성토 단면적"), + ColumnProvenance( + key="diverted_m3", + label="유용토", + tier=TIER_CALC, + formula="min(보정량계, 성토 입적)", + source="그 측점에서 절취분과 성토분이 서로 만나는 몫", + code="B08_Quantity_Engine_EarthworkTable.py:222", + ), + ColumnProvenance( + key="balance_m3", + label="차인토량", + tier=TIER_CALC, + formula="보정량계 − 성토 입적", + source="양수면 남는 흙(사토), 음수면 모자란 흙(객토)", + code="B08_Quantity_Engine_EarthworkTable.py:223", + ), + ColumnProvenance( + key="cumulative_m3", + label="누가토량", + tier=TIER_CALC, + formula="첫 줄부터 이 줄까지 차인토량을 더해 온 값", + source="유토곡선(mass haul)의 세로축이 되는 값", + code="B08_Quantity_Engine_EarthworkTable.py:225", + ), + ] + ) + + +def summary_sheet() -> dict[str, Any]: + """토공집계표 — 토적표·사면표를 공종별 총량으로 모은 장. + + ⚠ **B08 에서 `final`(최종)이 처음 서는 자리다.** 토적표는 중간 장부였고, 내역서로 + 나가는 값은 여기 「계」다. 다만 무대(소운반 20m)처럼 **집계에는 오르되 내역 줄이 + 되지 않는** 줄이 있어, 그 줄의 「계」는 칸 등급 `excluded` 로 덮어쓴다(화면 배선). + """ + return sheet_provenance( + [ + ColumnProvenance( + key="group", + label="구분", + tier=TIER_STANDARD, + formula="품셈 공종 갈래 이름을 그대로 씀 (흙깎기·성토·측구터파기…)", + source="거창 실무 토공집계표 시트의 열 문구를 그대로 옮김", + code="B08_Quantity_Engine_EarthworkSummary.py:SummaryRow", + ), + ColumnProvenance( + key="item", + label="공종", + tier=TIER_STANDARD, + formula="지반 갈래 이름 (토사·연암·발파암…)", + source="갈래 수는 프로젝트 설정의 암 갈래 세트가 정함 — 코드에 안 박음", + rule="암 총량을 설계자가 넣은 갈래 비율(%)로 나눠 줄을 만듦", + code="B08_Quantity_Engine_EarthworkSummary.py:_rock_split", + ), + ColumnProvenance( + key="spec", + label="규격", + tier=TIER_STANDARD, + formula="시공 방법 표기 (기계(굴삭기)·백호우…)", + source="품셈 공종이 요구하는 규격. 암은 시공법(긁어내기/터뜨리기)이 갈림", + code="B08_Quantity_Engine_EarthworkSummary.py:SummaryRow", + ), + ColumnProvenance( + key="unit", + label="단위", + tier=TIER_STANDARD, + formula="품셈 공종이 정한 단위 (㎥·㎡·주…)", + source="단위가 다르면 내역 단가와 안 맞음 — 여기서 정하지 않고 품셈을 따름", + code="B08_Quantity_Engine_EarthworkSummary.py:SummaryRow", + ), + ColumnProvenance( + key="amount", + label="계", + tier=TIER_FINAL, + formula="토적표·사면표 총량 × 반영률(%)", + source=( + "토공은 토적표 합계, 사면은 사면표 합계. ⚠ 반영률은 법정값이 아니라 " + "설계자가 넣는 값이고 기본 100 %" + ), + rule="무대(소운반 20m)는 집계에는 오르되 내역 줄이 아님 — 그 줄은 「제외」로 섬", + code="B08_Quantity_Engine_EarthworkSummary.py:build_table", + ), + ] + ) + + +def haul_sheet() -> dict[str, Any]: + """운반거리 — (운반수단 × 지반유형)별 가중평균 줄. + + ⚠⚠ **상태가 둘이다.** 거리는 다짐상태로 재고, 내역에 오르는 수량만 자연상태(÷C)로 낸다 + (설계실무 요령 5-4-3). 이 표의 「토량」은 **다짐상태**이므로 내역서 수량과 숫자가 다르다 — + 그 어긋남이 정상이라는 것을 카드가 말해 주어야 헛걸음을 안 한다. + """ + return sheet_provenance( + [ + ColumnProvenance( + key="equipment", + label="운반수단", + tier=TIER_CALC, + formula="유토곡선이 띠마다 고른 수단 (무대·도자운반·덤프운반)", + source="B06 운반계획(HaulPlan)의 띠. 여기서 다시 고르지 않음", + code="B08_Quantity_Engine_HaulSummary.py:_legs_of", + ), + ColumnProvenance( + key="ground", + label="지반유형", + tier=TIER_CALC, + formula="띠의 토량을 절토 구간 구성비로 안분한 세 갈래 (토사·리핑암·발파암)", + source="B06 운반계획이 이미 안분해 둔 값", + code="B08_Quantity_Engine_HaulSummary.py:_legs_of", + ), + ColumnProvenance( + key="volume_m3", + label="토량", + tier=TIER_CALC, + formula="그 갈래에 속한 근거 구간들의 토량 합", + source=( + "⚠ **다짐상태**임. 내역서에 오르는 수량은 자연상태(÷토량환산계수)라 " + "숫자가 다름 — 어긋난 것이 아님" + ), + code="B08_Quantity_Engine_HaulSummary.py:summarize", + ), + ColumnProvenance( + key="average_distance_m", + label="평균운반거리", + tier=TIER_CALC, + formula="Σ(토량 × 거리) ÷ Σ(토량) — 단순평균이 아님", + source="실무 산출서가 「토량 × 거리」를 쌓아 나누는 그 식", + code="B08_Quantity_Engine_HaulSummary.py:119 average_distance_m", + ), + ColumnProvenance( + key="legs", + label="근거 구간", + tier=TIER_CALC, + formula="이 평균을 만든 구간의 개수", + source="구간 줄은 버리지 않고 표 아래 근거로 함께 냄 — 되짚을 수 있어야 함", + code="B08_Quantity_Engine_HaulSummary.py:190", + ), + ] + ) + + +def preparation_sheet() -> dict[str, Any]: + """준비공·사방공 — **못 서는 줄도 서는 장.** + + 빈 표를 내면 「빠뜨린 것」과 「원래 없는 것」이 구별되지 않는다. 그래서 값이 없는 줄도 + 상태와 사유를 달아 그대로 세운다. 값이 비어 있는 줄의 「수량」은 칸 등급 `blocked` 로 + 덮어쓴다 — **근거가 오면 채워질 자리**이지 일부러 비운 자리가 아니다. + """ + return sheet_provenance( + [ + ColumnProvenance( + key="group", + label="구분", + tier=TIER_STANDARD, + formula="준비공·사방공의 갈래 이름", + source="품셈 9장(준비공)과 배치된 구조물 종류가 줄을 만듦", + code="B08_Quantity_Engine_Preparation.py:build_table", + ), + ColumnProvenance( + key="item", + label="공종", + tier=TIER_STANDARD, + formula="품셈 공종 이름 (표토제거·제근·임목파쇄…)", + source="공종이 없으면 줄도 없음 — 화면에서 이름을 짓지 않음", + code="B08_Quantity_Engine_Preparation.py:build_table", + ), + ColumnProvenance( + key="unit", + label="단위", + tier=TIER_STANDARD, + formula="품셈 공종이 정한 단위", + source="단위가 다르면 내역 단가와 안 맞음", + code="B08_Quantity_Engine_Preparation.py:build_table", + ), + ColumnProvenance( + key="amount", + label="수량", + tier=TIER_CALC, + formula="공종마다 다름 — 표토제거는 면적 × 표토 두께(T), 제근은 임목축적 등급", + source=( + "밑수는 사면표·구조물 목록이 내고, 두께·등급·개소는 산출 조건 패널에서 " + "설계자가 넣음" + ), + rule="넣어야 할 값이 비면 줄은 서되 수량이 「-」로 남고 사유가 붙음", + code="B08_Quantity_Engine_Preparation.py:build_table", + ), + ColumnProvenance( + key="status", + label="상태", + tier=TIER_CALC, + formula="값을 세웠나 못 세웠나", + source="못 세운 줄은 옆 칸에 사유가 붙음 — 사유가 곧 무엇을 넣어야 하는지임", + code="B08_Quantity_Engine_Preparation_Status.py", + ), + ] + ) + + +def material_sheet() -> dict[str, Any]: + """자재총괄 — 구조물 원단위에서 자재별로 모은 장. 관급/사급을 줄마다 고른다.""" + return sheet_provenance( + [ + ColumnProvenance( + key="name", + label="자재", + tier=TIER_STANDARD, + formula="품셈·카탈로그의 자재 이름", + source="구조물 원단위의 성분 이름을 그대로 모음 — 여기서 이름을 짓지 않음", + code="B08_Quantity_Engine_MaterialSummary.py", + ), + ColumnProvenance( + key="unit", + label="단위", + tier=TIER_STANDARD, + formula="자재가 팔리는 단위 (㎥·본·kg…)", + source="단가가 붙는 단위와 같아야 함", + code="B08_Quantity_Engine_MaterialSummary.py", + ), + ColumnProvenance( + key="net_amount", + label="순수량", + tier=TIER_CALC, + formula="구조물마다 낸 성분 수량의 합 (할증 전)", + source="구조물 원단위 표의 「수량」을 자재 이름으로 모은 값", + code="B08_Quantity_Engine_MaterialSummary.py", + ), + ColumnProvenance( + key="surcharge_pct", + label="할증률", + tier=TIER_STANDARD, + formula="자재마다 정해진 할증률(%)", + source="할증 판(dataset)이 정함. 판에 없는 자재는 「-」로 두고 지어내지 않음", + code="B08_Quantity_Engine_MaterialSummary.py", + ), + ColumnProvenance( + key="total_amount", + label="총수량", + tier=TIER_FINAL, + formula="순수량 × (1 + 할증률)", + source="내역서·자재대로 나가는 값. 할증률이 없으면 순수량 그대로", + code="B08_Quantity_Engine_MaterialSummary.py", + ), + ColumnProvenance( + key="supply", + label="관급/사급", + tier=TIER_INPUT, + formula="설계자가 줄마다 고름", + source="자재마다 갈리는 발주 결정이라 표 안에서 고름 (2026-09-07 확정)", + code="B08_Quantity_UI_MaterialGrid.ts", + ), + ColumnProvenance( + key="install_by", + label="설치 주체", + tier=TIER_INPUT, + formula="설계자가 줄마다 고름", + source="⚠ **관급 줄에만 뜻이 있음** — 사급으로 되돌리면 값이 비워짐", + code="B08_Quantity_UI_MaterialGrid.ts", + ), + ] + ) + + +def unit_quantity_sheet() -> dict[str, Any]: + """구조물 원단위 — 치수에서 성분까지. 성분마다 갈 곳을 적는다. + + ⚠ 이 장은 **근거·출처 열을 이미 화면에 들고 있다**(2026-09-09 부터). 사전은 그 열이 + 무엇을 뜻하는지 설명하는 자리이지, 있는 값을 다시 만드는 자리가 아니다. + """ + return sheet_provenance( + [ + ColumnProvenance( + key="structure", + label="구조물", + tier=TIER_SURVEY, + formula="B05 노선에 놓인 구조물의 이름과 놓인 측점", + source="측점 표기(NO.4 ~ NO.4+10)는 화면이 만듦 — 서버는 이정만 냄", + code="B08_Quantity_Engine_Handoff_Rows_Prep.py:182", + ), + ColumnProvenance( + key="spec", + label="규격", + tier=TIER_SURVEY, + formula="구조물 제원 (길이 × 높이)", + source="B05·B06 이 배치할 때 정한 치수. 여기서 다시 정하지 않음", + code="B08_Quantity_Engine_UnitQuantity.py", + ), + ColumnProvenance( + key="component", + label="성분", + tier=TIER_STANDARD, + formula="그 구조물이 쓰는 재료·공종 이름", + source="품셈 표 또는 실무 관측 원단위표가 정함", + code="B08_Quantity_Engine_UnitQuantity.py", + ), + ColumnProvenance( + key="unit", + label="단위", + tier=TIER_STANDARD, + formula="성분이 세어지는 단위", + source="단가가 붙는 단위와 같아야 함", + code="B08_Quantity_Engine_UnitQuantity.py", + ), + ColumnProvenance( + key="amount", + label="수량", + tier=TIER_CALC, + formula="치수 전개(길이·높이로 편 식) 또는 실무 관측 원단위 × 개소", + source="어느 쪽인지는 같은 줄의 「출처」 칸이 말해 줌 (치수 전개 / 실무 관측)", + rule="치수 전개는 식이 있고, 실무 관측은 관측값이라 식이 없음 — 둘을 섞지 않음", + code="B08_Quantity_Engine_UnitQuantity.py", + ), + ColumnProvenance( + key="destination", + label="갈 곳", + tier=TIER_STANDARD, + formula="이 성분이 어느 표로 가는가 (자재총괄·공종 내역·양쪽)", + source=( + "⚠ 갈 곳이 겹치면 이중계상임 — 그것을 막으려고 성분마다 갈 곳을 적음 (PLAN 8-7)" + ), + code="B08_Quantity_Engine_Handoff_Mapping.py", + ), + ] + ) + + +def quantity_provenance() -> dict[str, Any] | None: + """B08 응답에 실을 사전 — **개발환경이 아니면 `None`.** + + 시트를 늘릴 때는 여기 한 줄만 더한다. 화면은 시트 이름으로 찾아 쓴다. + """ + return provenance_payload( + { + "earthwork": earthwork_sheet(), + "summary": summary_sheet(), + "haul": haul_sheet(), + "preparation": preparation_sheet(), + "material": material_sheet(), + "unit_quantity": unit_quantity_sheet(), + } + ) diff --git a/B08_Quantity/B08_Quantity_Router_Earthwork.py b/B08_Quantity/B08_Quantity_Router_Earthwork.py index d475296a..ad881d51 100644 --- a/B08_Quantity/B08_Quantity_Router_Earthwork.py +++ b/B08_Quantity/B08_Quantity_Router_Earthwork.py @@ -40,18 +40,24 @@ from B08_Quantity.B08_Quantity_Engine_Preparation import build_table as build_pr from B08_Quantity.B08_Quantity_Engine_HaulSummary import summary_input_rows from B08_Quantity.B08_Quantity_Engine_SlopeArea import build_table as build_slope_table from B08_Quantity.B08_Quantity_Engine_SlopeLength import station_slopes +from B08_Quantity.B08_Quantity_Provenance import quantity_provenance from common_util.common_util_project_settings import ( CONCRETE_PLACING_METHODS, ROCK_METHODS, application_ratio, concrete_placing_method, + earthwork_conversion_choices, + earthwork_conversion_factors, quantity_settings, rock_classes, save_section, ) from common_util.common_util_storage import resolve_stored_project_path from config.config_db import run_with_connection -from config.config_system_design import EARTHWORK_CONVERSION_FACTORS +from config.config_system_design import ( + EARTHWORK_CONVERSION_FACTORS, + EARTHWORK_CONVERSION_PUMSEM_C_RANGES, +) logger = logging.getLogger(__name__) router = APIRouter(prefix="/api/projects", tags=["B08 Quantity"]) @@ -78,14 +84,24 @@ async def get_earthwork_table(project_id: UUID, route_id: int) -> JSONResponse: status_code=500, content={"status": "error", "message": "토적표를 만들지 못했습니다."}, ) - table = build_table(_stations(designs)) + # ⚠ 설정을 **먼저** 읽는다 — 토량환산계수를 프로젝트가 골랐으면 표가 그 값으로 서야 한다. + settings, project_root = await _project_settings(project_id) + factors = earthwork_conversion_factors(settings) + table = build_table(_stations(designs), factors) + # 화면이 「무엇을 골랐나 · 품셈 범위 안인가」를 보이는 데 쓴다. 계산에는 안 들어간다. + table["conversion_factor_choices"] = earthwork_conversion_choices(settings) + # 품셈 암종별 범위 — **화면 안내용**이다. 정의처가 서버 한 곳이라 내려보내 쓴다 + # (프론트에 다시 적으면 두 벌이 되어 갈린다). + table["conversion_factor_pumsem_ranges"] = [ + {"name": name, "min": low, "max": high} + for name, low, high in EARTHWORK_CONVERSION_PUMSEM_C_RANGES + ] # 사면 계열은 저장된 설계선에서 유도한다. slope = build_slope_table(station_slopes(designs)) table["slope"] = slope - settings, project_root = await _project_settings(project_id) plan = await _stored_haul_plan(project_id, route_id) - haul = build_haul_table(plan) + haul = build_haul_table(plan, factors) # 사토 — **운반 줄이 되는 값**인데 유토곡선의 띠·이동에는 안 들어 있다(잔량으로 남는다). # 여기서 그 값을 운반표에 실어 인계가 「사토 운반」 한 줄을 세우게 한다. # ⚠ 거리는 품셈이 정하지 않는다 — 설계 입력(`spoil_site_distance_m`)이고 없으면 막힌다. @@ -161,15 +177,22 @@ async def get_earthwork_table(project_id: UUID, route_id: int) -> JSONResponse: table["settings"] = settings table["project_root_known"] = project_root is not None table["route_id"] = route_id + # 근거 사전(PLAN 8-36 ④) — ⚠ **개발환경에서만** 실린다. 운영에서는 `None` 이라 + # 칸 자체가 안 생긴다 — 화면에서 숨기는 것이 아니라 안 보내는 것이 요점이다. + provenance = quantity_provenance() + if provenance is not None: + table["provenance"] = provenance return JSONResponse(content=table) -#: 갈래 칸 ↔ 다짐 환산계수 `C`. 정의처는 `config_system_design` 한 곳뿐이다. -_COMPACTED_FACTOR = { - "ea_m3": float(EARTHWORK_CONVERSION_FACTORS["soil"]["compacted"]), - "rr_m3": float(EARTHWORK_CONVERSION_FACTORS["ripping_rock"]["compacted"]), - "br_m3": float(EARTHWORK_CONVERSION_FACTORS["blasting_rock"]["compacted"]), -} +#: 갈래 칸 ↔ 지반유형 이름. 계수의 정의처는 `config_system_design` 한 곳뿐이다. +_GROUND_KIND_OF = {"ea_m3": "soil", "rr_m3": "ripping_rock", "br_m3": "blasting_rock"} + + +def _compacted_factor(settings: dict[str, Any]) -> dict[str, float]: + """갈래 칸 ↔ 다짐 환산계수 `C` — 프로젝트가 고른 값이 있으면 그것이 선다.""" + factors = earthwork_conversion_factors(settings) + return {key: float(factors[kind]["compacted"]) for key, kind in _GROUND_KIND_OF.items()} def _spoil_sites(designs: list[dict[str, Any]]) -> list[dict[str, Any]]: @@ -295,10 +318,11 @@ def _spoil_of( # 여기서 ÷C 한 값을 함께 내 받는 쪽이 **또 환산하지 않게** 한다. # ⚠ 갈래를 못 붙인 몫은 계수가 없어 **환산하지 않는다** — 토사 계수로 눅이면 근거 없이 # 금액이 움직인다. 그 사실을 사유로 낸다. + compacted_factor = _compacted_factor(settings) natural_by_ground = { - key: round(value / _COMPACTED_FACTOR[key], 3) + key: round(value / compacted_factor[key], 3) for key, value in grounds.items() - if key in _COMPACTED_FACTOR + if key in compacted_factor } if unknown > 0: note_parts.append(f"⚠ 갈래를 못 붙인 {unknown:,.2f}㎥ 는 상태도 못 되돌림") @@ -417,6 +441,10 @@ class QuantitySettingsBody(BaseModel): # 임목파쇄 — 기본 꺼짐(확정 5차 5번). 켜면 줄이 서고, 부피를 넣으면 값이 선다. wood_chipping_enabled: bool | None = None wood_chipping_volume_m3: float | None = None + # 토량환산계수(다짐) — `{갈래: {"compacted": C, "reason": 사유}}`. + # ⚠ **기본값을 복사해 넣지 않는다** — 안 고른 갈래는 키가 없어야 정본이 선다. + # 빈 dict 는 「전부 기본값으로 되돌림」이라 통째로 갈아 끼운다. + conversion_factors_override: dict[str, Any] | None = None #: `None` 이 「안 정함」을 뜻하는 칸 — 저장에서 **버리지 않고 그대로 덮어쓴다**. @@ -458,6 +486,21 @@ async def save_quantity_settings(project_id: UUID, body: QuantitySettingsBody) - method = values["concrete_placing_method"] # 「안 정함」으로 되돌릴 수 있어야 한다 — 빈 값이면 지운다(8-22 ② 와 같은 자리). values["concrete_placing_method"] = method if method in CONCRETE_PLACING_METHODS else None + if "conversion_factors_override" in values: + # 아는 갈래·양수만 남긴다. 사유는 값이 있을 때만 따라간다(계산에는 안 쓴다). + cleaned: dict[str, Any] = {} + for kind, entry in (values["conversion_factors_override"] or {}).items(): + if kind not in EARTHWORK_CONVERSION_FACTORS or not isinstance(entry, dict): + continue + value = entry.get("compacted") + if not isinstance(value, (int, float)) or isinstance(value, bool) or float(value) <= 0: + continue + kept: dict[str, Any] = {"compacted": float(value)} + reason = entry.get("reason") + if isinstance(reason, str) and reason.strip(): + kept["reason"] = reason.strip() + cleaned[kind] = kept + values["conversion_factors_override"] = cleaned if "rock_methods" in values: # 「안 정함」(빈 값)은 저장하지 않는다 — 정한 것과 구별이 안 된다. 통째로 갈아 끼우므로 # 여기서 버리면 그 갈래는 미지정으로 돌아간다. @@ -473,7 +516,14 @@ async def save_quantity_settings(project_id: UUID, body: QuantitySettingsBody) - _save_quantity, root, values, - ("rock_methods", "material_supply", "concrete_placing_method", "ancillary_counts") + ( + "rock_methods", + "material_supply", + "concrete_placing_method", + "ancillary_counts", + # 고른 계수를 **기본값으로 되돌릴 길**이 있어야 한다 — 병합이면 못 지운다. + "conversion_factors_override", + ) + NULLABLE_SETTING_KEYS, ) except Exception: diff --git a/B08_Quantity/B08_Quantity_Router_Material.py b/B08_Quantity/B08_Quantity_Router_Material.py index f5c55b21..344d1500 100644 --- a/B08_Quantity/B08_Quantity_Router_Material.py +++ b/B08_Quantity/B08_Quantity_Router_Material.py @@ -31,6 +31,7 @@ from B05_Profile.B05_Profile_Structures_Repository import load_structures from B05_Profile.B05_Profile_Structures_Schema import structure_type_map from B08_Quantity.B08_Quantity_Engine_Handoff import build_handoff, load_mapping, summarize from B08_Quantity.B08_Quantity_Engine_MaterialSummary import build_table as build_material_table +from B08_Quantity.B08_Quantity_Provenance import quantity_provenance from B08_Quantity.B08_Quantity_Engine_UnitQuantity import build_table as build_unit_table from B08_Quantity.B08_Quantity_Engine_UnitQuantity import ( ground_types_from_designs, @@ -173,15 +174,19 @@ async def get_material_summary(project_id: UUID) -> JSONResponse: # 조각이 없어도(원단위 자체가 없어 못 세운 경우) 사유는 보여야 한다. if row.get("composite_parts") or row.get("composite_not_ready") ] - return JSONResponse( - content={ - "unit_quantity": unit_table, - "material": material_table, - "composite": composite, - "skipped_structures": skipped, - "structure_count": len(structures), - } - ) + body: dict[str, Any] = { + "unit_quantity": unit_table, + "material": material_table, + "composite": composite, + "skipped_structures": skipped, + "structure_count": len(structures), + } + # 근거 사전(PLAN 8-36 ④) — ⚠ **개발환경에서만** 실린다. 운영에서는 `None` 이라 + # 칸 자체가 안 생긴다 — 화면에서 숨기는 것이 아니라 안 보내는 것이 요점이다. + provenance = quantity_provenance() + if provenance is not None: + body["provenance"] = provenance + return JSONResponse(content=body) async def project_haul_inputs(project_id: UUID) -> dict[str, Any]: diff --git a/B08_Quantity/B08_Quantity_UI_ConversionFactors.ts b/B08_Quantity/B08_Quantity_UI_ConversionFactors.ts new file mode 100644 index 00000000..443f5b2c --- /dev/null +++ b/B08_Quantity/B08_Quantity_UI_ConversionFactors.ts @@ -0,0 +1,203 @@ +/* ============================================================================= + * B08_Quantity_UI_ConversionFactors.ts + * 산출 조건 패널의 「토량환산계수(다짐)」 칸 — 고를 수 있게 열어 둔 자리. + * + * 왜 고르게 하나 (오솔길 대조 06절 3번) + * 품셈 체적변화율표가 암종마다 **범위**를 주고 「토질 시험하여 적용함을 원칙」이라 한다. + * 즉 정답 숫자가 하나가 아니다. 경쟁사(오솔길)가 전 구간 1.0 을 쓰는 것도 풍화암·연암 + * 범위의 하한이라 틀린 값이 아니다. 그래서 **값을 못 박지 않고 범위를 보이며 고르게** 한다. + * + * ⚠ 기본값은 건드리지 않는다 + * 정의처는 서버 `config_system_design.EARTHWORK_CONVERSION_FACTORS` 한 곳이다. 화면은 + * 고른 값만 `conversion_factors_override` 로 보내고, 안 고른 갈래는 **키 자체를 안 보낸다** — + * 그래야 나중에 정본이 바뀌어도 옛 프로젝트가 따라온다. + * + * ⚠ 범위 밖을 막지 않는다 + * 토질시험 값일 수 있다. 막는 대신 **사유를 적게** 하고, 그 사유가 정본에 함께 남는다. + * + * ⚠ 이 계수는 토적표만 쓰는 것이 아니다 + * 유토곡선(B06) · 운반표 · 기초단가가 같은 값을 읽는다. 패널에 그 사실을 한 줄 보인다 — + * 안 보이면 「토적표만 바뀌겠지」로 읽힌다. + * ========================================================================== */ + +import { ui_locales, currentLanguageIndex } from "@ui/ui_template_locale"; + +import type { ConversionFactorChoice, PumsemRange } from "./B08_Quantity_UI_EarthworkGrid"; + +/** locale 헬퍼 — 페이지 쪽과 같은 모양으로 둔다(문구는 `ui_template_locale_b2`). */ +function L(key: keyof typeof ui_locales): string { + return ui_locales[key][currentLanguageIndex]; +} + +/** 화면이 들고 있는 고른 값 — `compacted` 가 `null` 이면 「안 고름」이라 저장에서 빠진다. */ +export interface FactorDraft { + compacted: number | null; + reason: string; +} + +/** 서버 키 → 사람이 읽는 이름. 모르는 키는 **지어내지 않고** 그대로 보인다. */ +const GROUND_LABELS: Record = { + soil: "토사", + ripping_rock: "리핑암", + blasting_rock: "발파암", +}; + +function groundLabel(kind: string): string { + return GROUND_LABELS[kind] ?? kind; +} + +function hint(text: string): HTMLElement { + const row = document.createElement("p"); + row.className = "b08-quantity__hint"; + row.textContent = text; + return row; +} + +/** 범위 밖인가 — 서버가 준 범위로 판정한다. 범위를 모르면 **밖이라고 하지 않는다.** */ +function outOfRange(value: number, range: [number, number] | null): boolean { + if (!range) return false; + return value < range[0] || value > range[1]; +} + +/** + * 갈래 한 줄 — 값 칸 + 기본값·품셈 범위 안내 + (범위 밖일 때만) 사유 칸. + * + * 값을 비우면 「안 고름」으로 돌아가 기본값이 선다. 그 되돌리는 길이 있어야 + * 한 번 넣은 값이 영영 남지 않는다. + */ +function factorRow( + kind: string, + choice: ConversionFactorChoice, + draft: Record, + onChange: () => void, +): HTMLElement { + const box = document.createElement("div"); + box.className = "b08-quantity__factor"; + + const row = document.createElement("label"); + row.className = "b08-quantity__field"; + const name = document.createElement("span"); + name.textContent = groundLabel(kind); + const input = document.createElement("input"); + input.type = "number"; + input.className = "b08-quantity__input"; + input.min = "0"; + input.step = "0.01"; + input.placeholder = String(choice.default); + const current = draft[kind]?.compacted; + input.value = current === null || current === undefined ? "" : String(current); + row.append(name, input); + box.append(row); + + const range = (choice.range ?? null) as [number, number] | null; + box.append( + hint( + `${L("B08_Quantity_Factor_Default")} ${choice.default}` + + (range + ? ` · ${L("B08_Quantity_Factor_Range")} ${range[0].toFixed(2)}~${range[1].toFixed(2)}` + : ""), + ), + ); + + // 사유 칸은 **범위 밖일 때만** 선다 — 늘 띄우면 채우지 않아도 되는 칸으로 읽힌다. + const reasonRow = document.createElement("label"); + reasonRow.className = "b08-quantity__field"; + const reasonName = document.createElement("span"); + reasonName.textContent = L("B08_Quantity_Factor_Reason"); + const reasonInput = document.createElement("input"); + reasonInput.type = "text"; + reasonInput.className = "b08-quantity__input"; + reasonInput.value = draft[kind]?.reason ?? ""; + reasonRow.append(reasonName, reasonInput); + const warning = hint(L("B08_Quantity_Factor_OutOfRange")); + warning.classList.add("b08-quantity__hint--warn"); + + const sync = (): void => { + const value = input.value.trim() === "" ? null : Number(input.value); + const outside = value !== null && Number.isFinite(value) && outOfRange(value, range); + warning.hidden = !outside; + reasonRow.hidden = !outside; + }; + + input.addEventListener("input", () => { + const raw = input.value.trim(); + const value = raw === "" ? null : Number(raw); + draft[kind] = { + compacted: value !== null && Number.isFinite(value) ? value : null, + reason: draft[kind]?.reason ?? "", + }; + sync(); + onChange(); + }); + reasonInput.addEventListener("input", () => { + draft[kind] = { + compacted: draft[kind]?.compacted ?? null, + reason: reasonInput.value, + }; + onChange(); + }); + + box.append(warning, reasonRow); + sync(); + return box; +} + +/** + * 「토량환산계수(다짐)」 구획 전체. 서버가 준 갈래만 그린다 — 갈래 수를 화면에 안 박는다. + * + * `choices` 가 없으면(옛 응답) **아무것도 그리지 않는다** — 빈 칸을 지어내지 않는다. + */ +export function renderConversionFactorFields( + choices: Record | undefined, + pumsem: PumsemRange[] | undefined, + draft: Record, + onChange: () => void, +): HTMLElement | null { + const entries = Object.entries(choices ?? {}); + if (!entries.length) return null; + + const box = document.createElement("div"); + // 제 제목을 제 안에 들고 있어 이 구획 자신이 공용 접기 컨테이너가 된다(B03~B07 과 같은 틀). + box.className = "b08-quantity__factors ui-collapsible"; + const title = document.createElement("div"); + title.className = "b08-quantity__field ui-collapsible__title"; + const titleName = document.createElement("span"); + titleName.textContent = L("B08_Quantity_Side_Factors"); + title.append(titleName); + box.append(title); + // 어디까지 닿는 값인지 먼저 보인다 — 토적표만 바뀌는 줄 알면 함부로 고친다. + box.append(hint(L("B08_Quantity_Factor_Reach"))); + + for (const [kind, choice] of entries) { + box.append(factorRow(kind, choice, draft, onChange)); + } + + // 품셈 암종별 범위 — 서버가 내려 준 값을 그대로 보인다(화면에 다시 적지 않는다). + if (pumsem?.length) { + box.append( + hint( + `${L("B08_Quantity_Factor_Pumsem")} — ` + + pumsem + .map((item) => `${item.name} ${item.min.toFixed(2)}~${item.max.toFixed(2)}`) + .join(" · "), + ), + ); + } + return box; +} + +/** 저장 몸통에 실을 모양 — **고른 갈래만** 담는다. 빈 dict 는 「전부 기본값」이다. */ +export function conversionOverridePayload( + draft: Record, +): Record { + const payload: Record = {}; + for (const [kind, entry] of Object.entries(draft)) { + if (entry.compacted === null || !Number.isFinite(entry.compacted) || entry.compacted <= 0) { + continue; + } + payload[kind] = entry.reason.trim() + ? { compacted: entry.compacted, reason: entry.reason.trim() } + : { compacted: entry.compacted }; + } + return payload; +} diff --git a/B08_Quantity/B08_Quantity_UI_EarthworkGrid.ts b/B08_Quantity/B08_Quantity_UI_EarthworkGrid.ts index 3e07e7f9..ac19b7b3 100644 --- a/B08_Quantity/B08_Quantity_UI_EarthworkGrid.ts +++ b/B08_Quantity/B08_Quantity_UI_EarthworkGrid.ts @@ -14,6 +14,13 @@ * 원가 쪽(줄마다 원 단위 절사)과 규칙이 반대이므로 그 코드를 여기로 옮기지 말 것. * ========================================================================== */ +import { + attachProvenance, + markProvenanceCell, + type ProvenancePayload, + type ProvenanceSheet, +} from "@ui/ui_template_provenance"; + /** 서버가 주는 토적표 한 줄. 이름은 엔진(`B08_Quantity_Engine_EarthworkTable.py`)과 같다. */ export interface EarthworkRow { chainage_m: number; @@ -61,6 +68,8 @@ export interface SlopeTable { /** 산출 조건 — `project_settings.json` 의 `quantity` 구획. */ export interface QuantitySettings { + /** 고른 토량환산계수 — `{갈래: {compacted, reason?}}`. 안 고르면 키가 없다. */ + conversion_factors_override?: Record | null; rock_class_set?: string; rock_classes?: string[]; rock_ratios_pct?: Record; @@ -95,6 +104,25 @@ export interface QuantitySettings { wood_chipping_volume_m3?: number | null; } +/** 갈래 하나의 「무엇을 골랐나」. 서버 `earthwork_conversion_choices` 와 짝이다. */ +export interface ConversionFactorChoice { + compacted: number; + default: number; + /** 기본값과 다른 값을 골랐나. */ + chosen: boolean; + /** 품셈 범위 안인가. 밖이어도 **막지 않고** 사유를 받는다. */ + in_range: boolean; + range: [number, number] | null; + reason: string | null; +} + +/** 품셈 암종별 체적변화율 범위 — **화면 안내용**이고 계산에 안 쓴다. */ +export interface PumsemRange { + name: string; + min: number; + max: number; +} + export interface EarthworkTable { method: string; station_count: number; @@ -109,6 +137,12 @@ export interface EarthworkTable { /** 운반계획은 [저장]·[확정]에서 정본에 남는 값 — 아직 없으면 false. */ haul_available?: boolean; settings?: QuantitySettings; + /** 갈래별 토량환산계수 선택 상태 — 산출 조건 패널이 그린다. */ + conversion_factor_choices?: Record; + /** 품셈 암종별 범위(안내용). 정의처가 서버라 내려받아 보인다. */ + conversion_factor_pumsem_ranges?: PumsemRange[]; + /** 근거 사전 — ⚠ **개발환경에서만** 실려 온다. 운영에서는 칸 자체가 없다. */ + provenance?: ProvenancePayload; } /** 표 칸에 들어갈 수 있는 열 — 숫자 칸만 고른다(사유·주기는 표 밖이다). */ @@ -309,7 +343,11 @@ function buildHead(): HTMLTableSectionElement { return head; } -function buildBody(rows: EarthworkRow[], slope?: SlopeTable): HTMLTableSectionElement { +function buildBody( + rows: EarthworkRow[], + slope?: SlopeTable, + sheet?: ProvenanceSheet, +): HTMLTableSectionElement { const body = document.createElement("tbody"); const columns = flatColumns(); const slopeByChainage = new Map((slope?.rows ?? []).map((row) => [row.chainage_m, row])); @@ -321,9 +359,15 @@ function buildBody(rows: EarthworkRow[], slope?: SlopeTable): HTMLTableSectionEl td.textContent = index === 0 ? stationLabel(row.chainage_m) : cell(row[column.key], column.digits); if (index === 0) td.className = "b08-grid__station"; + // 근거 호버·등급색은 **사전이 왔을 때만** 붙는다(개발환경). + const columnProvenance = sheet?.columns[column.key]; + if (columnProvenance) markProvenanceCell(td, column.key, columnProvenance.tier); tr.append(td); }); + // 줄마다 갈리는 사유(측구 안분 폴백 등)는 열 사전이 못 든다 — 줄에 실어 카드가 덧붙게 한다. + if (row.notes?.length) tr.dataset.provNotes = row.notes.join("\n"); + const slopeRow = slopeByChainage.get(row.chainage_m); // 사면이 원지반을 못 만난 측점은 값이 잘려 있다 — 줄에 표시를 남긴다(PLAN 8-4b). if (slopeRow?.unclosed) tr.classList.add("is-unclosed"); @@ -433,11 +477,21 @@ export function renderEarthworkGrid(table: EarthworkTable): HTMLElement { scroller.className = "b08-grid__scroll"; const element = document.createElement("table"); element.className = "b08-grid__table"; + const sheet = table.provenance?.sheets?.earthwork; element.append( buildHead(), - buildBody(table.rows, table.slope), + buildBody(table.rows, table.slope, sheet), buildFoot(table.totals, table.slope), ); + // 사전이 없으면 아무 일도 안 한다 — 빈 카드를 띄우면 「설명이 있다」는 거짓만 남는다. + // 줄 사유는 **그 사유가 닿는 열에만** 붙인다. 줄에 달렸다고 십몇 칸에 다 띄우면 + // 「절토 보정량」 카드에 「측구 가름값…」 이 떠서 읽는 사람을 속인다(2026-09-12 실측). + // ⚠ 지금 줄 사유는 **측구 안분 폴백 하나뿐**이라 여기서 열 이름으로 가른다. + // 사유가 늘면 엔진이 「어느 열에 닿는 사유인가」를 같이 내는 쪽이 맞다. + attachProvenance(element, sheet, (cell, columnKey) => { + if (!columnKey.startsWith("ditch_")) return []; + return (cell.closest("tr")?.dataset.provNotes ?? "").split("\n").filter(Boolean); + }); if (table.slope) { const notice = buildUnclosedNotice(table.slope, element); diff --git a/B08_Quantity/B08_Quantity_UI_EarthworkGrid_Style.ts b/B08_Quantity/B08_Quantity_UI_EarthworkGrid_Style.ts index 69be9c9f..5e2d567e 100644 --- a/B08_Quantity/B08_Quantity_UI_EarthworkGrid_Style.ts +++ b/B08_Quantity/B08_Quantity_UI_EarthworkGrid_Style.ts @@ -186,6 +186,38 @@ const CSS = ` .b08-quantity__field-value { color: var(--color-text-secondary); font-variant-numeric: tabular-nums; } /* 칸 밑 근거 한 줄 — 왜 그 값인지 화면에서 보이게 한다(2026-09-09 사용자 지시). */ .b08-quantity__hint { margin: 0 0 6px; font-size: 11px; line-height: 1.4; color: var(--color-text-secondary); } +/* 품셈 범위 밖을 고른 칸 — **막지 않고** 사유를 받는 자리라 경고 색만 준다. */ +.b08-quantity__hint--warn { color: var(--color-warning, #b45309); } +/* 좌측 산출조건 패널 — B03~B07 과 같은 공통 틀을 쓴다(접히는 상자 ui-collapsible + + 공통 외곽선 ui-sidebar-section + 바닥 고정 액션 줄 ui-sidebar-actions). + ⚠ 테두리는 공용 .ui-sidebar-section(ui_template_overlay.css)이 전담한다 — + 여기서 border 를 다시 선언하면 로드 순서상 공통 색을 덮어 흐려진다(B04 주석과 같은 까닭). */ +.b08-quantity__panel { display: flex; flex-direction: column; gap: 8px; } +.b08-quantity__section { + display: flex; + flex-direction: column; + gap: 2px; + margin: 0; + padding: 10px 12px; + border-radius: var(--radius-cards); + background-color: var(--color-surface-raised); +} +.b08-quantity__section-title { + margin: 0 0 2px; + font-size: 12px; + font-weight: 600; + color: var(--color-text-secondary); +} +/* 개발 전용 줄 — ⚠ 단추 묶음에 공용 ui-sidebar-actions 를 쓰면 공용 코드가 **이 줄**을 + 패널 바닥 액션으로 잘못 집어(첫 번째 것을 찾는다) 스크롤 영역이 이 줄 안에 갇히고 + 아래 칸들이 통째로 잘린다(2026-09-12 사용자 보고). 생김새만 같게 두고 클래스는 따로 쓴다. */ +.b08-quantity__dev { display: flex; flex-direction: column; gap: 4px; } +.b08-quantity__dev-actions { display: flex; gap: 8px; } +.b08-quantity__dev-actions > * { flex: 1 1 0; min-width: 0; } +.b08-quantity__note { margin: 0; font-size: 11px; line-height: 1.4; color: var(--color-text-secondary); } +/* 토량환산계수 구획 — 갈래마다 (값 · 안내 · 사유)가 한 덩어리로 붙는다. */ +.b08-quantity__factors { margin: 4px 0 10px; } +.b08-quantity__factor { margin-bottom: 6px; } `; /** 스타일을 한 번만 넣는다 — 페이지를 다시 그려도 중복되지 않는다. */ diff --git a/B08_Quantity/B08_Quantity_UI_MaterialGrid.ts b/B08_Quantity/B08_Quantity_UI_MaterialGrid.ts index 65ceec08..6ce32804 100644 --- a/B08_Quantity/B08_Quantity_UI_MaterialGrid.ts +++ b/B08_Quantity/B08_Quantity_UI_MaterialGrid.ts @@ -12,6 +12,12 @@ * ========================================================================== */ import { stationLabel } from "./B08_Quantity_UI_EarthworkGrid"; +import { + attachProvenance, + markProvenanceCell, + type ProvenancePayload, + type ProvenanceSheet, +} from "@ui/ui_template_provenance"; export interface MaterialRow { name: string; @@ -27,6 +33,38 @@ export interface MaterialRow { sources: string[]; } +/** 줄 하나의 칸에 열 키를 차례대로 심는다 (집계표 쪽과 같은 틀). */ +function markRow(tr: HTMLTableRowElement, keys: readonly (string | null)[]): void { + [...tr.children].forEach((cell, index) => { + const key = keys[index]; + if (key) markProvenanceCell(cell as HTMLElement, key); + }); +} + +/** 자재총괄 열 차례 — 비고는 사전을 안 붙인다. */ +const MATERIAL_KEYS = [ + "name", + "unit", + "net_amount", + "surcharge_pct", + "total_amount", + "supply", + "install_by", + null, +] as const; + +/** 구조물 원단위 열 차례 — 근거·출처는 **이미 설명 글**이라 카드를 거듭 안 띄운다. */ +const UNIT_QUANTITY_KEYS = [ + "structure", + "spec", + "component", + "unit", + "amount", + "destination", + null, + null, +] as const; + export interface MaterialTable { columns: string[]; rows: MaterialRow[]; @@ -95,6 +133,8 @@ export interface MaterialResponse { skipped_structures: string[]; structure_count: number; /** 인계에서 온 묶음 조각 — 화면이 「무엇으로 나뉘어 서는지」를 보인다. */ + /** 근거 사전 — ⚠ **개발환경에서만** 실려 온다. 운영에서는 칸 자체가 없다. */ + provenance?: ProvenancePayload; composite?: { name: string; parts: CompositePart[]; @@ -244,6 +284,7 @@ function spreadLine(spread: MaterialTable["amount_spread"], title: string): HTML export function renderMaterialGrid( table: MaterialTable, options?: MaterialGridOptions, + sheet?: ProvenanceSheet, ): HTMLElement { const wrap = document.createElement("div"); wrap.className = "b08-grid"; @@ -330,10 +371,12 @@ export function renderMaterialGrid( tr.append(textCell(row.install_by_label)); } tr.append(textCell(row.note, "b08-grid__note")); + markRow(tr, MATERIAL_KEYS); body.append(tr); } element.append(body); + attachProvenance(element, sheet); scroller.append(element); wrap.append(scroller); return wrap; @@ -465,11 +508,15 @@ export function renderUnitQuantityGrid(response: MaterialResponse): HTMLElement // 나중에 「이 값이 왜 이런가」를 되짚을 수 있다. const kind = component.basis_kind === "observed" ? "실무 관측" : "치수 전개"; tr.append(textCell(component.reuse_count ? `${kind} · ${component.reuse_count}회` : kind)); + markRow(tr, UNIT_QUANTITY_KEYS); body.append(tr); } } element.append(body); + // 성분이 없는 줄은 칸을 붙여 쌀으므로(`colSpan`) 짚지 않았다 — 차례가 어긋나면 + // 엉뚱한 열의 설명이 뜼다. + attachProvenance(element, response.provenance?.sheets?.unit_quantity); scroller.append(element); wrap.append(scroller); return wrap; diff --git a/B08_Quantity/B08_Quantity_UI_Page.ts b/B08_Quantity/B08_Quantity_UI_Page.ts index 3c5bc69c..6813b290 100644 --- a/B08_Quantity/B08_Quantity_UI_Page.ts +++ b/B08_Quantity/B08_Quantity_UI_Page.ts @@ -11,6 +11,9 @@ import { ui_locales, currentLanguageIndex } from "@ui/ui_template_locale"; import { createButton, showToast } from "@ui/ui_template_elements"; import { API_BASE_URL, CURRENT_PROJECT_ID_KEY } from "@config/config_frontend"; import { createWorkflowLayout } from "@ui/ui_template_workflow_layout"; +import { attachCollapsible } from "@ui/ui_template_collapsible"; +import { groupPanelSections } from "./B08_Quantity_UI_SidePanel_Sections"; +import { createProvenanceToggle } from "@ui/ui_template_provenance"; import { workflowSteps } from "../A00_Common/b_page_scaffold"; import { fetchWorkflowState, @@ -18,6 +21,11 @@ import { WORKFLOW_STEP_ROUTES, } from "../A00_Common/b_workflow_nav"; import { renderEarthworkGrid, type EarthworkTable } from "./B08_Quantity_UI_EarthworkGrid"; +import { + conversionOverridePayload, + renderConversionFactorFields, + type FactorDraft, +} from "./B08_Quantity_UI_ConversionFactors"; import { injectEarthworkGridStyles } from "./B08_Quantity_UI_EarthworkGrid_Style"; import { renderHaulGrid, @@ -98,6 +106,8 @@ async function saveQuantitySettings(projectId: string, draft: DraftSettings): Pr wood_chipping_volume_m3: draft.wood_chipping_volume_m3, // 개소는 **통째로** 보낸다 — 지운 항목까지 그대로 가야 되돌릴 길이 있다. ancillary_counts: draft.ancillary_counts, + // 토량환산계수 — 고른 갈래만 담긴다. 빈 dict 는 「전부 기본값으로 되돌림」이다. + conversion_factors_override: conversionOverridePayload(draft.conversion_factors), }), }, ); @@ -243,16 +253,6 @@ function selectField( } /** 지반 종류 표기 — 서버 키가 화면에 새지 않게. 모르는 키는 그대로 보인다. */ -const GROUND_LABELS: Record = { - soil: "토사", - ripping_rock: "리핑암", - blasting_rock: "발파암", -}; - -function groundLabel(kind: string): string { - return GROUND_LABELS[kind] ?? kind; -} - /** 자재 한 줄의 관급/사급. `install_by` 는 **관급 줄에만** 뜻이 있다. */ export interface SupplyChoice { supply: string; @@ -291,6 +291,8 @@ interface DraftSettings { wood_chipping_volume_m3: number | null; // 자재별 관급/사급 — 표 안에서 줄마다 고른 값. material_supply: Record; + // 갈래별 토량환산계수(다짐) — `compacted` 가 `null` 이면 「안 고름」이라 기본값이 선다. + conversion_factors: Record; dirty: boolean; } @@ -354,7 +356,10 @@ function devUnlockRow(projectId: string, reload: () => void): HTMLElement { onClick: () => call("DELETE", relock), }); const buttons = document.createElement("div"); - buttons.className = "b08-quantity__actions ui-sidebar-actions"; + // ⚠ 공용 `ui-sidebar-actions` 를 쓰지 않는다 — 공용 코드가 **첫 번째** 그 클래스를 + // 패널 바닥 액션 줄로 집어(`ui_template_overlay.ts` splitSidebarActions), + // 스크롤 영역이 이 줄 안에 갇히고 아래 칸들이 통째로 잘린다(2026-09-12). + buttons.className = "b08-quantity__dev-actions"; buttons.append(unlock, relock); row.append(buttons); return row; @@ -383,18 +388,18 @@ function buildQuantitySidePanel( panel.append(devUnlockRow(projectId, reload)); } - // 계수는 서버 상수가 유일한 정의처다 — 화면은 보여 주기만 하고 값을 다시 적지 않는다. panel.append(field(L("B08_Quantity_Side_Method"), L("B08_Quantity_Side_Method_Value"))); - const entries = Object.entries(table?.conversion_factors ?? {}); - if (entries.length) { - panel.append(field(L("B08_Quantity_Side_Factors"), "")); - for (const [kind, value] of entries) { - // ⚠ 서버 키(`soil`·`ripping_rock`·`blasting_rock`)를 그대로 내보내지 않는다 — - // 2026-09-08 ㉕ 화면 통과에서 좌측 세 줄이 개발자 키로 떠 있었다(`soil_guard` 와 같은 병). - // 모르는 키는 **지어내지 않고** 그대로 보인다. - panel.append(field(groundLabel(kind), String((value as { compacted: number }).compacted))); - } - } + // 토량환산계수 — **고를 수 있는 값**이다(오솔길 대조 06절 3번). 기본값 정의처는 서버 한 곳이고, + // 화면은 고른 값만 보낸다. 유토곡선·운반표·기초단가가 같이 읽는다는 안내도 그 칸이 낸다. + const factorFields = renderConversionFactorFields( + table?.conversion_factor_choices, + table?.conversion_factor_pumsem_ranges, + draft.conversion_factors, + () => { + draft.dirty = true; + }, + ); + if (factorFields) panel.append(factorFields); // ── 지반 구성비 — 갈래 수는 프로젝트 세트가 정한다(코드에 안 박음, PLAN 8-13) ── const classes = [...(table?.summary?.rock_classes ?? [])]; @@ -641,6 +646,8 @@ function buildQuantitySidePanel( }, ), ); + // ⚠ `?.` 이 빠지면 표를 못 받은 때(`table === null`) 여기서 터져 **페이지가 통째로 + // 백지**가 된다 — 정작 보여야 할 「표를 못 불렀다」 안내까지 같이 사라진다(2026-09-12 실측). const placing = ( table as unknown as { concrete_placing?: { @@ -648,8 +655,8 @@ function buildQuantitySidePanel( is_default: boolean; price_hint?: { basis?: string; values?: Record }; }; - } - ).concrete_placing; + } | null + )?.concrete_placing; if (placing) { // ⚠ 방식 이름을 **늘** 값 옆에 보인다 — 코드(`12-01-01`)만으로는 무엇을 쓰는지 모른다. const label = PLACING_LABELS[placing.method] ?? placing.method; @@ -744,6 +751,10 @@ function buildQuantitySidePanel( // TODO(미결) — 설정의 초기값을 무엇으로 볼지 사용자 확인 뒤에 붙인다. actions.append(saveButton, confirmButton); panel.append(actions); + + // 조건 칸을 B03~B07 공통 상자로 묶고 제목 클릭으로 접히게 한다. + groupPanelSections(panel); + attachCollapsible(panel); return panel; } @@ -769,6 +780,14 @@ function buildQuantityBody( return element; }; + // 등급색 토글 — ⚠ **사전이 왔을 때만** 만든다(개발환경). 배포 빌드에서는 단추 자체가 없다. + if ( + (table as unknown as { provenance?: unknown } | null)?.provenance || + (material as unknown as { provenance?: unknown } | null)?.provenance + ) { + tabs.append(createProvenanceToggle(body)); + } + if (failed) { body.append(tabs, message(L("B08_Quantity_Grid_Failed"))); return body; @@ -783,13 +802,19 @@ function buildQuantityBody( { label: L("B08_Quantity_Tab_Summary"), build: () => - table.summary ? renderSummaryGrid(table.summary) : message(L("B08_Quantity_Grid_Empty")), + table.summary + ? renderSummaryGrid(table.summary, table.provenance?.sheets?.summary) + : message(L("B08_Quantity_Grid_Empty")), }, { label: L("B08_Quantity_Tab_Haul"), build: () => table.haul - ? renderHaulGrid(table.haul, Boolean(table.haul_available)) + ? renderHaulGrid( + table.haul, + Boolean(table.haul_available), + table.provenance?.sheets?.haul, + ) : message(L("B08_Quantity_Haul_Missing")), }, { @@ -797,7 +822,7 @@ function buildQuantityBody( build: () => { const preparation = (table as unknown as { preparation?: PreparationTable }).preparation; return preparation - ? renderPreparationGrid(preparation) + ? renderPreparationGrid(preparation, table.provenance?.sheets?.preparation) : message(L("B08_Quantity_Grid_Empty")); }, }, @@ -810,12 +835,16 @@ function buildQuantityBody( label: L("B08_Quantity_Tab_Material"), build: () => material - ? renderMaterialGrid(material.material, { - choices: draft.material_supply, - onChange: () => { - draft.dirty = true; + ? renderMaterialGrid( + material.material, + { + choices: draft.material_supply, + onChange: () => { + draft.dirty = true; + }, }, - }) + material.provenance?.sheets?.material, + ) : message(L("B08_Quantity_Material_Failed")), }, ]; @@ -887,6 +916,16 @@ export async function renderB08Quantity(root: HTMLElement): Promise { ...((stored.ancillary_counts ?? {}) as Record), }, material_supply: { ...((stored.material_supply ?? {}) as Record) }, + // ⚠ 저장분에 있는 갈래만 담는다 — 기본값을 복사해 넣으면 「안 고름」이 사라진다. + conversion_factors: Object.fromEntries( + Object.entries(stored.conversion_factors_override ?? {}).map(([kind, entry]) => [ + kind, + { + compacted: typeof entry?.compacted === "number" ? entry.compacted : null, + reason: typeof entry?.reason === "string" ? entry.reason : "", + }, + ]), + ), dirty: false, }; const reload = (): void => { diff --git a/B08_Quantity/B08_Quantity_UI_SidePanel_Sections.ts b/B08_Quantity/B08_Quantity_UI_SidePanel_Sections.ts new file mode 100644 index 00000000..d696cbb0 --- /dev/null +++ b/B08_Quantity/B08_Quantity_UI_SidePanel_Sections.ts @@ -0,0 +1,64 @@ +/* ============================================================================= + * B08_Quantity_UI_SidePanel_Sections.ts + * 좌측 산출조건 패널을 **B03~B07 공통 상자**로 묶는 자리. + * + * 페이지 본문(`B08_Quantity_UI_Page.ts`)이 이미 700줄을 크게 넘어 새 코드를 그리로 + * 보내지 않고 이 파일로 뀜다(CLAUDE.md 4장 700줄 제한). + * ========================================================================== */ + +/** + * 다 쌓인 조건 칸을 「제목 + 그 뒤 칸들」 덩어리로 잘라 **B03~B07 공통 상자**에 담는다. + * + * 왜 다 쌓은 뒤에 한 번 묶나 + * 칸을 쌓는 코드가 400줄에 흩어져 있어 append 를 하나하나 고치면 손댈 자리가 너무 많다. + * 제목은 `field(이름, "")` 이 낸 **값이 빈 줄**이고, 그것이 나올 때마다 새 상자가 열린다. + * 상자 겉모습·접기는 공용 클래스가 전담한다 — B04·B06 과 같은 틀이다. + * + * ⚠ 개발용 줄과 맨 아래 액션 줄은 **상자 밖에 남긴다.** 액션 줄은 공용 코드가 패널 바닥에 + * 고정하는 줄이라 상자 안으로 들어가면 바닥에 안 붙는다. + * ⚠ 첫 제목보다 앞에 오는 것(산출법 한 줄 · 토량환산계수 구획)은 **제목 없는 상자**에 담는다 — + * 토량환산계수는 제 제목을 제 안에 이미 들고 있어 따로 붙이면 제목이 둘이 된다. + */ +export function groupPanelSections(panel: HTMLElement): void { + const isHeading = (node: Element): boolean => { + if (node.tagName !== "DIV" || !node.classList.contains("b08-quantity__field")) return false; + const value = node.querySelector(".b08-quantity__field-value"); + return !value || !value.textContent; + }; + const newSection = (title: string | null): HTMLElement => { + const section = document.createElement("section"); + section.className = title + ? "b08-quantity__section ui-collapsible ui-sidebar-section" + : "b08-quantity__section ui-sidebar-section"; + if (title) { + const heading = document.createElement("p"); + heading.className = "b08-quantity__section-title ui-collapsible__title"; + heading.textContent = title; + section.append(heading); + } + return section; + }; + + let box: HTMLElement | null = null; + for (const node of [...panel.children]) { + // 개발용 줄·바닥 액션 줄은 건너뛰고 상자도 끊는다. + if ( + node.classList.contains("b08-quantity__dev") || + node.classList.contains("ui-sidebar-actions") + ) { + box = null; + continue; + } + if (isHeading(node)) { + box = newSection(node.firstElementChild?.textContent ?? ""); + panel.insertBefore(box, node); + node.remove(); + continue; + } + if (!box) { + box = newSection(null); + panel.insertBefore(box, node); + } + box.append(node); + } +} diff --git a/B08_Quantity/B08_Quantity_UI_SummaryGrid.ts b/B08_Quantity/B08_Quantity_UI_SummaryGrid.ts index b4c03e32..7845acce 100644 --- a/B08_Quantity/B08_Quantity_UI_SummaryGrid.ts +++ b/B08_Quantity/B08_Quantity_UI_SummaryGrid.ts @@ -11,11 +11,38 @@ * ========================================================================== */ import { ui_locales, currentLanguageIndex } from "@ui/ui_template_locale"; +import { + attachProvenance, + markProvenanceCell, + type ProvenanceSheet, +} from "@ui/ui_template_provenance"; function L(key: keyof typeof ui_locales): string { return ui_locales[key][currentLanguageIndex]; } +/** 줄 하나의 칸에 열 키를 차례대로 심는다. + + * 이 세 표는 칸을 `textCell()` 로 줄지어 붙이므로 **다 지은 뒤에 차례로 짚는 것**이 + * 가장 적게 고치는 길이다. `override` 는 **그 칸만 열 등급을 이기는** 자리다 — + * 같은 열이라도 줄마다 성격이 갈리는 것(내역 제외 줄·값을 못 세운 줄)을 위한 것이다. + */ +function markRow( + tr: HTMLTableRowElement, + keys: readonly (string | null)[], + override?: Record, +): void { + [...tr.children].forEach((cell, index) => { + const key = keys[index]; + if (key) markProvenanceCell(cell as HTMLElement, key, override?.[index]); + }); +} + +/** 열 차례 — 비고는 사유 글이라 사전을 안 붙인다(`null`). */ +const SUMMARY_KEYS = ["group", "item", "spec", "unit", "amount", null] as const; +const HAUL_KEYS = ["equipment", "ground", "volume_m3", "average_distance_m", "legs", null] as const; +const PREPARATION_KEYS = ["group", "item", "unit", "amount", "status", null] as const; + export interface SummaryRow { group: string; item: string; @@ -77,7 +104,7 @@ function textCell(text: string, className?: string): HTMLTableCellElement { } /** 토공집계표 — 실무 시트와 같은 여섯 열. */ -export function renderSummaryGrid(table: SummaryTable): HTMLElement { +export function renderSummaryGrid(table: SummaryTable, sheet?: ProvenanceSheet): HTMLElement { const wrap = document.createElement("div"); wrap.className = "b08-grid"; @@ -114,17 +141,25 @@ export function renderSummaryGrid(table: SummaryTable): HTMLElement { note.prepend(tag); } tr.append(note); + // ⚠ 무대(소운반 20m)처럼 **집계에는 오르되 내역 줄이 아닌** 줄은 「계」가 + // 최종이 아니라 **제외**임(품셀 1-2-7). 못 세운 것과 뜻이 정반대라 칸 등급을 갈라 준다. + markRow(tr, SUMMARY_KEYS, row.in_bill ? undefined : { 4: "excluded" }); body.append(tr); } element.append(head, body); + attachProvenance(element, sheet); scroller.append(element); wrap.append(scroller); return wrap; } /** 운반거리 — 내역 줄(가중평균)과 근거 줄을 나눠 보인다. */ -export function renderHaulGrid(table: HaulTable, available: boolean): HTMLElement { +export function renderHaulGrid( + table: HaulTable, + available: boolean, + sheet?: ProvenanceSheet, +): HTMLElement { const wrap = document.createElement("div"); wrap.className = "b08-grid"; @@ -180,10 +215,13 @@ export function renderHaulGrid(table: HaulTable, available: boolean): HTMLElemen note.append(document.createTextNode(" 품셈 1-2-7 소운반 20m 이내는 품에 포함")); } tr.append(note); + // 내역 줄이 안 되는 줄은 토량·거리 둘 다 「제외」임 — 값은 검산에만 쓴다. + markRow(tr, HAUL_KEYS, row.in_bill ? undefined : { 2: "excluded", 3: "excluded" }); body.append(tr); } element.append(head, body); + attachProvenance(element, sheet); scroller.append(element); wrap.append(scroller); return wrap; @@ -212,7 +250,10 @@ export interface PreparationTable { * 빈 표를 내면 「빠뜨린 것」과 「원래 없는 것」이 구별되지 않는다. 그래서 값이 없는 줄도 * 상태와 사유를 달아 그대로 세운다. */ -export function renderPreparationGrid(table: PreparationTable): HTMLElement { +export function renderPreparationGrid( + table: PreparationTable, + sheet?: ProvenanceSheet, +): HTMLElement { const wrap = document.createElement("div"); wrap.className = "b08-grid"; @@ -251,10 +292,13 @@ export function renderPreparationGrid(table: PreparationTable): HTMLElement { note.append(document.createTextNode(` (참고 면적 ${num(row.reference_amount, 1)})`)); } tr.append(note); + // 값을 못 세운 줄의 「수량」은 **막힘** — 근거가 오면 채워질 자리라 제외과 갈라 보인다. + markRow(tr, PREPARATION_KEYS, row.amount === null ? { 3: "blocked" } : undefined); body.append(tr); } element.append(head, body); + attachProvenance(element, sheet); scroller.append(element); wrap.append(scroller); return wrap; diff --git a/B09_Estimation/B09_Estimation_BillOfQuantities.py b/B09_Estimation/B09_Estimation_BillOfQuantities.py index fd50b7fc..0c9e6578 100644 --- a/B09_Estimation/B09_Estimation_BillOfQuantities.py +++ b/B09_Estimation/B09_Estimation_BillOfQuantities.py @@ -152,7 +152,22 @@ class BillRow: expense_krw: Decimal = _ZERO is_group: bool = False in_bill: bool = True - note: str = "" + #: 줄 사유 **조각** — `(닿는 열 키, 글)`. 화면 「비고」는 이것을 이어 붙인 것이고, + #: 근거 호버는 열 키로 걸러 **그 사유가 닿는 칸에만** 띄운다(PLAN 8-36 ㉮). + #: ⚠ 종전엔 `note` 한 칸에 덮어썼다 — 한 줄에 사유가 둘이면 **하나가 조용히 사라졌다** + #: (막힘 사유가 먼저 적힌 반영률 문구를 지웠다, 2026-09-12 데스크탑 보조 조사 ㉮). + #: 그래서 **덮지 않고 쌓는다.** 열을 못 짚는 줄 전체 사유는 키를 빈 글로 둔다. + notes: list[tuple[str, str]] = field(default_factory=list) + + @property + def note(self) -> str: + """화면 「비고」 칸 — 조각을 종전과 **같은 꼴**로 이어 붙인다.""" + return " / ".join(text for _, text in self.notes if text) + + def add_note(self, column: str, text: str) -> None: + """사유 한 조각을 **쌓는다**. `column` 은 그 사유가 닿는 열 키(줄 전체면 빈 글).""" + if text: + self.notes.append((column, text)) def as_dict(self) -> dict[str, Any]: def money(value: Decimal | None) -> str | None: @@ -185,6 +200,9 @@ class BillRow: "is_group": self.is_group, "in_bill": self.in_bill, "note": self.note, + #: 근거 호버용 — 어느 사유가 **어느 열**에 닿는지까지 실어 보낸다. + #: 화면 「비고」 칸은 위 `note` 그대로라 토글을 끈 사용자도 사유를 그대로 본다. + "notes": [{"column": column, "text": text} for column, text in self.notes], } @@ -514,7 +532,8 @@ def build_bill( continue entry = sheet.by_unit_price(f"B-{row.code}") if entry is not None: - row.note = " / ".join(part for part in (entry.label, row.note) if part) + # 종전처럼 **맨 앞**에 놓는다 — 실무 참조번호(「단산 46」)가 먼저 읽혀야 한다. + row.notes.insert(0, ("unit_price_krw", entry.label)) result.price_basis = sheet if any(m.surcharge_pct is None for m in materials): diff --git a/B09_Estimation/B09_Estimation_BillOfQuantities_Rows.py b/B09_Estimation/B09_Estimation_BillOfQuantities_Rows.py index 33843c80..d1f97d03 100644 --- a/B09_Estimation/B09_Estimation_BillOfQuantities_Rows.py +++ b/B09_Estimation/B09_Estimation_BillOfQuantities_Rows.py @@ -83,7 +83,7 @@ def _composite_row( if missing_parts or money is None: detail_text = "; ".join(reasons[:3]) or ", ".join(missing_parts[:4]) - row.note = f"묶음 조각이 덜 찼습니다 — {detail_text}" + row.add_note("quantity", f"묶음 조각이 덜 찼습니다 — {detail_text}") result.missing.append( { "name": row.name, @@ -103,7 +103,7 @@ def _composite_row( row.material_krw = line.material row.labor_krw = line.labor row.expense_krw = line.expense - row.note = f"묶음 {len(item.composite_parts)}조각 합계" + row.add_note("quantity", f"묶음 {len(item.composite_parts)}조각 합계") return row @@ -116,7 +116,7 @@ def _excluded_row(item: HandoffWorkItem) -> BillRow: · ⚠ **여기서 세지 않는 줄**(`blocked_kind` 없음) — 「다른 표에서 이미 섬」· 「이 노선엔 없음」. **이것을 할 일 목록에 얹으면 결국 이중계상이 된다.** """ - return BillRow( + row = BillRow( item_no="", level=1, code=item.work_item_code, @@ -125,10 +125,13 @@ def _excluded_row(item: HandoffWorkItem) -> BillRow: unit=item.unit, quantity=item.quantity, in_bill=False, - note=item.blocked_reason - or item.in_bill_reason - or "합계 검산용 줄 — 금액을 매기지 않습니다.", ) + # 줄 하나가 통째로 빠지는 사유라 닿는 열이 없다 — 키를 비워 **모든 칸**에 따라붙게 둔다. + row.add_note( + "", + item.blocked_reason or item.in_bill_reason or "합계 검산용 줄 — 금액을 매기지 않습니다.", + ) + return row def _leaf_row( @@ -151,10 +154,10 @@ def _leaf_row( ) if item.spec_class_basis: # 갈래 판정 근거는 **B08 문구를 그대로** 쓴다(두 벌로 짜지 않는다). - row.note = " / ".join(part for part in (row.note, item.spec_class_basis) if part) + row.add_note("spec", item.spec_class_basis) if item.application_ratio_pct is not None: # ⚠ 곱하지 않는다 — B08 이 이미 곱한 값이다. 산출근거로만 적는다. - row.note = f"반영률 {item.application_ratio_pct}% 적용 후 수량" + row.add_note("quantity", f"반영률 {item.application_ratio_pct}% 적용 후 수량") elif item.application_ratio_breakdown: # ⚠ **「율 없음」이 아니라 「갈래마다 다름」이다.** 율이 갈리는 줄은 B08 이 `pct` 를 # 비우고 갈래로만 보낸다. 그 사실을 안 적으면 **값은 맞는데 왜 그 수량인지**를 @@ -162,12 +165,12 @@ def _leaf_row( parts = ", ".join( f"{name} {value}%" for name, value in item.application_ratio_breakdown.items() ) - row.note = f"반영률이 갈래마다 다릅니다 — {parts} (적용 후 수량)" + row.add_note("quantity", f"반영률이 갈래마다 다릅니다 — {parts} (적용 후 수량)") if not item.in_bill: # 검산용 줄 — 수량은 보이되 **단가를 안 붙인다**(PLAN 8-7 ㉡ 와 같은 성격). row.quantity = item.quantity - row.note = item.in_bill_reason or "합계 검산용 줄 — 금액을 매기지 않습니다." + row.add_note("", item.in_bill_reason or "합계 검산용 줄 — 금액을 매기지 않습니다.") result.excluded.append(row) return row @@ -177,13 +180,16 @@ def _leaf_row( # **주의 문구**였다 — 「관종을 안 정해 기본값(파형강관)으로 섰습니다」. # ⇒ 사유만 온 줄은 **금액을 세우고 그 문구를 곁말로** 단다. if item.blocked_reason and not item.blocked_kind: - row.note = " / ".join(part for part in (row.note, f"ⓘ {item.blocked_reason}") if part) + row.add_note("spec", f"ⓘ {item.blocked_reason}") if item.blocked_reason and item.blocked_kind: # B08 이 「왜 못 골랐는지」를 적어 보냈다 — **그 문구를 그대로** 보인다. # 사용자가 입력하면 풀리는 것(`input_missing`)과 우리가 만들어야 하는 것을 # 가르지 않으면, 사용자가 「후보를 고르면 되나」로 잘못 읽는다. - row.note = f"{_BLOCKED_LABELS.get(item.blocked_kind, '막힘')} — {item.blocked_reason}" + row.add_note( + "unit_price_krw", + f"{_BLOCKED_LABELS.get(item.blocked_kind, '막힘')} — {item.blocked_reason}", + ) result.missing.append( { "name": row.name, @@ -221,11 +227,14 @@ def _leaf_row( ) if children: names = ", ".join(f"{c[2:]} {unit_prices.book.title(c).name}" for c in children) - row.note = f"이 공종엔 일위대가가 없고 한 층 아래에 있습니다 — 후보: {names}" + row.add_note( + "unit_price_krw", + f"이 공종엔 일위대가가 없고 한 층 아래에 있습니다 — 후보: {names}", + ) # 관경이 표 밖이면 **무엇을 정해야 하는지**까지 가리킨다. diameter_note = pipe_diameter_note(node.code, item.variant_value) if diameter_note: - row.note = f"{row.note} / {diameter_note}" + row.add_note("spec", diameter_note) reason = f"일위대가가 하위 공종에 있음(후보 {len(children)}건)" else: # ⚠ 「아직 안 만든 것」과 「성분이 빠져 못 세운 것」은 **할 일이 다르다**. @@ -233,10 +242,12 @@ def _leaf_row( # 표에 수량 칸이 비어 있고 「철근가공조립(간단)의 30 %」처럼 참조로만 적힌 자리). gap = unit_prices.component_gaps.get(node.code) if gap: - row.note = f"성분이 빠져 단가를 못 세웠습니다 — {gap}" + row.add_note("unit_price_krw", f"성분이 빠져 단가를 못 세웠습니다 — {gap}") reason = f"성분 미확보 — {gap}" else: - row.note = "일위대가가 아직 없습니다 — 금액을 0 으로 때우지 않습니다." + row.add_note( + "unit_price_krw", "일위대가가 아직 없습니다 — 금액을 0 으로 때우지 않습니다." + ) reason = "일위대가 없음" result.missing.append( { @@ -254,7 +265,10 @@ def _leaf_row( if missing_basis: # ⚠ 밑수를 모르는 표다 — 「10㎡당」인지 「1㎡당」인지 모른 채 곱하면 10배·100배 # 틀린다(떼채취가 실제로 100배였다). **곱하지 않고 드러낸다.** - row.note = f"밑수(기준 수량)를 못 찾은 표입니다 — 곱하지 않았습니다. 원문 {missing_basis}" + row.add_note( + "unit_price_krw", + f"밑수(기준 수량)를 못 찾은 표입니다 — 곱하지 않았습니다. 원문 {missing_basis}", + ) result.missing.append( { "name": row.name, @@ -275,8 +289,9 @@ def _leaf_row( missing_rows = unit_prices.unattached.get(node.code) or [] if not why and missing_rows: why = f"{', '.join(missing_rows[:3])} 줄이 아직 안 붙었습니다" - row.note = ( - f"단가가 일부만 섰습니다 — 붙은 몫 {covered}%" + (f" · {why}" if why else "") + "." + row.add_note( + "unit_price_krw", + f"단가가 일부만 섰습니다 — 붙은 몫 {covered}%" + (f" · {why}" if why else "") + ".", ) result.missing.append( { @@ -294,14 +309,10 @@ def _leaf_row( # ⚠ 품셈 표가 기준 단위를 안 준 단가다 — 「10㎡당」 같은 묶음 기준일 수 있다. # 값을 막지는 않되(막으면 대부분이 멈춘다) **모르는 채 곱했다는 사실을 적는다**. # 비고를 **덮지 않고 잇는다** — 반영률 문구가 먼저 적혀 있을 수 있다. - row.note = " / ".join( - part - for part in ( - row.note, - f"단가의 기준 단위가 표에 없습니다 — B08 수량 단위({row.unit})와 같다고 " - "보고 곱했습니다. 확인 필요.", - ) - if part + row.add_note( + "unit_price_krw", + f"단가의 기준 단위가 표에 없습니다 — B08 수량 단위({row.unit})와 같다고 " + "보고 곱했습니다. 확인 필요.", ) if title.unit and row.unit and not _same_unit(title.unit, row.unit): @@ -311,9 +322,10 @@ def _leaf_row( # 52,938.9 = 1,381,753원이라 **2.6 배 적은 금액**이 내역서에 든 셈이다. # 어느 쪽이 맞는지는 우리가 정할 일이 아니다 — **B08 이 면적을 보내거나 묶음 # 조각으로 보내야** 풀린다. 그때까지 **금액을 만들지 않고 드러낸다.** - row.note = ( + row.add_note( + "amount_krw", f"단위가 안 맞습니다 — 수량은 {row.unit}, 단가는 {title.unit}당입니다. " - "곱하면 금액이 틀리므로 비워 둡니다." + "곱하면 금액이 틀리므로 비워 둡니다.", ) result.missing.append( { @@ -332,13 +344,13 @@ def _leaf_row( # 그 밑수가 사용자 확정을 기다리고 있다(계획서 4-12 3단계). pending = pending_formula_note(node.code) if pending: - row.note = " / ".join(part for part in (row.note, pending) if part) + row.add_note("quantity", pending) # ⚠ **원문에는 있는데 단가에 못 실린 몫**도 같은 자리에서 말한다. 금액이 서 있는 줄이라 # 표시가 없으면 완성된 값으로 읽힌다(규준틀 둘이 인력만으로 492만원이었다). gap = known_gap_note(node.code) if gap: - row.note = " / ".join(part for part in (row.note, gap) if part) + row.add_note("unit_price_krw", gap) # 쓰인 차례를 기억한다 — 실무 참조번호(「단산 46」)가 그 차례다. if price_code not in result.used_unit_prices: @@ -392,10 +404,13 @@ def _material_row(material: HandoffMaterial, result: BillResult) -> BillRow: spec=material.spec, unit=material.unit, quantity=material.total_amount, - note=material.surcharge_note, ) + # 할증 사유는 **수량**에 닿는다 — 할증이 곱해진 뒤의 수량이기 때문이다. + row.add_note("quantity", material.surcharge_note) if material.supply_type == SUPPLY_UNKNOWN: - row.note = "관급·사급이 안 갈렸습니다 — 관급자재대에도, 도급 재료비에도 넣지 않습니다." + row.add_note( + "", "관급·사급이 안 갈렸습니다 — 관급자재대에도, 도급 재료비에도 넣지 않습니다." + ) result.missing.append( { "name": material.display_name, @@ -409,14 +424,16 @@ def _material_row(material: HandoffMaterial, result: BillResult) -> BillRow: # `owner_supplied` 인데 「사급 자재 단가 미확보」로 뜨고 있었다). 갈래마다 **가는 자리도 # 원천도 다르다** — 관급은 총원가 밖 관급자재대(나라장터), 사급은 도급 재료비(물가지). if material.supply_type == SUPPLY_OWNER: - row.note = ( - row.note - or "관급 자재 단가 미확보 — 나라장터 목록에 이 품목이 없습니다. " - "관급자재대(총원가 밖 별도 표기)로 갑니다." + row.add_note( + "unit_price_krw", + "관급 자재 단가 미확보 — 나라장터 목록에 이 품목이 없습니다. " + "관급자재대(총원가 밖 별도 표기)로 갑니다.", ) reason = "관급 자재 단가 없음" else: - row.note = row.note or "사급 자재 단가 미확보 — 6번 슬롯(적용 단가) 수동 입력 대기." + row.add_note( + "unit_price_krw", "사급 자재 단가 미확보 — 6번 슬롯(적용 단가) 수동 입력 대기." + ) reason = "사급 자재 단가 없음(미결 No.18)" result.missing.append( diff --git a/B09_Estimation/B09_Estimation_Provenance.py b/B09_Estimation/B09_Estimation_Provenance.py new file mode 100644 index 00000000..3ab99a8e --- /dev/null +++ b/B09_Estimation/B09_Estimation_Provenance.py @@ -0,0 +1,457 @@ +"""B09 원가 화면의 **근거 사전** — 어느 숫자가 어디서 와서 어떻게 나왔나 (PLAN 8-36 ④). + +⚠⚠ **개발 전용.** 사전은 `provenance_payload()` 를 거쳐 나가고, 개발환경이 아니면 `None` + 이라 응답에 칸 자체가 안 생긴다. 화면에서 숨기는 것이 아니라 **안 보내는 것**이다. + +왜 이 파일인가 + 「식」과 「원천」의 정답은 값을 낳는 엔진이 안다. 화면 TS 에 손으로 적어 두면 엔진을 + 고칠 때 설명만 옛것으로 남는다. 엔진 옆에 두어 같이 눈에 들어오게 한다. + ⚠ `B09_Estimation_UI_Page.ts`(1415줄)·`B09_Estimation_UnitPrice.py`(1173줄) 가 이미 + 700줄을 크게 넘어 **새 파일로 뺐다**(PLAN 8-36 끝 ⚠). + +⚠ **열 단위로 적는다.** 줄마다 갈리는 사유는 줄이 `notes` 로 들고 오고(내역서는 그 사유가 + **닿는 열 키**까지 함께 들고 온다 — `BillRow.notes`), 화면이 그 열의 칸에만 덧붙인다. + +토적표와 맞대 본 것 (데스크탑 메인 요청) + · B08 토적표에는 `final` 이 **한 열도 없었다** — 중간 장부이기 때문이다. + · B09 는 반대로 `final` 이 분명히 있다 — 내역서 금액·자재대 금액이 그 자리다. + ⇒ 등급 여섯은 **한 장이 아니라 두 장을 합쳐야** 다 쓰인다. + · 그래도 **원가계산서 「금액」은 열 단위로 `final` 을 못 붙였다.** 같은 열 안에서 + 중간줄(간접노무비 따위)과 마지막줄(총원가·도급금액·총계)의 성격이 갈리는데 등급은 + **열에 하나**뿐이라서다. `calc` 로 두고 `rule` 에 어느 줄이 `final` 인지 적었다. + ⇒ 이 어긋남은 PLAN 8-36 ① 에 남긴다(칸 단위 등급이 필요한 첫 자리). +""" + +from __future__ import annotations + +from typing import Any + +from common_util.common_util_provenance import ( + TIER_CALC, + TIER_EXCLUDED, + TIER_FINAL, + TIER_STANDARD, + TIER_SURVEY, + ColumnProvenance, + provenance_payload, + sheet_provenance, +) +from B09_Estimation.B09_Estimation_Provenance_Common import _label, _note_column +from B09_Estimation.B09_Estimation_Provenance_Sources import ( + base_reference_fuel_sheet, + base_reference_labor_sheet, + basis_sheet_tables, + material_comparison_sheet, + price_basis_sheet, +) + +#: 요율이 어디서 오는지 — 원가계산서 여러 열이 같은 문장을 쓴다. +_RATE_SOURCE = ( + "요율 판 `resources/data_cost_input_value/rates_2026.json` — " + "공사금액·공사기간 구간으로 골라 씀(`B09_Estimation_Rates.py:180 select_bracket`). " + "어느 판으로 섰는지는 좌측 패널 「요율 판」과 산출기초 ① 에 지문까지 남음" +) + + +# ============================================================================= +# ① 공사원가계산서 +# ============================================================================= + + +def cost_sheet() -> dict[str, Any]: + """열 키는 화면 `buildCostSheetTable` 이 심는 낱말과 같아야 한다.""" + return sheet_provenance( + [ + ColumnProvenance( + key="name", + label="비목", + tier=TIER_STANDARD, + formula="법이 정한 비목 이름 (차례도 법이 정함)", + source="법정경비 14 비목은 `B09_Estimation_Statutory.py:58 STATUTORY_ITEMS` " + "— 그 차례가 곧 원가계산서 줄 차례", + code="B09_Estimation_Engine_Cost.py:115 CostLine.name", + ), + ColumnProvenance( + key="amount_krw", + label="금액", + tier=TIER_CALC, + formula="밑수 × 요율% (+ 정액) 을 원 단위로 버림", + source="밑수는 비목마다 다름 — 「산출근거」 칸에 그 줄의 실제 밑수가 적힘. " + "버림은 `B09_Estimation_Engine_Cost.py:44 floor_won`", + rule="⚠ **총원가·도급금액·총계 줄은 `final`** — 계약으로 나가는 값이다. " + "등급이 열에 하나뿐이라 그 셋을 따로 못 적었다(PLAN 8-36 ①). " + "도급금액만 천원 단위 **올림**(`:49 ceil_thousand`)이라 끝자리가 다르다", + code="B09_Estimation_Engine_Cost.py:175 _emitter", + ), + ColumnProvenance( + key="rate_percent", + label="요율", + tier=TIER_STANDARD, + formula="공사금액·공사기간이 든 구간의 요율을 그대로 씀", + source=_RATE_SOURCE, + code="B09_Estimation_Rates.py:180 select_bracket", + ), + ColumnProvenance( + key="formula_text", + label="산출근거", + tier=TIER_CALC, + formula="그 줄이 실제로 쓴 밑수와 요율을 사람이 읽게 적은 한 줄", + source="엔진이 셈하면서 같이 지음 — 화면이 따로 짓지 않는다", + rule="⚠ **산업안전보건관리비만 「× %」 꼴이 아니다** — A(요율식)·B(대상액×1.2) " + "중 **작은 쪽**을 쓰므로 값 안에 고름이 숨어 있다" + "(`B09_Estimation_Statutory.py:154 safety_management_cost`)", + code="B09_Estimation_Engine_Cost.py:128 CostLine.formula_text", + ), + _note_column("B09_Estimation_Engine_Cost.py:125 CostLine.note"), + ] + ) + + +# ============================================================================= +# ② 설계내역서 +# ============================================================================= + + +def boq_sheet() -> dict[str, Any]: + return sheet_provenance( + [ + _label("item_no", "No.", "마스터 목차가 매긴 번호"), + _label("name", "공종", "B08 이 보낸 이름, 없으면 마스터 이름"), + ColumnProvenance( + key="spec", + label="규격", + tier=TIER_STANDARD, + formula="마스터 규격 (갈래가 정해진 줄은 갈래 이름을 뒤에 이음)", + source="갈래를 어떻게 골랐는지는 그 줄의 사유에 적힘 — B08 문구를 그대로 옮김", + code="B09_Estimation_BillOfQuantities_Rows.py:149", + ), + _label("unit", "단위"), + ColumnProvenance( + key="quantity", + label="수량", + tier=TIER_SURVEY, + formula="B08 이 보낸 값을 그대로 씀 (여기서 다시 곱하지 않음)", + source="⚠ **반영률은 B08 이 이미 곱했다** — 여기서 또 곱하면 두 번 곱해진다. " + "찍는 자리수는 품셈 1-2-2 종목별(`B09_Estimation_QuantityDigits.py`)이고 " + "값 자체는 전정밀로 남는다", + code="B09_Estimation_BillOfQuantities_Rows.py:151", + ), + ColumnProvenance( + key="unit_price_krw", + label="단가", + tier=TIER_CALC, + formula="그 공종의 일위대가 본표 합계 (1단위 값)", + source="일위대가 탭에서 같은 표를 그대로 봄. 묶음 줄은 조각들의 " + "`단가 × 조각수량` 을 더한 값", + rule="⚠ **못 세우면 0 으로 때우지 않고 비운다.** 일위대가가 없음·성분이 빠짐·" + "밑수를 모름·일부만 섬·단위가 안 맞음 — 사유는 그 줄의 사유에 적히고 " + "「금액을 못 세운 줄」 목록에도 오른다", + code="B09_Estimation_BillOfQuantities_Rows.py:134 _leaf_row", + ), + ColumnProvenance( + key="amount_krw", + label="금액", + tier=TIER_FINAL, + formula="수량 × 단가", + source="이 값들의 합이 공사원가계산서의 직접비로 나간다 — 화면 밖으로 나가는 값", + rule="단가가 안 선 줄은 **금액도 안 세운다**. 단위가 안 맞는 줄도 비운다 — " + "곱하면 조용히 틀린 금액이 내역서에 든다", + code="B09_Estimation_BillOfQuantities_Rows.py:134 _leaf_row", + ), + _note_column("B09_Estimation_BillOfQuantities.py:BillRow.note"), + ] + ) + + +# ============================================================================= +# ③ 일위대가 +# ============================================================================= + + +def unit_price_list_sheet() -> dict[str, Any]: + """목록표 — 「무엇이 있나」.""" + common = "단가판(`PriceBook`)이 성분을 풀어 낸 값 — 본표를 열면 줄마다 보인다" + return sheet_provenance( + [ + _label("name", "명칭", "단가판 제목"), + _label("unit", "단위", "단가판 기준 단위"), + ColumnProvenance( + key="material", + label="재료비", + tier=TIER_CALC, + formula="본표 재료비 줄의 합", + source=common, + code="B09_Estimation_UnitPrice_View.py:149 list_unit_prices", + ), + ColumnProvenance( + key="labor", + label="노무비", + tier=TIER_CALC, + formula="본표 노무비 줄의 합", + source=common, + code="B09_Estimation_UnitPrice_View.py:149 list_unit_prices", + ), + ColumnProvenance( + key="expense", + label="경비", + tier=TIER_CALC, + formula="본표 경비 줄의 합", + source=common, + code="B09_Estimation_UnitPrice_View.py:149 list_unit_prices", + ), + ColumnProvenance( + key="total", + label="합계", + tier=TIER_CALC, + formula="재료비 + 노무비 + 경비", + source=common, + code="B09_Estimation_UnitPrice_View.py:149 list_unit_prices", + ), + ] + ) + + +def unit_price_detail_sheet() -> dict[str, Any]: + """본표 — 「무엇으로 이루어졌나」.""" + money = ( + "성분 단위값 × 수량을 성분별로 자른 값. ⚠ 행마다 자르므로 **전정밀 합과 끝자리가 " + "어긋난다 — 정상이다.** 숨기면 나중에 「합계가 안 맞는다」며 계산을 고치려 든다" + ) + return sheet_provenance( + [ + _label("name", "명칭", "성분 이름. 제잡비·공구손료는 품셈 [주]가 만든 줄"), + _label("spec", "규격", "성분 규격. 비율 줄은 「노무비의 N%」 꼴"), + ColumnProvenance( + key="source", + label="원천", + tier=TIER_STANDARD, + formula="그 성분이 어느 판에서 왔는지 + 그 판에서의 순번", + source="자재 · 노임 · 기계경비 · 일위대가 · 단가산출 · 일식견적 여섯 중 하나" + "(`B09_Estimation_UnitPrice.py:1026 SOURCE_LABEL`)", + rule="기계경비·일위대가·단가산출 줄은 **눌러서 한 층 아래로 내려갈 수 있다**" + "(`:1037 DRILLABLE_KINDS`)", + code="B09_Estimation_UnitPrice_View.py:257", + ), + _label("unit", "단위"), + ColumnProvenance( + key="quantity", + label="수량", + tier=TIER_STANDARD, + formula="품셈 표가 정한 1단위당 소요량", + source="비율 줄(제잡비·공구손료)은 수량 칸에 **퍼센트**가 들어간다", + code="B09_Estimation_UnitPrice_View.py:259", + ), + ColumnProvenance( + key="material", + label="재료비", + tier=TIER_CALC, + formula="성분 단위 재료비 × 수량", + source=money, + code="B09_Estimation_UnitPrice_View.py:264", + ), + ColumnProvenance( + key="labor", + label="노무비", + tier=TIER_CALC, + formula="성분 단위 노무비 × 수량", + source=money, + code="B09_Estimation_UnitPrice_View.py:265", + ), + ColumnProvenance( + key="expense", + label="경비", + tier=TIER_CALC, + formula="성분 단위 경비 × 수량", + source=money, + code="B09_Estimation_UnitPrice_View.py:266", + ), + ColumnProvenance( + key="total", + label="합계", + tier=TIER_CALC, + formula="자른 성분 셋을 더한 값 (표에서 합계 = 재료비+노무비+경비 가 서게)", + source=money, + code="B09_Estimation_UnitPrice_View.py:267", + ), + ] + ) + + +# ============================================================================= +# ④ 관급·사급 자재대 +# ============================================================================= + + +def _material_columns(*, excluded: bool) -> list[ColumnProvenance]: + """자재대 열 일곱. 「안 갈린 것」 표만 통째로 `excluded` 로 선다.""" + if excluded: + why = ( + "⚠ **관급·사급이 안 갈린 줄** — 어느 합계에도 넣지 않는다. 못 세운 것이 아니라 " + "**세면 안 되는** 자리다. 관급자재대에도 도급 재료비에도 넣으면 이중계상이 된다" + ) + return [ + ColumnProvenance( + key=key, + label=label, + tier=TIER_EXCLUDED, + source=why, + code="B09_Estimation_BillOfQuantities_Rows.py:398", + ) + for key, label in ( + ("name", "자재"), + ("spec", "규격"), + ("unit", "단위"), + ("total_amount", "수량"), + ("unit_price_krw", "단가"), + ("amount_krw", "금액"), + ("note", "비고"), + ) + ] + return [ + _label("name", "자재"), + _label("spec", "규격"), + _label("unit", "단위"), + ColumnProvenance( + key="total_amount", + label="수량", + tier=TIER_SURVEY, + formula="B08 이 낸 자재 수량 × 할증률", + source="할증 사유는 그 줄의 사유에 적힘. 할증률이 아직 없는 자재는 " + "**할증 전 값**으로 서고 그 사실이 표 밑에 뜬다", + code="B09_Estimation_MaterialSheet.py:47 MaterialSheetRow", + ), + ColumnProvenance( + key="unit_price_krw", + label="단가", + tier=TIER_STANDARD, + formula="단가판에서 찾은 값", + source="⚠ **관급과 사급은 원천이 다르다** — 관급은 나라장터, 사급은 물가지·견적. " + "관급을 「사급 단가 없음」으로 적으면 안 된다", + rule="못 찾으면 **0 으로 때우지 않고 비운다** — 사유가 그 줄에 적힌다", + code="B09_Estimation_MaterialSheet.py:117 build_material_sheet", + ), + ColumnProvenance( + key="amount_krw", + label="금액", + tier=TIER_FINAL, + formula="수량 × 단가", + source="⚠ **사급만 도급 재료비로 든다.** 관급은 총원가 **밖** 별도 표기라 " + "여기 합계가 원가계산서 재료비와 같지 않다", + code="B09_Estimation_MaterialSheet.py:117 build_material_sheet", + ), + _note_column("B09_Estimation_BillOfQuantities.py:BillRow.note"), + ] + + +# ============================================================================= +# ⑤ 중기목록표 · 기초자료 목록표 +# ============================================================================= + + +def machine_sheet() -> dict[str, Any]: + hourly = "시간당 사용료 — 「각종 중기경비계산서」에 셈 과정이 그대로 펼쳐진다" + return sheet_provenance( + [ + _label("code", "코드번호"), + _label("name", "명 칭"), + _label("spec", "규 격"), + _label("unit", "단위"), + ColumnProvenance( + key="total_krw", + label="합 계", + tier=TIER_CALC, + formula="노무비 + 재료비 + 경비", + source=hourly, + code="B09_Estimation_Lists.py:105 machine_list", + ), + ColumnProvenance( + key="labor_krw", + label="노 무 비", + tier=TIER_CALC, + formula="조종원 노임 ÷ 8시간 × 16/12 × 25/20 (약 1.667배)", + source="공표 노임은 기본급여액뿐이라 제수당·상여금·퇴직급여충당금을 따로 " + "계상함(건협 임금적용요령 4-나 · 기재부 집행기준 제76조의3). " + "⚠ 계수 자체의 예규 원문은 아직 못 봐 실무 관행을 따름", + code="B09_Estimation_MachineCost.py:74 OPERATOR_ALLOWANCE_FACTOR", + ), + ColumnProvenance( + key="material_krw", + label="재 료 비", + tier=TIER_CALC, + formula="주연료(L/hr) × 유가 + 잡재료(주연료의 %)", + source="유가는 전국 또는 고른 시도의 공시가 — 기초자료 탭에서 고른다. " + "잡재료는 연료 소요량에 포함되어 있어 따로 세지 않는다", + rule="같은 기종이라도 **조합 사용이면 잡재료가 16% 로 줄어** 재료비가 달라진다 " + "— 그래서 층이 따로 선다(건설품셈 제8장 [주]⑤)", + code="B09_Estimation_MachineExpenseSheet.py:81 machine_expense_sheets", + ), + ColumnProvenance( + key="expense_krw", + label="경 비", + tier=TIER_CALC, + formula="취득가격 × 손료계수(상각비 + 정비비 + 관리비, 10⁻⁷)", + source="취득가격·내용시간·연간표준가동시간·계수 셋은 모두 품셈 표 값", + code="B09_Estimation_MachineExpenseSheet.py:81 machine_expense_sheets", + ), + _note_column("B09_Estimation_Lists.py:105 machine_list"), + ] + ) + + +def catalog_sheet() -> dict[str, Any]: + """기초자료 탭의 목록표 셋(노무비·재료비·경비)이 같이 쓰는 사전.""" + return sheet_provenance( + [ + _label("code", "코드번호"), + _label("name", "명 칭"), + _label("spec", "규 격"), + _label("unit", "단위"), + ColumnProvenance( + key="unit_price_krw", + label="단 가", + tier=TIER_STANDARD, + formula="단가판 값을 그대로 옮김 (여기서 셈하지 않음)", + source="어느 판·어느 기준일인지는 산출기초 ① 에 지문까지 남음. " + "⚠ 경비목록표의 값은 **기계 취득가격(천원)** 이고 시간당 사용료가 아니다", + rule="자재단가대비표에서 **원천 다섯 중 하나를 골라** 적용 단가가 선다 — " + "값 안에 고름이 숨은 자리(PLAN 8-36 ㉯)", + code="B09_Estimation_Lists.py:50 catalog_list", + ), + _note_column("B09_Estimation_Lists.py:50 catalog_list"), + ] + ) + + +# ============================================================================= +# 응답에 싣기 +# ============================================================================= + + +def estimation_provenance() -> dict[str, Any] | None: + """B09 응답에 실을 사전 — **개발환경이 아니면 `None`.** + + 시트를 늘릴 때는 여기 한 줄만 더한다. 화면은 시트 이름으로 찾아 쓴다. + + ⚠ **일부러 안 붙인 둘** (2026-09-12 두 창 합의) + · **설계서 구성표** — 프로젝트가 낳은 값이 아니라 「무슨 문서를 낼 것인가」 목록이라 + 원천도 식도 없다. 없는 것을 지어 붙이면 「분류가 있다」는 거짓만 남는다(조사표 ㉴). + · **산출 조건(좌측 패널)** — 표가 아니라 입력 칸이고, 칸 밑 근거 한 줄이 이미 같은 + 일을 한다. 두 벌이 되면 어긋난다. + """ + return provenance_payload( + { + "cost_sheet": cost_sheet(), + "boq": boq_sheet(), + "unit_price_list": unit_price_list_sheet(), + "unit_price_detail": unit_price_detail_sheet(), + "material": sheet_provenance(_material_columns(excluded=False)), + "material_unknown": sheet_provenance(_material_columns(excluded=True)), + "machine": machine_sheet(), + "catalog": catalog_sheet(), + "material_comparison": material_comparison_sheet(), + "base_reference_labor": base_reference_labor_sheet(), + "base_reference_fuel": base_reference_fuel_sheet(), + "price_basis": price_basis_sheet(), + **basis_sheet_tables(), + } + ) diff --git a/B09_Estimation/B09_Estimation_Provenance_Common.py b/B09_Estimation/B09_Estimation_Provenance_Common.py new file mode 100644 index 00000000..6a6b5ddf --- /dev/null +++ b/B09_Estimation/B09_Estimation_Provenance_Common.py @@ -0,0 +1,53 @@ +"""B09 근거 사전이 **여러 장에서 같이 쓰는 조각** (PLAN 8-36 ④). + +왜 따로 두나 + 사전이 두 파일로 갈리면서(값을 낳는 장 / 바깥에서 오거나 모으는 장) 두 쪽이 같은 + 이름표 열과 같은 「비고」 설명을 쓴다. 한쪽에 두고 다른 쪽이 가져가면 **고리가 생겨** + (`Provenance` → `Provenance_Sources` → `Provenance`) 불러들이지 못한다. + 그래서 두 쪽이 함께 바라보는 자리를 따로 뒀다. + +⚠ 여기에는 **여러 장이 실제로 같이 쓰는 것만** 둔다. 한 장만 쓰는 문장을 여기로 올리면 + 사전을 읽을 때 그 장에서 눈이 떠나 버린다. +""" + +from __future__ import annotations + +from common_util.common_util_provenance import ( + TIER_STANDARD, + TIER_UNCLASSIFIED, + ColumnProvenance, +) + +#: 이름표 열(코드·명칭·규격·단위)이 공통으로 쓰는 문장. +CATALOG_SOURCE = "단가판·품셈 표의 이름을 그대로 옮긴 자리 — 여기서 짓지 않음" + +#: 「비고」가 왜 미분류인지 — 표마다 같은 말을 쓴다. +NOTE_RULE = ( + "이 칸은 등급을 붙일 열이 아니라 **다른 열의 사유를 담는 그릇**이다. " + "안에 든 조각마다 닿는 열이 다르므로(갈래 근거는 규격, 반영률은 수량, " + "막힘 사유는 단가) 호버는 조각을 그 열의 칸에만 띄운다" +) + + +def _label(key: str, label: str, extra: str = "") -> ColumnProvenance: + """이름표 열 — 값을 낳은 것이 아니라 옮겨 적은 자리.""" + return ColumnProvenance( + key=key, + label=label, + tier=TIER_STANDARD, + formula="옮겨 적은 값 (여기서 계산하지 않음)", + source=CATALOG_SOURCE + (f" · {extra}" if extra else ""), + ) + + +def _note_column(code: str) -> ColumnProvenance: + """「비고」 열 — 여덟 어디에도 안 맞아 `unclassified` 로 둔다(PLAN 8-36 ㉮).""" + return ColumnProvenance( + key="note", + label="비고", + tier=TIER_UNCLASSIFIED, + formula="줄에 달린 사유 조각을 차례로 이어 붙인 글", + source="조각마다 원천이 다름 — 조각별 원천은 그 조각이 닿는 열의 카드에 뜸", + rule=NOTE_RULE, + code=code, + ) diff --git a/B09_Estimation/B09_Estimation_Provenance_Sources.py b/B09_Estimation/B09_Estimation_Provenance_Sources.py new file mode 100644 index 00000000..22f685d0 --- /dev/null +++ b/B09_Estimation/B09_Estimation_Provenance_Sources.py @@ -0,0 +1,268 @@ +"""B09 **바깥에서 온 값**과 **모으는 표**의 근거 사전 (PLAN 8-36 ④). + +왜 파일을 갈랐나 + `B09_Estimation_Provenance.py` 가 700줄을 넘었다(CLAUDE.md 4장). 가르는 금은 + **값을 낳는 장**과 **값이 바깥에서 오거나 모으기만 하는 장**이다 — + · 저쪽: 원가계산서·내역서·일위대가·자재대·중기·기초자료 목록표 + · 이쪽: 자재단가대비표·환율및기초자료·단가산출근거·산출기초 + 이쪽 넷은 식이 얇거나 아예 없고, 대신 **「어느 판에서 왔나」**가 알맹이다. +""" + +from __future__ import annotations + +from typing import Any + +from common_util.common_util_provenance import ( + TIER_BLOCKED, + TIER_CALC, + TIER_INPUT, + TIER_STANDARD, + TIER_UNCLASSIFIED, + ColumnProvenance, + sheet_provenance, +) +from B09_Estimation.B09_Estimation_Provenance_Common import _label, _note_column + + +# ============================================================================= +# ⑥ 자재단가대비표 — **원천 다섯 중 하나를 고르는** 자리 +# ============================================================================= + + +def material_comparison_sheet() -> dict[str, Any]: + """실무 시트의 「기.가 · 유.물 · 견적」 약호가 곧 채택 근거다. + + ⚠ 원천 칸이 **여럿이라도 뜻은 하나**다(어느 판이 얼마라 했나). 슬롯마다 열 키를 + 따로 두면 사전이 다섯 벌이 되고 판이 늘 때마다 어긋난다 — 한 키를 나눠 쓴다. + """ + return sheet_provenance( + [ + _label("code", "코드번호"), + _label("name", "명 칭"), + _label("spec", "규 격"), + _label("unit", "단위"), + ColumnProvenance( + key="slot_price", + label="원천 단가", + tier=TIER_STANDARD, + formula="그 판이 적어 놓은 값을 그대로 옮김", + source="물가지·거래가격·업체 견적 등 판마다 다름 — 오른쪽 「페이지」 칸이 " + "어느 쪽에서 왔는지 가리킨다", + rule="⚠ **빈 칸은 「0원」이 아니라 「그 판에 그 품목이 없다」** — " + "0 으로 때우지 않는다", + code="B09_Estimation_Lists_Sources.py:79 material_price_comparison", + ), + ColumnProvenance( + key="slot_page", + label="페이지", + tier=TIER_STANDARD, + formula="그 값이 실린 쪽수·출처 표기", + source="실무 시트의 「기.가 1,024」 같은 약호 — 사람이 원문을 찾아갈 열쇠", + code="B09_Estimation_Lists_Sources.py:79 material_price_comparison", + ), + ColumnProvenance( + key="adopted_price_krw", + label="적 용", + tier=TIER_CALC, + formula="원천 다섯 중 **채택한 하나**의 값", + source="채택한 칸은 표에서 굵게 선다 — 표가 스스로 「어느 값을 썼나」를 밝힌다", + rule="⚠ **값 안에 고름이 숨은 열**(PLAN 8-36 ㉯). 실무 약호가 곧 채택 규칙이다 " + "— 「기.가」(정부 기준가격) · 「유.물」(물가정보) · 「견적」(업체). " + "슬롯 6 이 곧 적용 단가라 그 자리에 값이 서면 「적용」 칸을 따로 안 세운다", + code="B09_Estimation_Lists_Sources.py:79 material_price_comparison", + ), + _note_column("B09_Estimation_Lists_Sources.py:79"), + ] + ) + + +# ============================================================================= +# ⑦ 환율및기초자료 — **바깥에서 온 값**과 **우리가 고른 것**이 갈리는 장 +# ============================================================================= + + +def base_reference_labor_sheet() -> dict[str, Any]: + """② 인건비 — 공표 노임을 시간당으로 푼 표.""" + return sheet_provenance( + [ + _label("code", "코드번호"), + _label("name", "직 종"), + ColumnProvenance( + key="day_wage_krw", + label="일 당", + tier=TIER_STANDARD, + formula="공표 노임을 그대로 옮김", + source="대한건설협회 시중노임 공표값. ⚠ **기본급여액뿐**이라 제수당·상여금·" + "퇴직급여충당금은 따로 계상해야 한다", + rule="표본이 얇은 직종(조사현장 5곳 미만 `*` · 미조사 `**`)은 금액은 서되 " + "그 사실을 화면이 따로 알린다", + code="B09_Estimation_Lists_Sources.py:137 base_reference_data", + ), + ColumnProvenance( + key="hourly_krw", + label="시간당", + tier=TIER_CALC, + formula="일당 ÷ 8시간", + source="⚠ **나눈 값을 자르지 않고 그대로 둔다** — 여기서 원 단위로 자르면 " + "기계 시간당 사용료가 조금씩 어긋난다. 자르는 자리는 일위대가·내역서 쪽", + code="B09_Estimation_Lists_Sources.py:137 base_reference_data", + ), + ColumnProvenance( + key="formula", + label="산 식", + tier=TIER_CALC, + formula="그 줄이 실제로 쓴 셈을 사람이 읽게 적은 한 줄", + source="서버가 값과 같이 지음 — 화면이 따로 짓지 않는다", + code="B09_Estimation_Lists_Sources.py:137 base_reference_data", + ), + ] + ) + + +def base_reference_fuel_sheet() -> dict[str, Any]: + """③ 단가 및 재료비 — 유가 한 줄. 지역을 고르면 기계 연료비가 다시 선다.""" + return sheet_provenance( + [ + _label("item", "항 목"), + ColumnProvenance( + key="price_krw", + label="단 가", + tier=TIER_STANDARD, + formula="공시가를 그대로 옮김 (전국 또는 고른 시도)", + source="한국석유공사 공시가. 이 값이 바뀌면 **기계 연료비가 통째로 다시 선다**", + code="B09_Estimation_Lists_Sources.py:137 base_reference_data", + ), + ColumnProvenance( + key="scope", + label="적용 범위", + tier=TIER_INPUT, + formula="사용자가 고른 유가 범위 (전국 공시가 또는 현장 시도)", + source="안 고르면 전국 공시가로 선다 — 고른 적이 없다는 뜻이지 " + "「전국이 맞다」는 뜻이 아니다", + rule="⚠ **자료가 없는 시도는 고를 수 없게 둔다.** 고르게만 해 두고 값이 없으면 " + "조용히 틀린 값이 선다", + code="B09_Estimation_Lists_Sources.py:44 fuel_scopes", + ), + ColumnProvenance( + key="effective_date", + label="기준일", + tier=TIER_STANDARD, + formula="그 공시가의 기준일", + source="어느 판으로 섰는지는 산출기초 ① 에 지문까지 남는다", + code="B09_Estimation_Lists_Sources.py:137 base_reference_data", + ), + _label("dataset_id", "자료", "판 이름 — 산출기초 ① 의 같은 낱말"), + ] + ) + + +# ============================================================================= +# ⑧ 모으는 표 둘 — **값을 낳지 않는다.** 식은 비우고 「어디서 왔나」만 적는다 +# ============================================================================= + + +def price_basis_sheet() -> dict[str, Any]: + """단가산출근거 목록 — 내역서 줄의 단가가 어느 일위대가에서 왔는지. + + ⚠ **여기서 값을 다시 셈하지 않는다.** 그래서 `formula` 를 비웠다 — 없는 식을 + 지어 적으면 읽는 사람이 「여기서 계산한다」고 잘못 읽는다. + """ + return sheet_provenance( + [ + ColumnProvenance( + key="number", + label="번호", + tier=TIER_STANDARD, + source="내역서에 **쓰인 차례**대로 매긴 번호 — 실무 참조번호(「단산 46」)가 " + "곧 이 번호다", + code="B09_Estimation_PriceBasis.py:74 build_price_basis", + ), + _label("name", "공종", "공종 이름 + 규격"), + _label("unit", "단위"), + ColumnProvenance( + key="unit_price_krw", + label="단가", + tier=TIER_CALC, + source="한 층 아래 일위대가 본표의 합계를 **그대로 옮긴 값** — 그 표는 " + "일위대가 탭에서 본다(본문 「참조」가 그 코드를 가리킨다)", + code="B09_Estimation_PriceBasis.py:74 build_price_basis", + ), + ] + ) + + +def basis_sheet_tables() -> dict[str, dict[str, Any]]: + """산출기초 네 표. **모으기만 하는 장**이라 식이 없다. + + ⚠ 이 장이 답하는 물음은 「이 값이 얼마인가」가 아니라 **「어느 판·어느 근거로 + 섰나」** 다. 그래서 `source` 와 등급만 채운다. + """ + versions = sheet_provenance( + [ + _label("dataset_id", "자료", "판 이름"), + _label("file", "파일", "그 판의 파일 이름"), + ColumnProvenance( + key="effective_date", + label="기준일", + tier=TIER_STANDARD, + source="그 판이 언제 것인가 — 값이 달라졌을 때 가장 먼저 보는 자리", + code="B09_Estimation_BasisSheet.py:44 dataset_versions", + ), + ColumnProvenance( + key="sha256", + label="지문(앞 12)", + tier=TIER_UNCLASSIFIED, + source="파일 해시. 값도 근거도 아니고 **재현성 표식**이라 여섯 어디에도 " + "안 맞는다(PLAN 8-36 ㉰). 「같은 판으로 다시 세웠나」를 가르는 데만 쓴다", + code="B09_Estimation_BasisSheet.py:44 dataset_versions", + ), + ] + ) + chosen = sheet_provenance( + [ + _label("item", "항 목", "고를 수 있는 자리의 이름"), + ColumnProvenance( + key="value", + label="고른 값", + tier=TIER_INPUT, + source="사용자가 산출 조건에서 고른 값 — 비어 있으면 **고른 적이 없어 " + "확정 기본값으로 돌고 있다**는 뜻이다", + code="B09_Estimation_BasisSheet.py:77 chosen_conditions", + ), + ] + ) + items = sheet_provenance( + [ + _label("code", "코드"), + _label("name", "공 종"), + _label("unit", "단위"), + ColumnProvenance( + key="notes", + label="근 거", + tier=TIER_STANDARD, + source="그 공종의 단가가 **어느 품셈 표·어느 [주]** 를 따랐는지. 줄에 달린 " + "근거를 모아 온 것이라 여기서 새로 짓지 않는다", + code="B09_Estimation_BasisSheet.py:106 work_item_basis", + ), + ] + ) + gaps = sheet_provenance( + [ + _label("kind", "갈 래", "못 채운 사유의 갈래"), + _label("code", "코드"), + ColumnProvenance( + key="reason", + label="사 유", + tier=TIER_BLOCKED, + source="⚠ **0 으로 때우지 않고 남겨 둔 자리.** 근거가 오면 채워질 자리이지 " + "「세면 안 되는 자리」가 아니다", + code="B09_Estimation_BasisSheet.py:134 open_gaps", + ), + ] + ) + return { + "basis_versions": versions, + "basis_chosen": chosen, + "basis_items": items, + "basis_gaps": gaps, + } diff --git a/B09_Estimation/B09_Estimation_Router.py b/B09_Estimation/B09_Estimation_Router.py index cfc9e431..8b93f3fd 100644 --- a/B09_Estimation/B09_Estimation_Router.py +++ b/B09_Estimation/B09_Estimation_Router.py @@ -28,6 +28,7 @@ from B09_Estimation.B09_Estimation_Engine_Cost import ( proposed_profit_adjustment, ) from B09_Estimation.B09_Estimation_PriceBook import PriceBookError +from B09_Estimation.B09_Estimation_Provenance import estimation_provenance from B09_Estimation.B09_Estimation_BillOfQuantities import bill_summary, build_bill from B09_Estimation.B09_Estimation_Guards import DoubleCountError from B09_Estimation.B09_Estimation_Rates import RateLookupError @@ -47,6 +48,18 @@ logger = logging.getLogger(__name__) router = APIRouter(prefix="/api/projects", tags=["B09 Estimation"]) +def _with_provenance(body: dict[str, Any]) -> dict[str, Any]: + """근거 사전을 응답에 얹는다 — **개발환경이 아니면 칸 자체를 안 만든다.** + + ⚠ 빈 dict 를 실으면 화면이 「사전이 있는데 비었다」로 읽어 빈 카드를 띄운다. + 그래서 `None` 이면 **키를 넣지 않는다**(로직 보안의 문은 서버 쪽 하나뿐이다). + """ + provenance = estimation_provenance() + if provenance is not None: + body["provenance"] = provenance + return body + + class CostRequest(BaseModel): """원가계산 입력 — 금액은 원 단위.""" @@ -176,7 +189,7 @@ async def compute_cost(project_id: UUID, payload: CostRequest) -> JSONResponse: body["suggested_profit_adjustment_krw"] = str( proposed_profit_adjustment(result, payload.target_contract_amount_krw) ) - return JSONResponse(content={"status": "success", **body}) + return JSONResponse(content=_with_provenance({"status": "success", **body})) @router.get("/{project_id}/estimation/items") @@ -203,11 +216,13 @@ async def list_unit_price_titles(project_id: UUID) -> JSONResponse: try: build = await _build_for(project_id) return JSONResponse( - content={ - "status": "success", - "summary": build_summary(build), - "rows": list_unit_prices(build), - } + content=_with_provenance( + { + "status": "success", + "summary": build_summary(build), + "rows": list_unit_prices(build), + } + ) ) except Exception: logger.exception("B09 일위대가 목록 실패: project_id=%s", project_id) @@ -274,7 +289,9 @@ async def get_base_data_lists(project_id: UUID) -> JSONResponse: try: return JSONResponse( - content={"status": "success", **all_lists(await _build_for(project_id))} + content=_with_provenance( + {"status": "success", **all_lists(await _build_for(project_id))} + ) ) except Exception: logger.exception("B09 기초자료 목록 실패: project_id=%s", project_id) @@ -303,13 +320,15 @@ async def get_price_sources(project_id: UUID) -> JSONResponse: root = await _project_root_of(project_id) settings = estimation_settings(root) if root else {} return JSONResponse( - content={ - "status": "success", - "material_comparison": material_price_comparison(build), - "base_reference": base_reference_data( - build, str(settings.get("fuel_region") or "") or None - ), - } + content=_with_provenance( + { + "status": "success", + "material_comparison": material_price_comparison(build), + "base_reference": base_reference_data( + build, str(settings.get("fuel_region") or "") or None + ), + } + ) ) except Exception: logger.exception("B09 단가 원천 표 실패: project_id=%s", project_id) @@ -332,7 +351,9 @@ async def get_basis_sheet(project_id: UUID) -> JSONResponse: build = await _build_for(project_id) root = await _project_root_of(project_id) settings = estimation_settings(root) if root else {} - return JSONResponse(content={"status": "success", **basis_sheet(build, settings)}) + return JSONResponse( + content=_with_provenance({"status": "success", **basis_sheet(build, settings)}) + ) except Exception: logger.exception("B09 산출기초 실패: project_id=%s", project_id) return JSONResponse( @@ -689,7 +710,9 @@ async def get_unit_price_detail(project_id: UUID, code: str) -> JSONResponse: """일위대가 **본표** — 「무엇으로 이루어졌나」. 줄마다 원천·파고들기 표시가 붙는다.""" try: return JSONResponse( - content={"status": "success", **detail_of(await _build_for(project_id), code)} + content=_with_provenance( + {"status": "success", **detail_of(await _build_for(project_id), code)} + ) ) except PriceBookError as error: return JSONResponse(status_code=404, content={"status": "error", "message": str(error)}) @@ -759,14 +782,18 @@ async def get_bill(project_id: UUID) -> JSONResponse: ) return JSONResponse( - content={ - "status": "success", - "rows": [row.as_dict() for row in result.rows], - "excluded": [row.as_dict() for row in result.excluded], - "materials": [row.as_dict() for row in result.material_rows], - "summary": bill_summary(result), - "price_basis": result.price_basis.as_dict() if result.price_basis else {"entries": []}, - } + content=_with_provenance( + { + "status": "success", + "rows": [row.as_dict() for row in result.rows], + "excluded": [row.as_dict() for row in result.excluded], + "materials": [row.as_dict() for row in result.material_rows], + "summary": bill_summary(result), + "price_basis": ( + result.price_basis.as_dict() if result.price_basis else {"entries": []} + ), + } + ) ) diff --git a/B09_Estimation/B09_Estimation_UI_BaseData.ts b/B09_Estimation/B09_Estimation_UI_BaseData.ts index 5f88db88..c23cac17 100644 --- a/B09_Estimation/B09_Estimation_UI_BaseData.ts +++ b/B09_Estimation/B09_Estimation_UI_BaseData.ts @@ -13,6 +13,12 @@ * ========================================================================== */ import { ui_locales, currentLanguageIndex } from "@ui/ui_template_locale"; +import { + attachProvenance, + markProvenanceCell, + type ProvenancePayload, + type ProvenanceSheet, +} from "@ui/ui_template_provenance"; import { API_BASE_URL } from "@config/config_frontend"; function L(key: keyof typeof ui_locales): string { @@ -48,6 +54,8 @@ export interface BaseDataDto { material: BaseDataRow[]; expense: BaseDataRow[]; machine: MachineRow[]; + /** 근거 사전 — **개발환경에서만** 온다. 없으면 호버·등급색이 통째로 안 붙는다. */ + provenance?: ProvenancePayload; } export async function fetchBaseData(projectId: string): Promise { @@ -80,7 +88,19 @@ function note(text: string): HTMLElement { return el; } -function table(headers: string[], rows: string[][], leftCols: number[]): HTMLElement { +/** + * 표 한 장. + * + * `keys`·`sheet` 를 함께 주면 칸마다 근거 호버가 붙는다 — **사전이 없으면 아무 일도 + * 안 한다**(빈 카드를 띄우면 「설명이 있다」는 거짓만 남는다). 안 주는 표는 종전 그대로다. + */ +function table( + headers: string[], + rows: string[][], + leftCols: number[], + keys?: string[], + sheet?: ProvenanceSheet, +): HTMLElement { const el = document.createElement("table"); el.className = "b09-sheet"; const thead = document.createElement("thead"); @@ -99,16 +119,20 @@ function table(headers: string[], rows: string[][], leftCols: number[]): HTMLEle const td = document.createElement("td"); td.textContent = text; if (leftCols.includes(index)) td.className = "b09-left"; + const key = keys?.[index]; + const column = key ? sheet?.columns[key] : undefined; + if (key && column) markProvenanceCell(td, key, column.tier); tr.append(td); }); tbody.append(tr); } el.append(thead, tbody); + attachProvenance(el, sheet); return el; } /** 목록표 한 장 — 코드·명칭·규격·단위·단가·비고 (실무 시트와 같은 칸). */ -function catalogTable(rows: BaseDataRow[]): HTMLElement { +function catalogTable(rows: BaseDataRow[], sheet?: ProvenanceSheet): HTMLElement { return table( ["코드번호", "명 칭", "규 격", "단위", "단 가", "비 고"], rows.map((row) => [ @@ -120,6 +144,8 @@ function catalogTable(rows: BaseDataRow[]): HTMLElement { row.note, ]), [0, 1, 2, 5], + ["code", "name", "spec", "unit", "unit_price_krw", "note"], + sheet, ); } @@ -148,7 +174,7 @@ export function drawBaseDataTab(body: HTMLElement, data: BaseDataDto): void { body.append(note("아직 선 줄이 없습니다 — 값을 0 으로 채우지 않습니다.")); continue; } - body.append(catalogTable(rows)); + body.append(catalogTable(rows, data.provenance?.sheets?.catalog)); } } @@ -174,6 +200,18 @@ export function drawMachineTab(body: HTMLElement, data: BaseDataDto): void { row.note, ]), [0, 1, 2, 8], + [ + "code", + "name", + "spec", + "unit", + "total_krw", + "labor_krw", + "material_krw", + "expense_krw", + "note", + ], + data.provenance?.sheets?.machine, ), ); // ⚠ 계산 과정을 감추지 않는다(PLAN 8-13). 조종원 환산이 실무와 다른 것을 여기서 밝힌다. @@ -364,6 +402,7 @@ export function drawMachineExpense(body: HTMLElement, data: MachineExpenseDto): export interface BasisSheetDto { status: string; + provenance?: ProvenancePayload; note: string; summary: string; dataset_versions: Array<{ @@ -402,6 +441,8 @@ export function drawBasisSheet(body: HTMLElement, data: BasisSheetDto): void { row.sha256 || "—", ]), [0, 1, 2, 3], + ["dataset_id", "file", "effective_date", "sha256"], + data.provenance?.sheets?.basis_versions, ), ); @@ -414,6 +455,8 @@ export function drawBasisSheet(body: HTMLElement, data: BasisSheetDto): void { ["항 목", "고른 값"], data.chosen_conditions.map((row) => [row.item, row.value]), [0, 1], + ["item", "value"], + data.provenance?.sheets?.basis_chosen, ), ); } @@ -424,6 +467,8 @@ export function drawBasisSheet(body: HTMLElement, data: BasisSheetDto): void { ["코드", "공 종", "단위", "근 거"], data.work_items.map((row) => [row.code, row.name, row.unit, row.notes.join(" · ")]), [0, 1, 2, 3], + ["code", "name", "unit", "notes"], + data.provenance?.sheets?.basis_items, ), ); @@ -436,6 +481,8 @@ export function drawBasisSheet(body: HTMLElement, data: BasisSheetDto): void { ["갈 래", "코드", "사 유"], data.gaps.map((row) => [row.kind, row.code, row.reason]), [0, 1, 2], + ["kind", "code", "reason"], + data.provenance?.sheets?.basis_gaps, ), ); body.append(note("⚠ 여기 있는 것은 0 으로 때우지 않고 남겨 둔 자리입니다.")); @@ -484,6 +531,7 @@ export interface FuelScope { export interface PriceSourcesDto { status: string; + provenance?: ProvenancePayload; material_comparison: { slot_names: string[]; rows: MaterialComparisonRow[]; @@ -530,7 +578,11 @@ export async function fetchPriceSources(projectId: string): Promise { + /** 칸 하나 — `key` 를 주면 근거 호버가 붙는다(사전에 없는 열은 아무 일도 안 한다). */ + const put2 = (td: HTMLElement, key: string, tier?: string): void => { + const column = sheet?.columns[key]; + if (column) markProvenanceCell(td, key, tier ?? column.tier); + }; + const put = (text: string, left = false, key?: string): void => { const td = document.createElement("td"); td.textContent = text; if (left) td.className = "b09-left"; + if (key) put2(td, key); tr.append(td); }; - put(row.code, true); - put(row.name, true); - put(row.spec, true); - put(row.unit); + put(row.code, true, "code"); + put(row.name, true, "name"); + put(row.spec, true, "spec"); + put(row.unit, false, "unit"); for (const slot of row.slots) { const td = document.createElement("td"); td.textContent = money(slot.price_krw); // 채택한 원천을 굵게 — 「어느 값을 썼나」를 표가 스스로 밝힌다. if (slot.adopted) td.style.fontWeight = "700"; + // ⚠ **빈 칸은 「0원」이 아니라 「그 판에 그 품목이 없다」** — 막힌 자리로 표시한다. + put2(td, "slot_price", slot.price_krw === null ? "blocked" : undefined); tr.append(td); const page = document.createElement("td"); page.textContent = slot.source_note; page.className = "b09-left"; + put2(page, "slot_page"); tr.append(page); } if (!appliedIsLastSlot) { - put(money(row.adopted_price_krw)); + put(money(row.adopted_price_krw), false, "adopted_price_krw"); put(row.adopted_slot ? (row.slots[row.adopted_slot - 1]?.name ?? "") : "", true); } - put(row.note, true); + put(row.note, true, "note"); tbody.append(tr); } el.append(thead, tbody); + attachProvenance(el, sheet); return el; } @@ -609,6 +671,8 @@ function baseReferenceSections( data: PriceSourcesDto["base_reference"], projectId: string, reload: () => void, + laborSheet?: ProvenanceSheet, + fuelSheet?: ProvenanceSheet, ): void { body.append(head("환율및기초자료 — ① 환율")); body.append(note(data.exchange.note)); @@ -628,6 +692,8 @@ function baseReferenceSections( row.formula, ]), [0, 1, 4], + ["code", "name", "day_wage_krw", "hourly_krw", "formula"], + laborSheet, ), ); } @@ -655,6 +721,8 @@ function baseReferenceSections( ], ], [0, 2, 3, 4], + ["item", "price_krw", "scope", "effective_date", "dataset_id"], + fuelSheet, ), ); @@ -727,11 +795,24 @@ export function drawPriceSourcesSections( if (comparison.rows.length === 0) { body.append(note("아직 선 줄이 없습니다 — 값을 0 으로 채우지 않습니다.")); } else { - body.append(comparisonTable(comparison.slot_names, comparison.rows)); + body.append( + comparisonTable( + comparison.slot_names, + comparison.rows, + data.provenance?.sheets?.material_comparison, + ), + ); } for (const text of comparison.notes) body.append(note(text)); - baseReferenceSections(body, data.base_reference, projectId, reload); + baseReferenceSections( + body, + data.base_reference, + projectId, + reload, + data.provenance?.sheets?.base_reference_labor, + data.provenance?.sheets?.base_reference_fuel, + ); } /** 두 표를 아직 못 받아왔을 때 — 화면을 비우지 않는다. */ diff --git a/B09_Estimation/B09_Estimation_UI_Page.ts b/B09_Estimation/B09_Estimation_UI_Page.ts index 766587b8..984a7b14 100644 --- a/B09_Estimation/B09_Estimation_UI_Page.ts +++ b/B09_Estimation/B09_Estimation_UI_Page.ts @@ -16,6 +16,14 @@ import { ui_locales, currentLanguageIndex } from "@ui/ui_template_locale"; import { createButton, createInputField, showToast } from "@ui/ui_template_elements"; import { createWorkflowLayout } from "@ui/ui_template_workflow_layout"; +import { attachCollapsible } from "@ui/ui_template_collapsible"; +import { + attachProvenance, + createProvenanceToggle, + markProvenanceCell, + type ProvenancePayload, + type ProvenanceSheet, +} from "@ui/ui_template_provenance"; import { drawBaseDataTab, drawFactorChoices, @@ -71,6 +79,8 @@ interface CostSheetDto { rate_version: { dataset_id: string; effective_date: string; sha256: string }; notes: string[]; suggested_profit_adjustment_krw?: string; + /** 근거 사전 — **개발환경에서만** 온다. 없으면 호버·등급색이 통째로 안 붙는다. */ + provenance?: ProvenancePayload; } interface UnitPriceRow { @@ -95,6 +105,7 @@ interface UnitPriceListDto { labor_reliability: Array<{ code: string; name: string; flag: string; why: string }>; }; rows: UnitPriceRow[]; + provenance?: ProvenancePayload; } interface UnitPriceDetailRow extends UnitPriceRow { @@ -119,6 +130,7 @@ interface UnitPriceDetailDto { expense: string; total: string; sum_matches: boolean; + provenance?: ProvenancePayload; /** 품셈 표에 있는데 아직 안 붙은 줄 — 있으면 이 단가는 **붙은 줄만의 값**이다. */ unattached: string[]; unattached_note: string; @@ -175,6 +187,14 @@ function injectStyles(): void { style.textContent = ` .b09-panel { display: flex; flex-direction: column; gap: var(--space-md, 12px); } .b09-panel__group { display: flex; flex-direction: column; gap: var(--space-xs, 4px); } +/* 좌측 패널 상자 — B04~B07 과 같은 꼴(테두리는 공용 .ui-sidebar-section 이 전담). + .ui-sidebar-section 이 붙은 것만 집어 본문 기초자료 표의 같은 클래스는 안 건드린다. */ +.b09-panel__group.ui-sidebar-section { + margin: 0; + padding: calc(var(--spacing-8) + var(--spacing-4)); + border-radius: var(--radius-cards); + background-color: var(--color-surface-raised); +} .b09-panel__legend { font-size: var(--font-size-xs, 12px); letter-spacing: .06em; color: var(--color-text-secondary); text-transform: uppercase; @@ -184,7 +204,6 @@ function injectStyles(): void { display: flex; justify-content: space-between; gap: var(--space-sm, 8px); border-bottom: 1px solid var(--color-border); padding: 2px 0; } -.b09-panel__actions { display: flex; gap: var(--space-xs, 4px); margin-top: var(--space-sm, 8px); } .b09-hint { font-size: var(--font-size-xs, 12px); color: var(--color-text-secondary); } /* 표본이 얇은 노임 — 막는 것이 아니라 눈에 띄기만 하면 된다. */ .b09-hint--warn { color: var(--color-warning-text, #8a5a00); } @@ -239,7 +258,37 @@ function formatWon(value: string): string { return n.toLocaleString("ko-KR"); } +/** + * 줄 사유 조각을 줄에 실어 둔다 — 카드가 꺼내 쓴다. + * + * ⚠ 조각마다 **닿는 열**이 함께 온다. 줄에 달렸다고 모든 칸에 띄우면 + * 「금액」 카드에 「갈래 근거…」 가 떠서 읽는 사람을 속인다(2026-09-12 B08 실측). + */ +function stashRowNotes(tr: HTMLElement, notes?: Array<{ column: string; text: string }>): void { + if (notes?.length) tr.dataset.provNotes = JSON.stringify(notes); +} + +/** 그 칸에 **닿는** 줄 사유만 돌려준다. 열 키가 빈 조각은 줄 전체에 걸리는 사유다. */ +function rowNotesFor(cell: HTMLElement, columnKey: string): string[] { + const raw = cell.closest("tr")?.dataset.provNotes; + if (!raw) return []; + try { + return (JSON.parse(raw) as Array<{ column: string; text: string }>) + .filter((note) => note.column === "" || note.column === columnKey) + .map((note) => note.text); + } catch { + return []; + } +} + +/** 칸에 열 키·등급을 심는다 — **사전에 없는 열은 아무 일도 안 한다**(빈 카드 방지). */ +function mark(cell: HTMLElement, sheet: ProvenanceSheet | undefined, columnKey: string): void { + const column = sheet?.columns[columnKey]; + if (column) markProvenanceCell(cell, columnKey, column.tier); +} + function buildCostSheetTable(sheet: CostSheetDto): HTMLElement { + const prov = sheet.provenance?.sheets?.cost_sheet; const wrap = document.createElement("div"); wrap.className = "b09-sheet"; @@ -287,11 +336,26 @@ function buildCostSheetTable(sheet: CostSheetDto): HTMLElement { note.className = "b09-left"; note.textContent = line.note; + mark(name, prov, "name"); + // ⚠ **같은 열 안에서 줄마다 등급이 갈리는 첫 자리.** 중간줄(간접노무비 따위)은 + // `calc` 인데 마지막줄 셋은 계약으로 나가는 `final` 이다. 열 사전은 등급이 하나뿐이라 + // 여기서 칸에 덮어 심는다 — 나머지 칸은 생략해 열 등급을 그대로 물려받는다. + const isFinalLine = + line.key === "total_cost" || line.key === "contract_amount" || line.key === "grand_total"; + const amountColumn = prov?.columns.amount_krw; + // 등급을 빼면 공용 쪽이 열 등급으로 채워 주지만, **여기서 명시**해 두면 그 채움이 + // 없는 판에서도 띠 색이 제대로 붙는다. + if (amountColumn) + markProvenanceCell(amount, "amount_krw", isFinalLine ? "final" : amountColumn.tier); + mark(rate, prov, "rate_percent"); + mark(basis, prov, "formula_text"); + mark(note, prov, "note"); tr.append(name, amount, rate, basis, note); tbody.append(tr); } table.append(tbody); wrap.append(table); + attachProvenance(wrap, prov); return wrap; } @@ -303,6 +367,7 @@ function buildUnitPriceList( ): HTMLElement { const wrap = document.createElement("div"); wrap.className = "b09-sheet b09-up-list"; + const prov = list.provenance?.sheets?.unit_price_list; const caption = document.createElement("div"); caption.className = "b09-hint"; @@ -341,16 +406,21 @@ function buildUnitPriceList( const unit = document.createElement("td"); unit.className = "b09-left"; unit.textContent = row.unit; + mark(name, prov, "name"); + mark(unit, prov, "unit"); tr.append(name, unit); - for (const value of [row.material, row.labor, row.expense, row.total]) { + const moneyKeys = ["material", "labor", "expense", "total"]; + [row.material, row.labor, row.expense, row.total].forEach((value, index) => { const cell = document.createElement("td"); cell.textContent = formatWon(value); + mark(cell, prov, moneyKeys[index]); tr.append(cell); - } + }); body.append(tr); } table.append(body); wrap.append(table); + attachProvenance(wrap, prov); return wrap; } @@ -361,6 +431,7 @@ function buildUnitPriceDetail( ): HTMLElement { const wrap = document.createElement("div"); wrap.className = "b09-sheet b09-up-detail"; + const prov = detail.provenance?.sheets?.unit_price_detail; const caption = document.createElement("div"); caption.className = "b09-hint"; @@ -433,12 +504,18 @@ function buildUnitPriceDetail( const unit = document.createElement("td"); unit.className = "b09-left"; unit.textContent = row.unit; + mark(name, prov, "name"); + mark(spec, prov, "spec"); + mark(source, prov, "source"); + mark(unit, prov, "unit"); tr.append(name, spec, source, unit); - for (const value of [row.quantity, row.material, row.labor, row.expense, row.total]) { + const detailKeys = ["quantity", "material", "labor", "expense", "total"]; + [row.quantity, row.material, row.labor, row.expense, row.total].forEach((value, index) => { const cell = document.createElement("td"); cell.textContent = formatWon(value); + mark(cell, prov, detailKeys[index]); tr.append(cell); - } + }); body.append(tr); } @@ -458,6 +535,7 @@ function buildUnitPriceDetail( table.append(body); wrap.append(table); + attachProvenance(wrap, prov); return wrap; } @@ -483,10 +561,10 @@ function buildSidePanel( legendKey: keyof typeof ui_locales, fields: Array<[keyof CostFormState, keyof typeof ui_locales]>, ): void => { - const group = document.createElement("div"); - group.className = "b09-panel__group"; + const group = document.createElement("section"); + group.className = "b09-panel__group ui-collapsible ui-sidebar-section"; const legend = document.createElement("span"); - legend.className = "b09-panel__legend"; + legend.className = "b09-panel__legend ui-collapsible__title"; legend.textContent = L(legendKey); group.append(legend); for (const [field, labelKey] of fields) { @@ -512,10 +590,10 @@ function buildSidePanel( ]); // 요율 판 — 읽기 전용. 「어느 판으로 계산했나」가 화면에 남아야 재현성이 선다. - const rateGroup = document.createElement("div"); - rateGroup.className = "b09-panel__group"; + const rateGroup = document.createElement("section"); + rateGroup.className = "b09-panel__group ui-collapsible ui-sidebar-section"; const rateLegend = document.createElement("span"); - rateLegend.className = "b09-panel__legend"; + rateLegend.className = "b09-panel__legend ui-collapsible__title"; rateLegend.textContent = L("B09_Estimation_Group_RateVersion"); const rateVersionBox = document.createElement("div"); rateGroup.append(rateLegend, rateVersionBox); @@ -532,10 +610,10 @@ function buildSidePanel( ]); // 수량 — 여러 줄이라 텍스트 영역으로. 비어 있으면 위 직접비 3칸을 그대로 쓴다. - const quantityGroup = document.createElement("div"); - quantityGroup.className = "b09-panel__group"; + const quantityGroup = document.createElement("section"); + quantityGroup.className = "b09-panel__group ui-collapsible ui-sidebar-section"; const quantityLegend = document.createElement("span"); - quantityLegend.className = "b09-panel__legend"; + quantityLegend.className = "b09-panel__legend ui-collapsible__title"; quantityLegend.textContent = L("B09_Estimation_Group_Quantity"); const quantityLabel = document.createElement("label"); quantityLabel.className = "ui-field__label"; @@ -555,7 +633,8 @@ function buildSidePanel( root.append(hintBox); const actions = document.createElement("div"); - actions.className = "b09-panel__actions"; + // 바닥 고정 액션 줄(공용) — ui_template_overlay 가 이 줄을 스크롤 밖으로 빼낸다. + actions.className = "ui-sidebar-actions"; actions.append( createButton({ label: L("B09_Estimation_Btn_Recalc"), @@ -569,6 +648,9 @@ function buildSidePanel( ); root.append(actions); + // 그룹 제목 행 클릭 시 접기/펼치기(B04~B07 공통). 액션 줄은 collapsible 이 아니다. + attachCollapsible(root); + return { root, rateVersionBox, hintBox }; } @@ -713,6 +795,12 @@ interface BillRowDto { is_group: boolean; in_bill: boolean; note: string; + /** + * 줄 사유 **조각** — 어느 사유가 어느 열에 닿는지까지 서버가 갈라 보낸다. + * ⚠ 줄에 달렸다고 모든 칸에 띄우면 「금액」 카드에 「갈래 근거…」 가 떠서 읽는 사람을 + * 속인다(2026-09-12 B08 실측). `column` 이 빈 글인 것만 줄 전체에 붙는다. + */ + notes?: Array<{ column: string; text: string }>; } interface PriceBasisEntryDto { @@ -745,6 +833,7 @@ interface BillDto { material_sheet: MaterialSheetDto | null; }; price_basis: { entries: PriceBasisEntryDto[] }; + provenance?: ProvenancePayload; } interface MaterialSheetRowDto { @@ -755,6 +844,7 @@ interface MaterialSheetRowDto { unit_price_krw: string | null; amount_krw: string | null; note: string; + notes?: Array<{ column: string; text: string }>; } interface MaterialSheetDto { @@ -827,6 +917,9 @@ export async function renderB09Estimation(root: HTMLElement): Promise { let selectedUnitPrice: string | null = null; let bill: BillDto | null = null; let priceBasis: string | null = null; + // 근거 사전이 **한 번이라도** 왔는지 — 개발환경에서만 온다. 안 오면 토글도 안 세운다 + // (없는 기능의 단추가 떠 있으면 눌러 보고 「고장났다」고 읽는다). + let hasProvenance = false; const main = document.createElement("div"); main.className = "b09-main"; @@ -840,11 +933,19 @@ export async function renderB09Estimation(root: HTMLElement): Promise { body.style.display = "flex"; body.style.flexDirection = "column"; + /** 사전이 **처음 온 순간에만** 탭 줄을 다시 세운다 — 토글이 그때 생긴다. */ + const noteProvenance = (payload?: ProvenancePayload): void => { + if (!payload || hasProvenance) return; + hasProvenance = true; + drawTabs(); + }; + /** 일위대가 본표를 불러 다시 그린다 — 기계 줄을 누르면 그 층으로 파고든다. */ const openUnitPrice = async (code: string): Promise => { if (!projectId) return; try { unitPriceDetail = await fetchUnitPriceDetail(projectId, code); + noteProvenance(unitPriceDetail.provenance); selectedUnitPrice = code; drawBody(); } catch { @@ -913,6 +1014,7 @@ export async function renderB09Estimation(root: HTMLElement): Promise { void (async () => { try { bill = await fetchBill(projectId); + noteProvenance(bill.provenance); } catch { bill = null; window.alert(L("B09_Estimation_Boq_Failed")); @@ -930,6 +1032,18 @@ export async function renderB09Estimation(root: HTMLElement): Promise { head.innerHTML = "No.공종규격단위" + "수량단가금액비고"; + // 열 키는 서버 `BillRow.as_dict()` 낱말과 같아야 사전이 붙는다. + const boqKeys = [ + "item_no", + "name", + "spec", + "unit", + "quantity", + "unit_price_krw", + "amount_krw", + "note", + ]; + const prov = bill.provenance?.sheets?.boq; const tbody = document.createElement("tbody"); for (const row of bill.rows) { const tr = document.createElement("tr"); @@ -947,16 +1061,20 @@ export async function renderB09Estimation(root: HTMLElement): Promise { row.amount_krw ?? "", row.note, ]; - for (const text of cells) { + cells.forEach((text, index) => { const td = document.createElement("td"); td.textContent = text; + // 머리(그룹)줄은 값이 없다 — 빈 칸에 카드를 띄우면 「설명이 있다」는 거짓이 남는다. + if (!row.is_group) mark(td, prov, boqKeys[index]); tr.append(td); - } + }); if (row.is_group) tr.style.fontWeight = "600"; + else stashRowNotes(tr, row.notes); tbody.append(tr); } table.append(head, tbody); body.append(table); + attachProvenance(table, prov, rowNotesFor); const total = document.createElement("div"); total.className = "b09-hint"; @@ -1054,19 +1172,23 @@ export async function renderB09Estimation(root: HTMLElement): Promise { const list = document.createElement("table"); list.className = "b09-sheet b09-up-list"; list.innerHTML = "번호공종단위단가"; + // 모으기만 하는 표라 사전에 **식이 없다** — 「어느 표에서 왔나」만 카드에 뜬다. + const prov = bill.provenance?.sheets?.price_basis; + const pbKeys = ["number", "name", "unit", "unit_price_krw"]; const tbody = document.createElement("tbody"); for (const entry of entries) { const tr = document.createElement("tr"); - for (const text of [ + [ String(entry.number), `${entry.name} ${entry.spec}`.trim(), entry.unit, entry.unit_price_krw, - ]) { + ].forEach((text, index) => { const td = document.createElement("td"); td.textContent = text; + mark(td, prov, pbKeys[index]); tr.append(td); - } + }); tr.style.cursor = "pointer"; if (entry.code === priceBasis) tr.style.fontWeight = "600"; tr.addEventListener("click", () => { @@ -1076,6 +1198,7 @@ export async function renderB09Estimation(root: HTMLElement): Promise { tbody.append(tr); } list.append(tbody); + attachProvenance(list, prov); split.append(list); const picked = entries.find((entry) => entry.code === priceBasis) ?? null; @@ -1118,11 +1241,13 @@ export async function renderB09Estimation(root: HTMLElement): Promise { return; } - for (const [labelKey, rows, total] of [ - ["B09_Estimation_Mat_Contractor", sheet.contractor, sheet.contractor_total_krw], - ["B09_Estimation_Mat_Owner", sheet.owner, sheet.owner_total_krw], - ["B09_Estimation_Mat_Unknown", sheet.unknown, null], - ] as Array<[keyof typeof ui_locales, MaterialSheetRowDto[], string | null]>) { + // ⚠ 「안 갈린 것」은 **못 세운 것이 아니라 세면 안 되는 것**이라 사전을 따로 쓴다 + // (`excluded` — 채우면 이중계상, PLAN 8-36 ㉱). + for (const [labelKey, rows, total, sheetName] of [ + ["B09_Estimation_Mat_Contractor", sheet.contractor, sheet.contractor_total_krw, "material"], + ["B09_Estimation_Mat_Owner", sheet.owner, sheet.owner_total_krw, "material"], + ["B09_Estimation_Mat_Unknown", sheet.unknown, null, "material_unknown"], + ] as Array<[keyof typeof ui_locales, MaterialSheetRowDto[], string | null, string]>) { const head = document.createElement("div"); head.className = "b09-hint"; head.textContent = `${L(labelKey)} (${rows.length})` + (total === null ? "" : ` — ${total}`); @@ -1134,10 +1259,20 @@ export async function renderB09Estimation(root: HTMLElement): Promise { table.innerHTML = "자재규격단위수량" + "단가금액비고"; + const matKeys = [ + "name", + "spec", + "unit", + "total_amount", + "unit_price_krw", + "amount_krw", + "note", + ]; + const prov = bill?.provenance?.sheets?.[sheetName]; const tbody = document.createElement("tbody"); for (const row of rows) { const tr = document.createElement("tr"); - for (const text of [ + [ row.name, row.spec, row.unit, @@ -1145,15 +1280,18 @@ export async function renderB09Estimation(root: HTMLElement): Promise { row.unit_price_krw ?? "", row.amount_krw ?? "", row.note, - ]) { + ].forEach((text, index) => { const td = document.createElement("td"); td.textContent = text; + mark(td, prov, matKeys[index]); tr.append(td); - } + }); + stashRowNotes(tr, row.notes); tbody.append(tr); } table.append(tbody); body.append(table); + attachProvenance(table, prov, rowNotesFor); } for (const note of sheet.notes) { @@ -1196,6 +1334,7 @@ export async function renderB09Estimation(root: HTMLElement): Promise { void fetchBasisSheet(projectId) .then((data) => { basisSheet = data; + noteProvenance(data.provenance); drawBody(); }) .catch(() => { @@ -1237,6 +1376,7 @@ export async function renderB09Estimation(root: HTMLElement): Promise { void fetchBaseData(projectId) .then((data) => { baseData = data; + noteProvenance(data.provenance); drawBody(); }) .catch(() => { @@ -1301,6 +1441,7 @@ export async function renderB09Estimation(root: HTMLElement): Promise { void fetchPriceSources(projectId) .then((data) => { priceSources = data; + noteProvenance(data.provenance); drawBody(); }) .catch(() => { @@ -1358,11 +1499,15 @@ export async function renderB09Estimation(root: HTMLElement): Promise { void fetchUnitPriceList(projectId) .then((data) => { unitPriceList = data; + noteProvenance(data.provenance); drawBody(); }) .catch(() => showToast(L("B09_Estimation_UP_Load_Failed"), "error")); } }); + // ⚠ 등급색은 **평소엔 꺼 둔다** — 여덟 색이 늘 켜져 있으면 표가 알록달록해 + // 실무 시트와 눈으로 대조를 못 한다(PLAN 8-36 ②). 단추는 탭 줄 끝에 둔다. + if (hasProvenance) bar.append(createProvenanceToggle(root)); const old = main.querySelector(".b09-tabs"); if (old) old.replaceWith(bar); else main.prepend(bar); @@ -1374,6 +1519,7 @@ export async function renderB09Estimation(root: HTMLElement): Promise { if (!projectId) return; try { sheet = await fetchCostSheet(projectId, form); + noteProvenance(sheet.provenance); renderRateVersion(panel.rateVersionBox, sheet); panel.hintBox.textContent = sheet.suggested_profit_adjustment_krw && sheet.suggested_profit_adjustment_krw !== "0" diff --git a/common_util/common_util_project_settings.py b/common_util/common_util_project_settings.py index 28a97660..74d0a170 100644 --- a/common_util/common_util_project_settings.py +++ b/common_util/common_util_project_settings.py @@ -36,6 +36,10 @@ from pathlib import Path from typing import Any, Iterable from common_util.common_util_json import atomic_write_json +from config.config_system_design import ( + EARTHWORK_CONVERSION_C_RANGES, + EARTHWORK_CONVERSION_FACTORS, +) SETTINGS_FILENAME = "project_settings.json" SCHEMA_VERSION = 1 @@ -258,6 +262,62 @@ def concrete_placing_method(settings: dict[str, Any]) -> tuple[str, bool]: return DEFAULT_CONCRETE_PLACING_METHOD, True +def earthwork_conversion_factors(settings: dict[str, Any]) -> dict[str, dict[str, float]]: + """이 프로젝트가 쓸 토량환산계수 — **기본값 위에 고른 값만 얹는다.** + + ⚠ 정의처는 여전히 `config_system_design.EARTHWORK_CONVERSION_FACTORS` 한 곳이다. + 여기서 값을 새로 적지 않고, 설계자가 고른 갈래만 갈아 끼운다. 안 고른 갈래는 + 키 자체가 없어 정본이 그대로 선다 — 기본값을 복사해 넣지 않는 까닭은 이 파일 + 머리글 `*_override` 규칙과 같다. + + ⚠ 이 값은 토적표만 쓰는 것이 아니다 — 유토곡선(B06)·운반표·기초단가가 같이 읽는다. + 그래서 읽는 자리마다 상수를 직접 들지 말고 **이 함수를 거친다.** + + 고른 값의 모양 — `conversion_factors_override` + `{"ripping_rock": {"compacted": 1.0, "reason": "토질시험 값"}}` + `reason` 은 품셈 범위 밖을 골랐을 때 남기는 사유이고 계산에 안 쓴다. + """ + resolved = {kind: dict(entry) for kind, entry in EARTHWORK_CONVERSION_FACTORS.items()} + override = settings.get("conversion_factors_override") + if not isinstance(override, dict): + return resolved + for kind, entry in override.items(): + if kind not in resolved or not isinstance(entry, dict): + continue + value = entry.get("compacted") + if isinstance(value, (int, float)) and not isinstance(value, bool) and float(value) > 0: + resolved[kind]["compacted"] = float(value) + return resolved + + +def earthwork_conversion_choices(settings: dict[str, Any]) -> dict[str, dict[str, Any]]: + """갈래별 「무엇을 골랐나」 — 화면이 기본값과 고른 값을 갈라 보이는 데 쓴다. + + `{갈래: {"compacted", "default", "chosen", "in_range", "range", "reason"}}`. + `chosen` 이 거짓이면 기본값이 선 것이고, `in_range` 가 거짓이면 품셈 범위 밖이라 + 사유가 있어야 하는 자리다. **범위 밖이라고 막지 않는다**(품셈 원칙이 토질시험이다). + """ + override = settings.get("conversion_factors_override") + override = override if isinstance(override, dict) else {} + resolved = earthwork_conversion_factors(settings) + choices: dict[str, dict[str, Any]] = {} + for kind, entry in resolved.items(): + default = float(EARTHWORK_CONVERSION_FACTORS[kind]["compacted"]) + value = float(entry["compacted"]) + low, high = EARTHWORK_CONVERSION_C_RANGES.get(kind, (None, None)) + entry_override = override.get(kind) + reason = entry_override.get("reason") if isinstance(entry_override, dict) else None + choices[kind] = { + "compacted": value, + "default": default, + "chosen": value != default, + "in_range": low is None or low <= value <= high, + "range": [low, high] if low is not None else None, + "reason": str(reason) if reason else None, + } + return choices + + def application_ratio(settings: dict[str, Any], key: str) -> float: """반영률을 0~1 로. 없으면 100 %(=1.0) — 실무 관측치를 기본값으로 쓰지 않는다.""" raw = (settings.get("application_ratios_pct") or {}).get(key, 100) diff --git a/common_util/common_util_provenance.py b/common_util/common_util_provenance.py new file mode 100644 index 00000000..3f513cf5 --- /dev/null +++ b/common_util/common_util_provenance.py @@ -0,0 +1,120 @@ +"""화면에 뜬 숫자가 **어디서 와서 어떻게 계산됐는지**를 적어 두는 한 벌. + +왜 서버가 드나 (CLAUDE.md 5장 · PLAN 8-36 ④) + 「어디서 와서 어떻게 계산됐나」의 정답은 **엔진이 안다.** 이 설명을 화면 TS 에 손으로 + 적어 두면 엔진을 고칠 때 설명만 옛것으로 남아, 맞는 값 옆에 틀린 근거가 붙는다. + 그래서 사전은 값을 낳는 쪽(서버)이 들고, 화면은 **그리기만** 한다. + +⚠ **칸마다 만들지 않는다 — 열 단위다.** + 토적표 한 장이 30열 × 200줄 = 6천 칸이다. 칸마다 설명을 지으면 응답이 수십 배로 붐는데, + 정작 설명이 갈리는 것은 **열**이지 칸이 아니다. 줄마다 갈리는 것(폴백 안분 사유 등)은 + 이미 줄이 `notes` 로 들고 있으니 화면이 그것만 덧붙인다. 보는 사람 눈에는 그대로 + **칸 단위**로 뜬다. + +⚠⚠ **로직 보안 — 배포에서는 아예 안 실어 보낸다.** + 화면에서 숨기는 것만으로는 막히지 않는다. API 를 직접 부르면 그대로 나온다. + 그래서 `provenance_payload()` 가 **개발환경이 아니면 `None`** 을 돌려주고, 라우터는 + 그 `None` 을 응답에서 통째로 뺀다. 화면 쪽 `import.meta.env.DEV` 는 보조일 뿐이다. + 문의 정본은 `common_util_dev_unlock.is_dev_environment()` 하나로 통일한다 — + 개발용 문이 두 벌이 되면 한쪽만 닫히는 날이 온다. +""" + +from __future__ import annotations + +from dataclasses import dataclass +from typing import Any, Iterable, Mapping + +from common_util.common_util_dev_unlock import is_dev_environment + +#: 출처 등급 (PLAN 8-36 ①) — 사람이 고르는 여섯 + 사전이 쓰는 둘(`excluded`·`unclassified`). **키는 영문 고정** — 화면·서버가 같은 낱말을 써야 하고, +#: 사람이 읽는 이름은 화면 locale 이 맡는다(번역이 서버 값을 흔들면 안 된다). +#: +#: ⚠ 등급에 **안 맞는 열이 나오면 억지로 끼우지 말 것.** 그 어긋남이 등급을 고칠 근거다. +#: 맞는 등급이 없으면 `UNCLASSIFIED` 로 두고 계획서에 남긴다 — 조용히 아무 등급이나 +#: 붙이면 「분류가 있다」는 거짓만 남는다. +TIER_INPUT = "input" # 사용자가 화면에 직접 넣은 값 +TIER_SURVEY = "survey" # 앞 단계(B05 종단·B06 횡단)가 낳은 값 +TIER_STANDARD = "standard" # 법·품셈·단가판이 정한 고정값 +TIER_CALC = "calc" # 위 셋으로 만든 중간값 +TIER_FINAL = "final" # 내역서·원가계산서로 나가는 값 +TIER_BLOCKED = "blocked" # 근거가 없어 값을 **못** 세운 자리 — 근거가 오면 채워질 자리 +#: ⚠ `EXCLUDED` 는 `BLOCKED` 와 **뜻이 정반대**다(2026-09-12 데스크탑 보조 B09 조사 ㉱). +#: 내역서의 「우리 줄이 아닌 것」·검산용 제외 줄·이중계상이 되는 자리는 **못 세운 것이 아니라 +#: 세면 안 되는 것**이다. 둘을 같은 등급으로 두면 사용자가 「빈 칸을 채워야 겠다」고 움직이고, +#: 그것이 곧 이중계상이다(PLAN 8-7). +TIER_EXCLUDED = "excluded" # 일부러 안 세는 자리 — 채우면 이중계상 +TIER_UNCLASSIFIED = "unclassified" # 어느 등급에도 안 맞아 **판단을 미룬** 자리 + +TIERS: tuple[str, ...] = ( + TIER_INPUT, + TIER_SURVEY, + TIER_STANDARD, + TIER_CALC, + TIER_FINAL, + TIER_BLOCKED, + TIER_EXCLUDED, + TIER_UNCLASSIFIED, +) + + +@dataclass(frozen=True) +class ColumnProvenance: + """열 하나의 「무엇이고 · 어디서 왔고 · 어떻게 나왔나」. + + `formula` 는 **사람이 읽는 한 줄**이지 실행되는 식이 아니다 — 코드를 그대로 베끼면 + 읽는 사람이 못 읽고, 코드가 바뀌면 또 어긋난다. 「입적 × 토량환산계수」처럼 적는다. + + `code` 는 `파일:줄` 이고 **개발환경에서만 화면에 뜬다.** 줄 번호는 쉽게 밀리므로 + 함수 이름을 같이 적어 두면 밀려도 찾을 수 있다. + """ + + key: str + label: str + tier: str + formula: str = "" + source: str = "" + #: 고르는 자리의 **채택 규칙**. 안전관리비 A·B 중 작은 쪽·자재단가 다섯 중 적용처럼 + #: **값 안에 선택이 숨은** 열이 있다(2026-09-12 B09 조사 ㉰). 그 열은 `calc` 로만 적으면 + #: 「왜 그것을 골랐나」가 사라진다. 후보값은 줄마다 달라지므로 여기엔 **규칙만** 적고 + #: 실제 후보값은 줄 쪽으로 내려보낸다. + rule: str = "" + code: str = "" + + def as_dict(self) -> dict[str, str]: + body: dict[str, str] = {"label": self.label, "tier": self.tier} + if self.formula: + body["formula"] = self.formula + if self.source: + body["source"] = self.source + if self.rule: + body["rule"] = self.rule + if self.code: + body["code"] = self.code + return body + + +def sheet_provenance(columns: Iterable[ColumnProvenance]) -> dict[str, Any]: + """한 장(시트)의 사전. 열 키로 찾아 쓰게 dict 로 편다. + + ⚠ 같은 키를 두 번 적으면 **뒤엣것이 앞엣것을 조용히 덮는다.** 열이 늘 때 실수하기 + 쉬운 자리라 여기서 막고 이름을 알려 준다. + """ + body: dict[str, dict[str, str]] = {} + for column in columns: + if column.key in body: + raise ValueError(f"사전에 같은 열 키가 둘 있습니다: {column.key}") + if column.tier not in TIERS: + raise ValueError(f"모르는 등급입니다: {column.key} → {column.tier}") + body[column.key] = column.as_dict() + return {"columns": body} + + +def provenance_payload(sheets: Mapping[str, dict[str, Any]]) -> dict[str, Any] | None: + """응답에 실을 사전 — **개발환경이 아니면 `None`.** + + 라우터는 `None` 이면 그 칸을 응답에서 아예 뺀다(빈 dict 를 실으면 「사전이 있는데 + 비었다」로 읽혀 화면이 빈 카드를 띄운다). + """ + if not is_dev_environment(): + return None + return {"sheets": dict(sheets)} diff --git a/docs/raw/plans/2026-09-12_plan_checked_complete_items.md b/docs/raw/plans/2026-09-12_plan_checked_complete_items.md new file mode 100644 index 00000000..b193da9d --- /dev/null +++ b/docs/raw/plans/2026-09-12_plan_checked_complete_items.md @@ -0,0 +1,364 @@ +# 2026-09-12 체크리스트 전체 완료 항목 이관 + +> 원본: 저장소 루트 PLAN.md +> 처리: 사용자가 2차 교차검증 생략을 지시하여 기존 체크 상태와 자체검증 기록을 그대로 보존함. +> 주의: 「검증 대기」·「사용자 확인 대기」·「보류 확정」 표기는 완료로 재해석하지 않고 원문대로 유지함. + +### 0-9. 계획노선 편집 모달 — 기능 개선 (2026-09-12 사용자 지시) — ⭐ 앞 아홉은 만듦 · **검증 대기** + +**선행:** 0-2 (모달 본체는 이미 섬). 여기는 그 위에 얹는 개선임. 손대는 자리는 `B05_Profile_UI_RouteEdit.ts` 와 조각 다섯(`_Curve`·`_Edits`·`_History`·`_Input`·`_Label`)임. + +**⭐ 지금 상태 — 조사로 확인한 것 (2026-09-12)** + +1. **등고선은 도엽 것 한 벌뿐임.** 모달은 배수유역도와 같은 `도엽_등고선.geojson` 을 노선 둘레 300m 띠 안에서만 그림. LAS 로 만든 등고선은 이미 있으나(`GET /projects/{id}/surface/models/{model_id}/contour?interval=`, 응답에 `level`(표고)과 사업지 좌표 점렬) **B05 3D 뷰어만** 씀. 확정 지표면 모델 id 는 B05 페이지가 이미 쥐고 있음(`confirmedSurface.model_id`). +2. **최소곡선반지름은 제한이 아니라 표시임**(2026-09-06 확정). 서버가 `projects.road_type` + 설계속도 + 지형으로 골라 `min_radius_m` 로 내려 주고, 화면은 못 미치는 노드를 **붉게만** 칠함. 값 표는 `config_system_design.FOREST_ROAD_PROFILE_CRITERIA["min_plan_radius_m"]`(설계속도 40/30/20 × 일반·특수)이고 근거는 지식DB `01_임도/02_상세설계/평면선형.md` 별표2 Ⅰ.2.다.(1)임. **작업임도는 곡선반지름 규정 자체가 없음**(같은 문서 §1). +3. **노선 길이·시점·종점·측점 표기가 모달에 없음.** 측점 간격 기본값은 20m(`SECTION_STATION_INTERVAL_M`), 「3+18.0」 표기 유틸은 `B05_Profile_Util_Station.ts` 에 이미 있음. +4. **점을 주고 지반고를 받는 통로가 없음.** 서버 `common_util_surface_sampler.build_surface_sampler` 는 종·횡단 생성 안에서만 불림 — ⑤·⑧ 은 이 통로를 새로 내야 함. +5. **곡선 조작 패널이 모달을 벗어남**(사용자 지적 ⑨). `document.body` 에 `position: fixed` 로 띄우고 곡선 중심 반대쪽 16방위로 자동배치라 **모달 상자 밖**과 **하단 정보행 위**로 넘어감. 모달이 `overflow: hidden` 이라 밖에 띄운 것이었으나, 「잘리지 않게」와 「상자 밖으로 나가게」는 다른 문제임. + +**개선 방향 — 아홉** + +- [x] **① 계획노선 길이 실시간 라벨** — 그려지는 폴리라인(`plannedLine`)의 정점 간 거리 합을 브라우저에서 바로 내 상태줄에 냄. 원호가 이미 정점으로 펴져 있어 이 합이 곧 실제 노선 길이임. 서버 왕복 없음. +- [x] **② 시점·종점·규칙측점 실시간 표기** — 양 끝에 시점(BP)·종점(EP) 이름표, 규칙 간격마다 노선에 직교 눈금과 측점번호를 냄. 누가거리 → 「3+18.0」 변환은 `B05_Profile_Util_Station.formatStation` 재사용. ⚠ 측점 간격은 프로젝트 설정을 따라야 하므로 20m 를 코드에 굳히지 않음. 확대를 줄이면 눈금이 붙어 뭉개지므로 화면 간격이 좁아지면 5측점마다만 이름표를 냄. + **자체검증 (2026-09-12, ORCA 내장 브라우저 · 프로젝트 `5cff3920`)** — ①②⑨ 셋 다 화면에서 확인함. + · **①** 상태줄이 「길이 1017.5m · 노드 26개 …」로 뜸. 저장된 `planned_route.csv`(정점 170개)를 따로 재어 본 값도 **1017.5m**, 노드 26개·곡선 24곳으로 **정확히 같음**. + · **②** 시점·종점 이름표와 5측점마다의 눈금(0+0.0 · 5+0.0 … 50+0.0)이 노선 위에 뜸. 종점 표기 **50+17.5** 는 50×20+17.5 = 1017.5m 로 길이와 맞아떨어짐. 이름표를 위로만 띄웠더니 측점 라벨과 포개져 **노선 바깥 방향으로 밀어** 풀었음(측점 라벨은 노선에 직각으로 나감). + · **⑨** 패널 머리를 지도 밖 2000px 까지 끌어도 오른쪽 1401.2px · 아래 863.1px 에서 멈춤(테두리 1401.5 · 863.2). 하단 정보행은 지도 칸 아래라 **가려지지 않음**. + · 그리기가 `B05_Profile_UI_RouteEdit_Render.ts` 로 떨어져 나가 본체가 **703줄 → 627줄**이 됨(700줄 규정 회복). 측점 눈금은 B04 지도와 **같은 `drawStationTicks`** 를 부름. + +- [x] **③ 등고선 한 줄당 높이값 라벨** — 도엽은 `등고수치` 속성, LAS 는 `level` 값이 이미 실려 있어 새로 셀 것이 없음. 가닥마다 화면 안쪽 한 자리에 숫자를 찍되, 겹치면 주곡선(간격의 5배)만 냄. +- [x] **④ R·L 최소값 제한 — 하한에서 막음** (2026-09-12 확정). 지금의 「붉게만 칠함」을 **하한 아래로 아예 못 가게 막는 쪽**으로 바꿈 — 0-2 확정의 「막지 않고 표시만」은 이 자리에서 뒤집힘. 막는 값은 둘임. + · **R 하한** — 서버가 이미 내려 주는 `min_radius_m`(임도 종류·설계속도·지형이 정함)을 그대로 씀. **작업임도는 규정이 없어 0** — 수치를 지어내지 않고 **설정값 한 자리**로 두어 나중에 값만 바꾸면 바로 걸리게 함. + · **L 하한(곡선 길이)** — 법령·교본에 평면 곡선 길이 하한이 **없음**. R 과 같은 꼴로 **임도 종류별 설정값**을 새로 두되 지금은 **전부 0**(제한 없음)으로 열어 둠. + · 막는 자리는 반지름 칸 · 곡선 길이 칸 · 곡선 손잡이 끌기 셋. 하한에 닿으면 거기서 멈추고 왜 멈췄는지 상태줄에 냄. + ⚠ 노드를 옮겨 교각이 작아지면 L = R·Δ 라 길이가 저절로 줄어듦 — 이때는 노드 이동을 막지 않고 **R 을 늘려 L 을 지킴**(길이 고정과 같은 셈)이며, R 까지 하한에 닿으면 그때 멈춤. + **자체검증 (2026-09-12, ORCA 내장 브라우저 · 프로젝트 `5cff3920` · 하한 R 12m)** + · **막는 자리 셋 다 확인** — 반지름 칸에 5·11.9 를 넣으면 **12 로 멈추고 그 값이 칸에 되적힘**(30 은 그대로 통과), 곡선 손잡이를 교각점 쪽으로 44px 당겨도 R 칸이 **12 에서 안 내려감**, 노드를 끌어 접선 자리가 모자라지는 구간에서는 「하한에 걸려 더 못 옮깁니다(곡선반지름 12m)」가 뜨며 **그 걸음이 되돌려짐**. 패널에도 「R ≥ 12m」이 적힘. + · **기본값과 하한을 갈라 둠** — 한 값으로 묶으면 작업임도의 하한 0 이 곧 반지름 0 이 되어 곡선이 아예 안 그려짐. 응답에 `min_radius_m`(기본값)과 `limit_radius_m`·`limit_curve_length_m`(하한)이 따로 나감(실측 12 · 12 · 0). + · ⚠ **이미 하한을 밑돌던 자리는 그대로 둠** — 「조금이라도 나빠지면 막기」로 두었더니 옛 노선의 미달 노드 옆을 1px 만 건드려도 첫 걸음부터 막혀 **아무것도 못 고쳤음**. 지키고 있던 자리가 넘어가는 것만 막게 고침(붉은 표시는 그대로 남음). + · 시험 `resources/tester/test_plan_curve_limits.py` 5건 통과. 전체 시험 **1300 통과 · 22 건너뜀**(설정 표를 건드려 전부 돌림). + +- [x] **⑤ 두 지점 사이 거리·종단기울기** — 노선 위 아무 자리(직선·곡선 가림 없음)를 두 번 찍으면 a·b 사이 **노선을 따라간 길이**와 **(b 지반고 − a 지반고) ÷ 길이** 를 냄. 지반고는 확정 지표면에서 와야 하므로 **점 목록을 받아 표고를 돌려주는 가벼운 API 를 새로 냄**(`build_surface_sampler` 재사용, 새 계산 아님). ⚠ 0-2 확정 7(편집 중 계산 금지)과 부딪히지 않게 **두 번째 점을 찍는 순간에만** 부르고 노드를 끄는 동안에는 안 부름. + **자체검증 (2026-09-12, ORCA 내장 브라우저 · 프로젝트 `5cff3920`)** — Shift+클릭 두 번으로 잼. + · 상태줄에 「구간 0+8.8 → 32+9.2 · 길이 640.3m · 지반고 876.2 → 869.9m · 종단기울기 -1.0%」가 뜸. 측점 표기로 되짚으면 32×20+9.2 − 8.8 = **640.4m** 로 표시 길이와 맞고, (869.9−876.2)÷640.3 = **−0.98%** 로 표시 기울기와 맞음. + · 지반고는 새 통로 `POST /route/elevations` 가 냄. 저장된 종단 측점(`center_x/y` 208407.437464 · 367751.645256, `center_z` 878.30352)을 그대로 물어 **878.304** 가 돌아옴 — 종·횡단 생성기와 **같은 sampler** 를 보고 있음. + · 찍은 자리는 a·b 동그라미와 초록 굵은 선으로 노선 위에 보임. **끄는 동안에는 서버에 안 부름** — 두 번째 점을 찍는 순간 한 번만 부름(0-2 확정 7). + · 700줄 규정을 지키려 모달에서 구간 재기(`_Measure.ts`)와 [확인]·[예상노선으로](`_Apply.ts`)를 떼어냄 — 본체 693줄. + +- [x] **⑥ 바탕 등고선을 LAS 것으로** — 확정 지표면 모델이 있으면 LAS 등고선을 그리고, **없으면 지금처럼 도엽 등고선**을 씀(사용자 지시 그대로). 좌표계는 둘 다 사업지 m 라 변환이 필요 없고, 간격은 프로젝트 등고선 간격 설정을 따름. 노선 둘레 300m 띠로 거르는 것은 그대로 둠. +- [x] **⑦ 등고선 선택 활성화** — 등고선 한 가닥을 찍으면 그 가닥만 다른 색·굵기로 살아나고 높이값을 크게 냄. 집는 차례는 **노드 · 곡선 손잡이 · 등고선** 순 — 노선 편집이 먼저임. + **자체검증 (2026-09-12, ORCA 내장 브라우저 · 프로젝트 `5cff3920`)** — ③⑥⑦ 셋 다 화면에서 확인함. + · **⑥** 상태줄이 「… · LAS 등고선 · …」으로 바뀜. 3D 뷰어가 쓰던 등고선 파일(`contour_…_1.0m.json`, 가닥 2277·표고 187단)을 그대로 읽음. 확정 지표면이 없으면 도엽으로 내려앉는 갈래도 함께 넣었음. + · **③** 가닥마다 높이값이 붙음. 처음엔 **화면이 숫자로 덮였음** — LAS 등고선은 한 표고가 여러 가닥으로 끊겨 있어서임. 겹치는 라벨을 건너뛰게 고쳤고, B04 지도(계곡선만 라벨)는 원래 드물어 표기가 안 바뀜. + · 그래도 1m 간격을 다 그리니 지형이 선으로 뭉개졌음 → **화면에 실제로 들어오는 가닥 수**를 세어 간격을 고르게 함(상한 350가닥). 이 노선에서는 10m 로 잡혀 750·760·…·920 이 읽힘. 확대하면 저절로 촘촘해짐. + · **⑦** 등고선을 누르면 그 가닥만 보라색으로 굵어지고 상태줄에 「고른 등고선 860m」이 뜸. 집히는 것은 **그려진 줄뿐**임(고른 값 850·840·860 이 모두 10m 배수) — 안 그린 줄이 골라져 없던 선이 튀어나오던 것을 막았음. 빈 자리를 누르면 풀림. 집는 차례는 노드 · 곡선 손잡이 · 등고선 순. + · `B04_PreProcess_UI_MapRender.ts` 가 700줄을 넘어 **사전 투영 쪽을 `_Prepare.ts` 로 분리**함(619 → 479 + 306). + +- [x] **⑧ 측점 횡단도 미리보기 — 별도 창** (2026-09-12 확정). 측점을 찍으면 **따로 뜨는 작은 창**에 그 측점 횡단을 보임. **시간이 조금 걸려도 됨** — 찍은 측점 하나만 서버가 셈함. 보일 것은 셋뿐임 — **원지반 횡단선 · 기본 계획 횡단선 · 계획 횡단의 성토사면 길이**. **구조물은 안 그림.** 셈은 **B06 로직을 그대로 재사용**(`B06_Section_Engine_Design*`) — 새로 짜지 않음. ⚠ 계획고는 편집 중에 없으므로 B06 이 쓰는 기본 계획 규칙(지반 추종)으로 그 측점 하나만 세움. + **자체검증 (2026-09-12, ORCA 내장 브라우저 · 프로젝트 `5cff3920`)** — 측점 눈금을 누르면 창이 뜸. + · 창 제목 「횡단 미리보기 — STA.0+100.000」, 그림에 **원지반(회색)·기본 계획 횡단(주황)** 두 줄, 아래 한 줄에 「성토사면 좌 2.86m · 절토 71.43㎡ · 성토 1.97㎡ · 계획고는 [확인] 뒤에 정해지므로 지반을 따라 세운 기본 계획임」. + · **정본과 같은 값인지 대조함** — 저장된 `cross_00100m.json` 의 지반 샘플과 견주니 offset −20.0m 에서 **889.910743 vs 889.910847**(0.1mm 차), 상단측도 둘 다 `right`. 계획고로 쓴 값은 그 측점 `center_z` 873.219755 그대로임. + · 성토사면 길이는 **B06 화면이 쓰는 `fillSlopeLengths`** 를 그대로 부름 — 두 화면이 다른 길이를 말하지 않음. 설계선은 서버가 B06 `compute_cross_design` 으로 냄. + · 한 장에 **0.7초**쯤 걸림(종·횡단을 한 번 돌림). 처음엔 가로·세로를 따로 늘려 사면 기울기가 거짓으로 보였음 — **같은 배율**로 고침. + · 전체 시험 **1300 통과 · 22 건너뜀**. + +- [x] **⑨ 곡선 조작 패널이 모달을 벗어남** — 자동 자리를 **모달 상자 안**(하단 정보행 위까지)으로 가둠. 손으로 옮기는 것도 같은 테두리 안에서만. `position: fixed` 로 띄우는 것은 그대로 두고 자리 계산에서만 가둠 — 상자가 작아 패널이 안 들어가면 캔버스 오른쪽 위에 붙임. + +**개선 둘째 묶음 — 화면 정리와 회전 (2026-09-12 사용자 지시)** + +앞 아홉을 화면에서 보고 이어서 내려온 지시임. **모달 아래 정보행을 없애고 지도 위 오버레이로 옮기는 것**이 줄기임 — 지도가 세로로 넓어짐. + +- [x] **⑩ 조작 설명을 지도 좌상단 오버레이로** — 지금은 제목행 옆에 한 줄로 길게 늘어서 창이 좁으면 두 줄로 접힘. **2열**로 묶어 지도 왼쪽 위에 띄움. +- [x] **⑪ 단추를 제목행 오른쪽으로** — [되돌리기]·[다시하기]·[초기화]·[예상노선으로]·[취소]·[확인]을 제목행 **오른쪽 맞춤**으로 옮김. 크기·모양은 **공용 규격**(`ui_template` 의 `.ui-btn`)을 그대로 씀 — 모달이 따로 만든 `b05-routeedit__btn` 을 걷어냄. +- [x] **⑫ 상태·범례를 지도 좌하단 오버레이로** — 길이·노드 수·곡선 요약과 예상노선·계획노선 범례를 지도 왼쪽 아래에 띄움. +- [x] **⑬ 하단 정보행 삭제** — ⑩~⑫ 를 옮긴 뒤 그 줄을 통째로 없앰. 지도 칸이 그만큼 내려감. +- [x] **⑭ LAS 등고선도 5m 단위로** — 지금 LAS 자료는 1m 간격이라 확대하면 1m·2m 짜리까지 나옴. 도엽 등고선(5m)과 **같은 눈금**으로 맞춰 5m 아래로는 안 내려가게 함. ⚠ 서버에 5m 로 다시 뽑아 달라고 하면 첫 한 번이 오래 걸리므로, **받아 둔 1m 자료에서 5의 배수만 골라** 그림. +- [x] **⑮ LAS 일 때 세류선도 등고 범위 안쪽만** — 도엽 하천중심선은 도엽 전체를 덮어 LAS 등고선 바깥까지 뻗음. 바탕이 LAS 일 때는 **등고선이 있는 범위 안**에서만 그림. +- [x] **⑯ 지도 회전** — 지도 오른쪽 위에 **반시계·시계** 아이콘 둘. 한 번 누를 때마다 **그림 전체**가 한 칸씩 돎(글자도 함께 돎 — CAD 도면과 같은 방식). 집기(노드·손잡이·등고선·측점)는 돌린 자리를 그대로 따라감. +- [x] **⑰ R·L 하한 5m 로 채움** (2026-09-12 사용자 확정) — 실무값도 없는 자리이고 **자유도가 높은 공사**라 0 으로 열어 두었으나, **표기상 값이 필요하면 5m** 로 하라는 지시임. 작은 값으로 고칠 때 걸리적거리지 않는 수준으로 보신 값임. 설정 표 한 칸이라 뒤에 언제든 바꿈. + + **자체검증 (2026-09-12, ORCA 내장 브라우저 · 프로젝트 `5cff3920`)** — ⑩~⑯ 다 화면에서 확인함. + · **⑩⑫⑬** 하단 정보행이 사라지고 지도가 그만큼 세로로 넓어짐. 조작 설명은 왼쪽 위 **2열**, 길이·노드·곡선 요약과 범례는 왼쪽 아래. 두 판 모두 **클릭을 통과시켜** 지도 조작을 안 가림. + · **⑪** 단추 여섯이 제목행 **오른쪽 끝**에 붙음. 공용 `.ui-btn`(`--ghost`, [확인]만 `--filled`)을 그대로 써서 다른 화면 단추와 크기·모양이 같아짐 — 모달이 따로 쓰던 `b05-routeedit__btn` 은 지움. + · **⑭** 확대하면 **855·865·875·885·895·905·915·925** 가 뜸 — 5m 단위가 맞음(1m·2m 짜리가 안 나옴). 받아 둔 1m 자료에서 5의 배수만 골라 그리므로 서버에 다시 묻지 않음. + · **⑮** 세류선이 LAS 등고선 범위 밖으로 뻗던 긴 파란 선이 사라짐. + · **⑯** 시계 단추 셋(45°)에 지도가 통째로 돌고 글자도 함께 돎. 돌린 상태에서 눈에 보이는 노드·손잡이를 눌러도 그대로 잡힘(「옮기는 중」·「곡선을 잡는 중」), 곡선 패널도 돌아간 노드 옆(105px)에 뜨고 지도 칸 안에 머묾. 반시계 셋으로 제자리. + · ⚠ **⑰ 을 고치며 하나 알아냄** — L 하한을 기하에도 걸었더니 **아무것도 안 고쳤는데 노선이 바뀌었음**(길이 1017.5 → 1017.2m). 내각 179° 처럼 거의 곧은 자리는 L 5m 를 채우려면 R 이 286m 로 부풀기 때문임(L = R·Δ). 별표2 도 내각 155° 이상은 곡선을 안 둘 수 있다고 함. 그래서 **L 하한은 칸에 적을 때만 막고**(2 를 넣으면 5 로 멈춤) 패널에 「L ≥ 5m」으로 보이기만 함 — 노선은 손대지 않음. + · 전체 시험 **1310 통과 · 22 건너뜀**. + +**개선 셋째 묶음 — 창 배치와 손맛 (2026-09-12 사용자 지시, 화면을 보고 내려온 것)** + +**⑱~⑳ 이 줄기임** — 횡단을 **메인 창 오른쪽에 붙박이로** 두고 그 아래에 **전후 비교창**을 새로 냄. 나머지는 잔손질. + +- [x] **⑱ 창 배치를 바꿈** — 메인 모달을 **왼쪽으로** 밀고, 오른쪽에 폭이 같은 **세로 칸** 하나를 세움. 위쪽 절반이 **횡단 미리보기**(지금 떠다니던 창을 붙박이로), 아래 절반이 **전후 비교창**(새로 만듦). 떠다니며 끌던 것은 그만둠 — 자리가 정해지면 끌 까닭이 없음. +- [x] **⑲ 전후 비교** — 비교창은 평소 **빈 화면**. 노선을 고쳐 **노드를 놓는 순간**(2026-09-12 사용자 확정) 그 측점 횡단을 다시 셈해 **새것은 위, 직전 것은 아래**로 내림. 끄는 동안에는 안 부름(한 장에 0.7초). +- [x] **⑳ 횡단 창 손질** — 제목의 측점을 **누가거리가 아니라 측점 표기**로(⓫ 참고). 하단 정보에서 **「계획고는 [확인] 뒤에 정해지므로…」 설명을 지움**(2026-09-12 사용자 확정) — 성토사면 길이·절토·성토 면적은 그대로 둠. +- [x] **㉑ 측점 표기를 한 규칙으로** — B05 왼쪽 아래 구조물 목록이 쓰는 **「측점번호+잔여거리」**(`4+9.8` · `17+4.5`) 그대로. 서버가 주는 `STA.0+100.000` 을 그대로 쓰지 않음 — 화면마다 표기가 갈림. +- [x] **㉒ 좌하단에 길이 둘** — **예상노선 길이**와 **계획노선 길이**를 나란히. 지금은 계획노선 하나뿐이라 얼마나 달라졌는지 안 보임. +- [x] **㉓ 거리 재기를 단추로** — [되돌리기] **왼쪽에 구분선**을 두고 그 왼쪽에 **[거리 재기]** 단추. 켜면 그냥 눌러도 재짐(Shift 는 지름길로 남김). +- [x] **㉔ 잰 값을 작은 창으로** — 상태줄에 섞지 않고 **따로 뜨는 작은 오버레이**에 냄. **닫기 단추**가 있고 닫으면 **잰 것이 지워짐**. **곡선 패널과 같이 뜨지 않음** — 하나가 뜨면 다른 하나는 숨음. +- [x] **㉕ 잰 구간이 꼬임** — 화면 사진에서 초록 띠가 노선을 벗어나 **삼각형으로 얽힘**. 두 점 사이를 **가장 가까운 정점**으로 잘라서 생긴 일임(노선이 되꺾이는 자리에서 엉뚱한 정점을 고름). **누가거리로 잘라** 고침. +- [x] **㉖ 곡선 패널 여닫기** — 고른 꺾임점을 **벗어나 누르면 선택이 풀리고** 패널이 닫힘. 패널 **오른쪽 위에 닫기 단추**도 붙임. +- [x] **㉗ 곡선 패널 하단 정보 줄이기** — **내각만 남김**(2026-09-12 사용자 지시). 「고정 없음」·「R ≥ 12m · L ≥ 5m」·「칸을 비우면 자동」은 지움 — 막는 일은 칸이 이미 함. +- [x] **㉘ 고른 등고선에 높이 라벨** — 등고선 한 줄을 고르면 그 줄에 **높이값을 크게** 붙임. 지금은 색만 바뀌고 숫자는 상태줄에만 있음. +- [x] **㉙ 회전 아이콘을 반원으로** — `↺`·`↻` 대신 **반만 도는 화살표** 모양으로 바꿈. +- [x] **㉚ 돌려도 글자는 바로 세움** — 180° 로 돌리면 글자가 뒤집혀 읽히지 않음(사용자 지적). 라벨마다 **거꾸로 한 번 더 돌려** 눈높이로 세움. ⓘ **비용은 거의 없음** — 화면에 나오는 라벨이 수십 개뿐이고 라벨 하나에 변환 한 번 더 얹는 정도라 그림 전체를 다시 그리는 값에 묻힘. 취소할 까닭이 없어 **넣기로 함**. + + **자체검증 (2026-09-12, ORCA 내장 브라우저 · 프로젝트 `5cff3920`)** — 열셋 다 화면에서 확인함. + · **⑱** 메인 창이 왼쪽으로 밀리고 오른쪽 세로 칸에 「횡단」·「이전 횡단」 두 판이 반씩 앉음. 화면이 좁으면(1500px 미만) 오른쪽 칸이 접히고 지도가 폭을 다 가짐. + · **⑲** 측점을 눌러 `2+0.0` 횡단(성토사면 좌 12.50m · 절토 24.80㎡)을 본 뒤 노드를 옮겨 놓으니 위 판이 **새 값**(좌 5.86m · 절토 41.21㎡)으로 바뀌고 아래 판에 **옛 값이 그대로** 남음 — 전후 비교가 됨. 끄는 동안에는 안 부름. + · **⑳㉑** 제목이 「횡단 2+0.0」 — 누가거리가 아니라 구조물 목록과 같은 측점 표기임. 「계획고는 [확인] 뒤에…」 안내는 지워짐. + · **㉒** 좌하단이 「예상노선 1070.4m · 계획노선 1017.5m · 노드 26개」 — 서버 로그의 예상노선 연장 1070m 과 맞음. + · **㉓㉔** [거리 재기]가 [되돌리기] 왼쪽에 구분선과 함께 섬. 두 점을 찍으면 지도 오른쪽 아래 작은 창에 값이 뜨고 **곡선 패널은 숨음**. 닫으면 잰 것이 지워지고 모드도 꺼짐. + · **㉕** 꼬였던 초록 띠가 풀림 — 누가거리로 자르니 a 에서 b 까지 노선을 그대로 따라감. + · **㉖㉗** 노드를 고르면 패널이 뜨고 **빈 곳을 누르면 닫힘**, 닫기 단추도 붙음. 하단 정보는 **「내각 162°」 한 줄**만 남음(「칸을 비우면 자동」까지 지움). + · **㉘** 고른 등고선 위에 높이값(`890m`)이 크게 붙음. + · **㉙㉚** 회전 아이콘이 반원 화살표로 바뀜. **180° 로 돌려도 글자가 모두 바로 섬**(시점·종점·측점 번호·등고 높이) — 그림만 돌고 숫자는 눈높이. 되돌리려면 `_Rotate.ts` 의 `UPRIGHT_LABELS` 를 `false` 로만 바꾸면 됨. + · 700줄 규정에 맞춰 모달 뼈대를 `_Chrome.ts`, 횡단 그리기를 `_Cross_Draw.ts` 로 떼어냄. 전체 시험 **1318 통과 · 22 건너뜀**. + +**⭐ 사용자 확정 (2026-09-12)** + +1. 「최소 길이」 = **곡선 길이 L**. +2. 하한은 **아예 못 넘게 막음** — 0-2 의 「표시만」을 이 자리에서 뒤집음. +3. **작업임도는 규정이 없어 하한 0** — 다만 **설정값**으로 두어 나중에 값만 바꾸면 바로 걸리게 함. +4. ⑧ 은 **별도 창** — 원지반 횡단선 · 기본 계획 횡단선 · 성토사면 길이 셋만. 구조물 없음. B06 로직 재사용. + +**⚠ 남은 가정 하나** — 평면 곡선 길이 L 의 하한은 법령·교본에 **없음**. 임도 종류별 설정값 자리만 만들고 **전부 0** 으로 열어 둠(작업임도와 같은 방식). 값이 정해지면 그 자리에 적기만 하면 됨. + +### 0-8. ⚠⚠ 같은 프로젝트를 둘이 만지면 **앞사람 설계가 통째로 지워짐** (2026-09-09 사용자 지시로 조사) + +**다른 프로젝트끼리는 안전함.** 위험은 **한 프로젝트를 둘이 만질 때**만 생기고 그때는 크게 생김. +업로드 완료 판정이 `clear_designing()` · `discard_initial_snapshot()` · `purge_project_outputs()` 를 +부르는데 **누가 올렸는지 안 따짐** — B 가 파일 하나 올리면 A 가 며칠 만든 설계가 **스냅샷까지** +사라짐. 막는 가드(분석 중 차단 · 같은 이름 옛 행 내림)가 **직행 `/files` 한 갈래에만 없음.** + +**고칠 순서 (사용자 확인 대기)** + +- [x] **직행 `/files` 가드 — 이미 붙어 있었음**(2026-09-09 확인) — 세 갈래가 같아졌음. +- [x] **purge 전 확인 단계 — 이미 있었음**(2026-09-09 확인) — 409 로 묻고 무엇이 지워지는지 알림. +- [x] **프로젝트 단위 업로드 잠금 표시**(2026-09-09, `018ebe7f`) — 「○○○ 님이 올린 자료를 + + 분석하는 중입니다」가 B03 에 뜸. 올리는 경로 넷 모두 시작한 사람을 실음. + ⚠ 실제로 도는 분석 화면은 못 봤음 — 7장 V-21 로 넘겼음. + +### 3-6. B06 구조물 추가 — 남은 것 (2026-09-05 조사 → 2026-09-08 정리) + +**선 것** — B06 에서 구조물 전 군(A~G) 배치 가능. B군(종단배수 6종)은 **연장(m)** 으로 +`common_util_structure_lengths.py` 가 냄(겹친 구간 합침, 원래 합도 함께 냄). 종단·평면에 +구간 띠 표시. 측구(옆도랑)는 **횡단 설계가 `ditch_area_m2` 로 이미 세므로 구조물 수량에서 제외** +(`design_owner: 횡단 설계`) — 또 세면 이중 계상. + +- [x] **도수로·절토사면 배수로 — 보류 확정**(2026-09-09) — 품셈에 그 공종이 없어 + + **배치만 받고** 단가·일위대가를 안 만듦. 사유로 드러내 두는 것이 확정된 동작임. + +### 3-16. 측구 토글 화면 실측 — 남겨 둔 것 (2026-09-09) + +- [x] **측구 토글이 화면에서 도나**(2026-09-09, `5907de85`·`2eb2c972`) — 안 돌던 까닭은 + + 선택(`ditch_choice`)이 캐시·재계산·저장 patch·서버 스키마 **넷 다에 없어** 버려진 것. + 이은 뒤 실측 — 끄면 절토 계 3.33 → 1.78㎡, 다시 켜면 3.90㎡. 저장이 옛 면적을 싣던 + 자리도 함께 고쳤음(저장 직전 전 측점 재계산). + +#### 확정 ② 벽 두께 — 식이 나왔음 (뒷길이 기반) + +``` +상부 두께 = ℓ3 + 0.30 (ℓ3 = 뒷길이, m) +하부 두께 = 상부 + 0.30 × (H − 1.0) +``` + +⚠ 돌조공(H=0.5)만 이 규칙 밖 — 다른 시설이라 따로 둘 것. + +- [x] **표준도에 상부·하부 두께 칸**(2026-09-09, `3a64bb5b`) — 비우면 실무 구조물도 식, + + 넣으면 그 값이 이김. 실측 — 상부 0.60 저장에 입적 24.375 → 20.625㎥, 비우니 복귀. + +### 4-14. 시험 예외 목록 — 잔손질 하나 + +- [x] `**spoil_bank` 예외 두 줄 걷음**(2026-09-09, `0ff26d43`) — 정본 사유가 덮고 있어 + + 목록 없이도 통과. ⚠ 같은 상태가 13 개 더 있음 — 그 파일을 손댈 때 함께 걷을 자리. + +### 8-36. ⭐ 수량·원가 화면 — 좌측 패널 일원화 + 데이터 분류·근거 호버 (2026-09-12 사용자 지시) — 모두 끝, 검증 대기 + +까닭 — 메인 화면에 뜨는 수많은 숫자가 **어디서 왔고 어떻게 계산됐는지** 화면에서 가릴 길이 없어 개발·검산이 막힘. 나아가 **어느 값을 사용자가 고치게 열어 줄지**도 분류가 없어 못 정함. 실측으로 드러난 것 셋 — B03~B07 은 좌측 그룹마다 `ui-collapsible ui-sidebar-section`(접히는 상자+공통 외곽선)에 바닥 고정 `ui-sidebar-actions` 를 쓰는데 **B08 은 상자가 없고 B09 는 공통 클래스를 하나도 안 씀**, B08 은 개발용 「확정 없이 다음으로」 줄에도 `ui-sidebar-actions` 를 붙여 공용 코드가 **첫 번째 것**을 집는 바람에(`ui_template_overlay.ts:115`) 스크롤 영역이 그 줄 안에 갇혀 **패널 내용이 잘림**, 근거 표기는 B08 구조물 원단위 표(「근거」·「출처」 열)와 B09 원가계산서(`formula_text`)에만 있고 토적표·집계표·운반표·일위대가는 **맨 숫자뿐**임. + +- [x] **⓪-가. B09 좌측 패널 공통 틀로 교체** `[데스크탑 보조]` — `b09-panel__group` → `ui-collapsible ui-sidebar-section`, `b09-panel__actions` → `ui-sidebar-actions`, 그룹 제목에 `ui-collapsible__title`. 만지는 파일은 `B09_Estimation_UI_Page.ts` 한 개뿐이고 ⛔ `B08_*` 은 데스크탑 메인이 잡고 있어 손대지 말 것. 화면 판정 = 상자 제목 눌러 접힘 · [계산]·[확정] 이 바닥에 붙어 늘 보임 · 본문만 구름. + + **자체검증** — ORCA 내장 브라우저(5174)에서 B09 화면을 통째로 띄워 실좌표로 잼. + 상자 다섯(공사 조건·요율 판·관급자재·이윤 조정·수량) 모두 `b09-panel__group ui-collapsible + ui-sidebar-section`, 제목 다섯에 `ui-collapsible__title`. ① 제목 클릭 = 상자 높이 332px → 44px, + 캐럿 ▾ → ▸, 다시 눌러 332px 복귀. ② 액션 줄이 창 바닥(920px)에 붙음 — 스크롤 영역을 끝까지 + 내려도(226/226) 액션 줄 좌표 [863, 920] 그대로. ③ 스크롤은 안쪽 래퍼만(scrollHeight 964 / + clientHeight 738), 패널 본체 scrollTop 0 — 잘리는 데 없음. 상자 꼴은 테두리 1px(공통 + `ui-sidebar-section` 색) · 패딩 12px · 모서리 8px 로 B04~B07 과 같음. + ⚠ `b09-panel__group` 은 기초자료 본문 표도 쓰므로 상자 CSS 는 `.ui-sidebar-section` 이 함께 + 붙은 것만 집음. 공용 파일(`ui_template/`)·`B08_*` 은 안 건드림. `tsc --noEmit` 통과. +- [x] **⓪-나. B08 좌측 패널 공통 틀로 교체** `[데스크탑 메인]` — 조건 칸을 접히는 상자 다섯으로 묶음(토량환산계수 / 지반 구성비·시공법 / 현장값(표토·층따기·사토장·용수·운반거리) / 규준틀·임목 / 부대시설). 개발용 줄은 `ui-sidebar-actions` 를 떼고 자체 클래스로 바꿔 **짤림의 원인을 없앰**. 같은 실수 재발을 막게 공용 `splitSidebarActions` 가 **마지막** 액션 줄을 집게 고칠지는 B08 이 통과한 뒤 판단(B04~B08 전부에 닿음). + + **자체검증**(2026-09-12, 커밋 `648bc528`) — 상자는 다섯이 아니라 **일곱**이 됨(제목 여섯 + 무제목 하나). 제목을 따로 지어내지 않고 **이미 있던 제목 줄을 그대로 상자 제목으로 옮긴** 까닭임 — 표토제거 · 구조물·사토 · 부대시설 개소 · 규준틀 개소당 재료 · 임목파쇄 · 콘크리트 타설 여섯과, 산출법 한 줄·토량환산계수 구획을 담는 무제목 상자 하나임(토량환산계수는 제 제목을 제 안에 들고 있어 제목을 둘로 만들지 않음). 지반 구성비·반영률 상자는 표가 있어야 서는 칸이라 이번 측정에는 안 뜸 — 표가 붙으면 같은 규칙으로 상자가 둘 더 섬. + + 측정(ORCA 내장 브라우저 5173, 모듈을 직접 불러 패널을 그림) — 스크롤 래퍼가 패널 직계로 돌아옴(`scrollParent = b08-quantity__panel ui-sidebar-fill`, 전에는 개발용 줄 안) · `.ui-sidebar-actions` 가 **1개**만 남음(전 2개) · [저장]·[확정] 줄 바닥 920px = 패널 바닥 920px = 창 높이 920px 로 **잘림 없음** · 스크롤은 안쪽 래퍼만 · 「구조물·사토」 제목 클릭에 상자 높이 511px → 42px → 511px 로 접힘·펼침. `tsc --noEmit` 통과 · `pytest -q` **1294 passed**. + + 곁들이로 잡은 것 — 표를 못 받은 경우(`table === null`) `concrete_placing` 접근에서 터져 **페이지가 통째로 백지**가 되던 것을 `?.` 로 막음. 정작 보여야 할 「표를 못 불렀다」 안내까지 같이 사라지던 자리임. + + 남은 것 — 토량환산계수 구획의 접힘은 **표가 있어야** 그 구획이 서므로 로그인한 화면에서 한 번 더 볼 것. 공용 `splitSidebarActions` 를 「마지막 액션 줄」로 바꿀지는 아직 안 건드렸음(B04~B08 전부에 닿음). +- [x] **①. 출처 등급 여섯 못 박기** — `입력`(사용자가 넣음) · `측량`(앞 단계 B05·B06 이 낳음) · `기준`(법·품셈·단가판, 고정) · `계산`(위 셋으로 만든 중간값) · `최종`(내역서·원가로 나가는 값) · `막힘`(근거가 없어 못 세움). ⚠ 이 여섯이 뒤에 오는 모든 사전의 밑동이라 **B08 토적표로 먼저 검증한 뒤** B09 로 넘김. + + **자체검증**(2026-09-12) — 등급을 **여덟**으로 못 박음. 사람이 고르는 여섯(`input`·`survey`·`standard`·`calc`·`final`·`blocked`)에, 사전이 쓰는 둘을 더함. 정의처는 `common_util/common_util_provenance.py` 한 곳뿐임. + + **여섯으로 모자랐던 자리 둘 — 양쪽 조사에서 같이 나옴** + ㉠ **`excluded`(제외) 신설** — 데스크탑 보조의 B09 조사 ㉱. 내역서의 「우리 줄이 아닌 것」(`not_our_row`)·검산용 제외 줄·자재대의 안 갈린 것은 **못 세운 것이 아니라 세면 안 되는 것**이라 `blocked` 와 뜻이 정반대임. 둘을 한 등급에 두면 사용자가 빈 칸을 채우려 들고 그것이 곧 이중계상임(8-7). 색도 다르게 줌 — `blocked` 는 붉은 띠, `excluded` 는 회색 빗금. + ㉡ **`rule`(채택 규칙) 칸 신설** — 같은 조사 ㉯. 안전관리비 A·B 중 작은 쪽, 자재단가 다섯 중 적용처럼 **값 안에 선택이 숨은** 열은 `calc` 로만 적으면 「왜 그것을 골랐나」가 사라짐. 열 사전에는 **규칙만** 적고 후보값은 줄 쪽으로 내려보냄. + + **토적표에는 `final`(최종) 열이 없음 — 억지로 안 붙임.** 이 표는 중간 장부이고 내역서로 나가는 값은 토공집계표에서 섬. 실제로 붙은 것은 `survey` 여섯 열(단면적 넷 + 측점) · `calc` 열넷뿐임. 여섯을 한 장에 다 채우려고 아무 열에나 `final` 을 붙이면 「분류가 있다」는 거짓만 남음. + + 측정(ORCA 내장 브라우저 5173, 토적표 모듈에 실제 사전을 물려 그림) — 사전 **20열** · 표시된 칸 40개(2줄 × 20열) · 등급 갈래 `survey` 12 / `calc` 28 로 열 성격대로 갈림. 호버 카드에 「절토 토사 보정량 · 계산 · 값 45.00 · 식 절토 토사 입적 × 토량환산계수(다짐) · 원천 기본값 정의처 · 자리 `EarthworkTable.py:210`」 이 그대로 뜸. 토글은 켜면 `is-prov-tinted` 가 붙고 칸 배경이 투명 → 초록 7 %, 왼쪽 띠 `inset 3px`, 다시 누르면 꺼짐. + + **고쳐 잡은 것** — 줄 사유(측구 안분 폴백)가 **그 줄의 모든 칸**에 뜨던 것을 그 사유가 닿는 열(`ditch_*`)에만 뜨게 막음. 「절토 보정량」 카드에 「측구 가름값이…」 가 떠서 읽는 사람을 속이던 자리임. 사유가 늘면 엔진이 「어느 열에 닿는 사유인가」를 같이 내는 쪽이 맞음. + + 시험 `resources/tester/test_b08_provenance.py` **8개 추가** — 값어치는 첫 번째에 있음: **사전 열 이름이 전부 실제 `EarthworkRow` 에 있는가.** 엔진이 열 이름을 갈면 사전만 옛것으로 남는데 화면에서는 카드가 그냥 안 떠서 눈에 안 띔. 배포환경에서 `None` 이 나오는 것도 시험으로 박음. + **등급 여섯은 한 페이지가 아니라 두 페이지를 합쳐야 다 쓰임** — 토적표엔 `final` 이 하나도 없고(중간 장부), B09 에는 원가계산서의 총원가·도급금액·총계·내역 금액·자재대 금액으로 분명히 있음(데스크탑 보조 확인). 한 장에서 여섯이 다 안 보인다고 등급을 줄이지 말 것. +- [x] **②. 등급 색칠 토글** — 셀 왼쪽 얇은 띠 + 옅은 배경. 여섯 색이 늘 켜져 있으면 표가 알록달록해 실무 시트 대조를 방해하므로 **평소엔 꺼 두고 토글로 켬**. 토글 단추는 시트 탭 줄에 둠(좌측 패널이 아님 — 패널 작업과 파일이 겹치지 않게). +- [x] **③. 칸 단위 근거 호버** — 마우스가 **그 숫자 칸**에 올라가면 카드가 뜸. 카드에 등급 · 값 · 식 · 원천 · (개발 빌드만) 파일:줄. 줄마다 갈리는 것(막힌 사유 · 폴백 안분 같은 것)은 그 칸에 따로 얹힘. +- [x] **④. 사전은 서버가 듦 + 배포 빌드에서 끊음** `[로직 보안]` — 「어디서 와서 어떻게 계산됐나」의 정답은 엔진이 아는 것이라 화면 TS 에 손으로 적으면 엔진을 고칠 때 설명만 옛것으로 남음. 새 파일 `B08_Quantity_Provenance.py` 에 **열 단위 사전**을 두고 응답에 실음(칸마다 만들면 토적표 한 장이 30열×200줄=6천 칸이라 응답이 붐 — 겉보기는 칸 단위 그대로임). ⚠ **화면에서 숨기는 것으로는 보안이 안 됨** — API 로 그대로 뚫림. 배포 빌드에서는 **서버가 사전을 아예 안 실어 보냄**, 문은 이미 있는 `ENVIRONMENT`(`common_util_dev_unlock` 과 같은 방식)를 그대로 씀. 토글 단추도 개발 빌드에만 뜸. +- [x] **⑤. 원천은 글로만 적음 — 자동 이동은 보류** — 카드에 「원천: B06 횡단 NO.12+5」라고 **적기만** 함. 눌러서 그 화면·그 측점으로 **이동하는 것은 지금 못 함** — B05·B06 이 「어느 측점을 보여 달라」를 밖에서 받는 문이 없고(측점 선택이 화면 안 변수로만 있음), 노선을 다시 탐색하면 측점 번호가 어긋나 엉뚱한 데로 감. 뒤에 붙일 때는 측점 번호가 아니라 **측점 id** 로 짚을 것. + + **자체검증 ②③④⑤** (2026-09-12, 커밋 `6e8de279`·`c94e7773`·`e1927423`) — 뼈대는 공용 두 파일에 한 벌로 섬. `common_util/common_util_provenance.py`(등급 여덟 · `ColumnProvenance` · `provenance_payload`)와 `ui_template/ui_template_provenance.ts`(호버 카드 · 등급색 · 토글). B08·B09 가 같은 것을 씀. + + **② 토글** — 시트 탭 줄 끝. 평소 꺼짐, 켜면 칸 왼쪽 3px 띠 + 옅은 배경. 측정: 켬 `is-prov-tinted` 붙고 배경 투명 → 초록 `color(srgb 0.12 0.54 0.30 / 0.07)`, 다시 끔 복귀. ⚠ **사전이 안 오면 단추 자체를 안 세움** — 배포 빌드에 빈 단추가 남지 않음. + + **③ 칸 단위 호버** — 카드에 등급·값·식·원천·채택·자리. 겉보기는 칸 단위지만 사전은 열 단위라 응답이 안 붐(토적표 한 장이 6천 칸). **같은 열이라도 줄마다 성격이 갈리는 자리는 칸 등급이 열 등급을 이김** — 원가계산서 「금액」 26칸 중 셋(총원가·도급공사비·총공사비)만 `final`, 토공집계 「계」의 무대 줄만 `excluded`, 준비공 「수량」의 못 세운 줄만 `blocked`. 배지와 띠가 같은 말을 하게 `fill()` 이 칸 등급을 먼저 봄(`c94e7773`). + + **④ 로직 보안** — 문은 `provenance_payload()` 하나. 개발환경이 아니면 `None` 이고 라우터가 응답에서 칸을 통째로 뺌. ⚠ **화면에서 숨기는 것이 아니라 안 보내는 것** — API 를 직접 불러도 안 나옴. 문의 정본은 `is_dev_environment()` 한 곳으로 통일(개발용 문이 두 벌이면 한쪽만 닫히는 날이 옴). 배포환경 `None` 은 시험으로 박음. + + **⑤ 원천은 글로만** — 카드 「원천」 줄에 어느 표·어느 단계가 낳았는지 적음. 자동 이동은 안 붙임(보류 근거는 항목 본문). + +- [x] **⑥. 사전 채우기 — B08 여섯 장 · B09 열여섯 장** — **양쪽 다 닫힘.** + + **B08**(데스크탑 메인, `e1927423`) — 여섯 장 48열: 토적표 20 · 토공집계 5 · 운반 5 · 준비공 5 · 자재총괄 7 · 구조물 원단위 6. 화면 판정(ORCA 5173, 실제 사전을 물려 다섯 표를 그림): 집계 정상줄 `final` / 무대줄 `excluded` · 운반 정상 `calc` / 무대 `excluded` · 준비공 정상 `calc` / 값 없는 줄 `blocked` · 자재 총수량 `final` · 관급사급 `input` · 원단위 수량 `calc`. 시험 12개(`test_b08_provenance.py`) · `pytest -q` **1317 passed**. + + **B09**(데스크탑 보조, `d1a25080`·`aadb4f67`) — 열여섯 장 92열. 등급 여덟이 **전부** 쓰임(standard 52 · calc 19 · excluded 7 · unclassified 7 · final 2 · input 2 · survey 2 · blocked 1). 화면 판정에서 나온 것: 자재단가대비표 `slot_price` 6칸 중 값 없는 5칸이 `blocked` 로 서서 「0원」과 「그 판에 그 품목이 없음」이 색으로 갈림 · 산출기초는 **모으는 표라 카드에 「식」 줄이 아예 없음**(값·원천·자리만) · 기초자료 실데이터 4,392칸 표시. + + **사전 대상에서 뺀 둘** — 설계서 구성표(프로젝트가 낳은 값이 아니라 문서 목록) · 산출 조건 패널(표가 아니라 입력 칸이고 칸 밑 `hint` 가 이미 같은 일을 함). 없는 것을 지어내면 거짓만 남음. + + **등급 여섯은 한 장이 아니라 여러 장을 합쳐야 다 쓰임** — 토적표엔 `final` 이 하나도 없고(중간 장부) B09 원가계산서·내역서·자재대에 몰림. 한 장에서 여섯이 다 안 보인다고 등급을 줄이지 말 것. 이 갈림은 시험으로 박음. + +- [x] **⑦. B09 내역서 「비고」 사유 유실 — 고침** `[데스크탑 보조]` + + 덮어쓰던 열세 곳 + 이어 붙이던 일곱 곳을 조각 배열 `notes` 로 옮기고 조각마다 **닿는 열 키**를 함께 실음. 화면 「비고」 칸은 조각을 종전 꼴(`/` 이음)로 되뽑는 property 라 **눈에 보이는 것은 안 바뀜** — 토글 끈 사용자도 그대로 봄. 판정: 같은 줄에서 규격 카드엔 「갈래: 토사」만, 수량 카드엔 반영률 문구만, 단가 카드엔 단산 번호만, 금액 카드엔 줄 사유 없음. 줄 전체에 걸리는 사유(열 키 빈 것)만 세 칸 모두에 붙음. + + ⚠ **줄 사유는 그 사유가 닿는 열에만 붙일 것** — B08 에서 줄 사유를 그 줄 모든 칸에 띄웠다가 「절토 보정량」 카드에 「측구 가름값이…」 가 떠서 읽는 사람을 속인 자리가 있었음(2026-09-12 실측 후 고침). + + **앞작업 — B09 원천 조사표 완료** (2026-09-12, 데스크탑 보조) · [조사표](docs/raw/verification/2026-09-12_B09_데이터_원천_조사.md) + 탭 열 개(살아 있는 아홉)의 화면 열마다 이름·원천(`파일:줄`)·식·등급 후보를 적음. + 이미 있어 그대로 쓸 것 넷 — `formula_text`(원가계산서 식) · `source_label`(일위대가 원천) · + `base_label`(법정경비 밑수) · 산출기초 ③ `work_item_basis`. 나머지 표는 식·원천·등급이 통째로 없음. + ⚠ **등급 여섯에 안 맞는 것 일곱 갈래**를 조사표 6장에 모음. 가장 확실한 어긋남은 ㉱ — + 「여기서 안 세는 줄」(`not_our_row` · 검산용 제외 줄 · 관급사급 안 갈린 것)이 `막힘` 과 뜻이 + 정반대라 일곱째 등급 「제외」가 필요해 보임. 이 결정이 나머지보다 앞섬 — ① 을 굳힐 때 함께 볼 것. + + **B09 배선 완료** (2026-09-12, 데스크탑 보조). 데스크탑 메인이 낸 공용 한 벌 + (`common_util_provenance.py` · `ui_template_provenance.ts`) 위에 B09 쪽만 얹음. + ⛔ 공용 두 파일은 안 건드림 — 그 창 소관. + + **① 비고 덮어쓰기 버그 먼저 고침** (사전보다 앞세우라는 지시). `BillRow.note` 한 칸에 + 덮어쓰던 열세 곳 + 이어 붙이던 일곱 곳을 **조각 배열 `notes`** 로 옮김. + 조각마다 **닿는 열 키**를 함께 실음(규격·수량·단가·금액·줄전체). 화면 「비고」 칸은 + 조각을 종전과 **같은 꼴**(`/` 이음)로 되뽑는 property 라 눈에 보이는 것은 안 바뀜. + ⇒ 한 줄에 사유가 둘이면 하나가 사라지던 것이 멈춤. + + **② 열 사전** `B09_Estimation_Provenance.py` (새 파일 — 기존 B09 파일이 700줄 초과). + 8장 57열 — 원가계산서 5 · 내역서 8 · 일위대가 목록 6/본표 9 · 자재대 7 · + 자재대(안 갈린 것) 7 · 중기 9 · 기초자료 목록표 6. 이미 있던 `formula_text` · + `source_label` · `base_label` 은 그대로 쓰고 없는 것만 새로 적음. + **③ 배선** 라우터 5개 응답에 `_with_provenance()` (개발환경 아니면 칸 자체를 안 만듦) · + 표 여섯에 `markProvenanceCell` + `attachProvenance` · **④ 등급색 토글은 탭 줄 끝**. + + **자체검증** — ORCA 내장 브라우저(5174)에서 진짜 사전 JSON(12.7KB)을 서버에서 뽑아 + 페이지 fetch 에 물리고 실제로 눌러 봄. + · 원가계산서 3줄×5열 = **15칸 표시**, 등급 `standard`·`calc`·`unclassified` 셋. + · 내역서 그룹줄 **0칸**(값이 없으니 카드도 없음) · 잎줄 각 8칸 · 사유 실린 줄 2개. + · **닿는 열 판정 통과** — 같은 줄에서 규격 카드엔 「갈래: 토사」만, 수량 카드엔 + 「반영률 80%…」만, 단가 카드엔 「단산 46」만, 금액 카드엔 **줄 사유 없음**. + · 자재대 「안 갈린 것」 표는 일곱 열이 모두 `excluded`, 줄 전체 사유는 세 칸 모두에 붙음. + · 토글 = 끔 `box-shadow:none` → 켬 `excluded` 회색 `rgb(156,163,175)` · + `final` 금색 `rgb(184,134,11)` 3px inset → 다시 끔 `none`. sessionStorage 에 저장됨. + · 사전 안 온 탭은 표시 0칸·오류 없음. 카드는 mouseout 에 닫힘. + · `tsc --noEmit` 통과 · pytest 187 passed(b09·bill·boq·haul). + + ⚠ **남긴 어긋남 — 등급이 열에 하나뿐이라 못 적은 자리** + 원가계산서 「금액」은 같은 열 안에서 중간줄(간접노무비 등)과 마지막줄(총원가·도급금액· + 총계)의 성격이 갈리는데 등급은 열에 하나임. `calc` 로 두고 `rule` 에 어느 줄이 `final` + 인지 적어 둠. **칸 단위 등급이 필요한 첫 자리** — 공용 `fill()` 이 배지를 `column.tier` + 로만 그려서 칸에 다른 등급을 심어도 배지가 안 따라옴(공용 파일이라 안 고침, 메인 창에 알림). + + ⚠ **아직 사전이 없는 장** — 단가산출근거·설계서 구성·산출기초·환율및기초자료· + 자재단가대비표·산출 조건. 앞 넷은 **값을 낳는 표가 아니라 모으는 표**라 열 사전보다 + 「사전 대상인가」를 먼저 정해야 함(조사표 6장 ㉴). + + **2차 — 남은 여섯 장 가름 완료** (2026-09-12, 두 창 합의). **넷 붙이고 둘은 뺌.** + · **붙임** 자재단가대비표(「적용」이 원천 다섯 중 하나를 고르는 자리라 `calc`+`rule`, + 값 빈 칸은 `blocked`) · 환율및기초자료(`standard` 와 `input` 이 갈리는 장) · + 단가산출근거·산출기초(**모으는 표**라 식은 비우고 `source`·등급만). + · **뺌** 설계서 구성표(프로젝트 값이 아니라 개발 진척표 — 조사표 ㉴) · + 산출 조건 패널(표가 아니라 입력 칸이고 칸 밑 근거 한 줄이 이미 같은 일을 함). + ⇒ 사전 **16장 92열**. 등급 **여덟이 전부 쓰임** — standard 52 · calc 19 · + excluded 7 · unclassified 7 · final 2 · input 2 · survey 2 · blocked 1. + + **칸 단위 `final` 심음** — 원가계산서 총원가·도급금액·총계 세 줄. 메인 창이 공용 + `fill()` 을 고쳐 배지도 칸 등급을 따라오게 함. 나머지 칸은 열 등급을 그대로 넘김 + (공용 채움이 없는 판에서도 띠가 붙게 **여기서 명시**). + + **700줄 넘어 셋으로 가름** — `B09_Estimation_Provenance.py`(457줄, 값을 낳는 장 여덟) · + `_Sources.py`(268줄, 바깥에서 오거나 모으는 장) · `_Common.py`(53줄, 두 쪽이 같이 쓰는 + 이름표·비고 조각 — 한쪽에 두면 불러들이기가 고리를 이룸). + + **자체검증 2차** — 백엔드를 새로 띄우고(`stale:false`) **진짜 서버 응답**으로 잼. + · `/estimation/base-data` 가 **16장**을 그대로 실어 보냄. + · 기초자료 탭 실데이터에서 **4,392칸** 표시(목록표 셋), 등급 `standard`·`unclassified`. + · `tsc --noEmit` 통과 · pytest 187 passed. + · **자재단가대비표** `slot_price` 6칸 중 **값 없는 5칸이 `blocked`** — 「0원」이 아니라 + 「그 판에 그 품목이 없다」가 색으로 드러남. 「적용」 칸은 0 — 슬롯 6 이 곧 적용 단가라 + 그 자리에 값이 서면 칸을 따로 안 세움(정상). + · **환율및기초자료** 시간당 3칸 `calc` · 유가 적용 범위 1칸 `input` · 일당·산식·단가· + 기준일·자료 모두 붙음. 한 탭에 등급 다섯(standard·unclassified·blocked·calc·input). + · **산출기초** 지문 12칸 `unclassified` · 못 채운 사유 105칸 `blocked` · 근거 65칸 + `standard`. **모으는 표 카드에 「식」 줄이 아예 없음**(값·원천·자리만) — 없는 식을 + 지어내지 않은 것이 화면에서 확인됨. + · **칸 단위 `final`** 원가계산서 금액 26칸 중 **정확히 셋**(총원가·도급공사비·총공사비)이 + `final`, 나머지 23칸 `calc`. 띠 색 최종 `rgb(184,134,11)` · 계산 `rgb(31,138,76)`. + · **배지 어긋남 해소 확인** — 메인 창의 공용 `fill()` 고침(`c94e7773`)을 받은 뒤 다시 잼. + 총원가 칸 카드 「금액**최종**」 · 재료비 칸 카드 「금액**계산**」 — 띠와 배지가 같은 말을 함. + 금액 26칸이 `final` 3 · `calc` 23 으로 갈리고, 등급을 안 심은 「비목」 칸은 공용이 + 열 등급(`standard`)으로 채워 띠가 붙음(`rgb(97,94,110)`). + ⚠ 서버는 uvicorn StatReload 가 멈춰(main.py 가 리로드마다 프론트 빌드를 다시 돌림) 옛 + 코드로 굳어 있어, 라우터 두 곳은 **함수를 직접 불러** 응답을 받아 그 실제 응답으로 잼 + (둘 다 사전 16장 실림 확인). 프로세스 종료가 창 권한에 막혀 재시작은 사용자 몫. + +⚠ **새 코드를 옛 파일에 넣지 말 것** — `B08_Quantity_Engine_UnitQuantity.py`(1606줄) · `B09_Estimation_UI_Page.ts`(1415줄) · `B09_Estimation_UnitPrice.py`(1173줄) · `B09_Estimation_UI_BaseData.ts`(1080줄) 가 이미 700줄을 크게 넘김. 사전·호버는 **새 파일**로 뺄 것. + +### 8-36 ⑧. ⭐ 실제 화면 통합 검증 (2026-09-12, 데스크탑 메인) — 끝 + +지금까지의 판정은 **모듈을 직접 띄워 꾸민 자료로** 잰 것이었음. 사용자 지시로 **로그인한 진짜 화면·진짜 서버 응답**으로 한 바퀴 다시 돌았음. 백엔드를 새로 띄워(`stale:false`, `code_mtime == source_mtime`) 옛 코드로 헛검증하는 일을 막았음. + +- [x] **B08 좌측 패널** — 상자 **아홉**(제목 여덟 + 무제목 하나). 제목: 암 갈래 구성비 · 반영률 · 표토제거 · 구조물·사토 · 부대시설 개소 · 규준틀 개소당 재료 · 임목파쇄 · 콘크리트 타설. ⚠ 앞서 모듈 검증에서 일곱이던 것이 아홉이 된 까닭은 **표가 있어야 서는 상자 둘**(암 갈래 구성비·반영률)이 실데이터에서 섰기 때문임 — 예상대로임. 「암 갈래 구성비」 제목 클릭에 258px → 42px → 258px. 스크롤 래퍼는 패널 직계(`b08-quantity__panel ui-sidebar-fill`)이고 실제로 구름. [저장]·[확정] 바닥 920px = 패널 바닥 920px = 창 920px — **잘림 없음.** 토량환산계수 구획도 제 제목으로 접힘(실데이터에서만 서는 자리라 이번에 처음 확인). +- [x] **B08 여섯 장 전부에 등급이 붙음 — 모두 1,914칸** · 토적표 1,240(측량 372 · 계산 868) · 토공집계 85(기준 68 · **최종 15** · **제외 2**) · 운반거리 30(계산 26 · **제외 4**) · 준비공 70(기준 42 · 계산 23 · **막힘 5**) · 구조물 원단위 426(측량 142 · 기준 213 · 계산 71) · 자재총괄 63(기준 27 · 계산 9 · **최종 9** · **입력 18**). 탭마다 카드가 실제로 떴고 식·원천·자리가 그 장의 엔진을 가리킴. +- [x] **칸 등급이 열 등급을 이기는 자리가 실데이터에서 확인됨** — 토공집계 「계」 열 안에서 정상 줄은 `최종`, 무대(소운반 20m) 줄만 `제외` 2칸. 운반표도 같은 줄의 토량·거리 둘이 `제외`. 준비공은 값을 못 세운 줄 5칸이 `막힘`. +- [x] **B09 좌측 패널** — 상자 다섯(공사 조건 · 요율 판 · 관급자재 · 이윤 조정 · 수량) 모두 접힘(332px → 44px → 332px). [재계산]·[확정] 바닥 920px. 스크롤 래퍼 `b09-panel ui-sidebar-fill`. +- [x] **B09 사전이 서버 응답에 실림** — `unit-prices`·`base-data`·`price-sources`·`basis-sheet`·`bill` 다섯 응답 모두 `provenance.sheets` **16장**. 화면: 일위대가 1,740칸(기준 580 · 계산 1,160) · 산출기초 623칸 · 원가계산서 130칸(기준 52 · 계산 49 · 미분류 26 · **최종 3**). +- [x] **배지와 띠가 같은 말을 함**(`c94e7773` 확인) — 원가계산서 같은 「금액」 열에서 **총원가 = 배지 「최종」 · 띠 금색 `rgb(184,134,11)`**, **재료비 = 배지 「계산」 · 띠 초록 `rgb(31,138,76)`**. + +**남긴 것 · 되돌린 것** +- 원가계산서·내역서는 이 프로젝트에 원가가 안 돌아 있어 빈 표였음 → **[재계산]을 눌러 26줄을 세운 뒤 쟀음.** 데스크탑 메인 검증 프로젝트(`79da822d…`)라 남의 자리가 아님. +- 검증 뒤 브라우저가 쓰던 값을 그대로 되돌림 — `frd_current_project_id` 를 원래 값(`26275834…`)으로, 등급색 토글(`aislo.provenance.tint`)은 지움. +- ⚠ **백엔드(8000)를 다시 띄웠음.** 옛 코드로 굳어 있었음(`stale:true`, `started_at` 이 이틀 전). 이 PC 의 로그인 세션이 끊겼을 수 있음. + +### 9-11. 사용자 확정 5차 — 반영 상태 (2026-09-09 밤, 중간 점검 시점) + +- [x] `[반나절]` **돌 무게 인자표** — 이미 들어가 있었음(`252e6b54`). 계산식이 기본, 야면석만 관측표. + + ⚠ **야면석은 뒷길이 25·30·60·75 에 원본 값이 없어** 그 규격에서 돌 줄이 안 서고 사유만 남음. +- [x] `[잔손질]` **공구손료 칸** — 세웠음(`83c842e3`). 기본은 빔 = 안 붙음. + + ⚠ **지금은 넣어도 붙을 밑수가 없음** — 일위대가에 주재료비가 선 공종이 0개(사급 자재 단가 대기). diff --git a/docs/wiki/concepts/completed_2026-09-12.md b/docs/wiki/concepts/completed_2026-09-12.md new file mode 100644 index 00000000..8bcbd74c --- /dev/null +++ b/docs/wiki/concepts/completed_2026-09-12.md @@ -0,0 +1,32 @@ +--- +type: completion-summary +status: draft +related_pages: ["[[B05_Profile/B05_route_edit_2026_09]]", "[[B06_Section/B06_profile_cross_unification_2026_09]]", "[[B07_DesignDetail/B07_standard_drawings_2026_09]]", "[[B08_Quantity/B08_provenance_ui_2026_09]]", "[[B09_Estimation/B09_provenance_ui_2026_09]]", "[[multi_environment_safety]]"] +last_updated: 2026-09-12 +source: ["docs/raw/plans/2026-09-12_plan_checked_complete_items.md"] +--- + +# 2026-09-12 체크 완료 항목 + +## 이관 범위 + +- 계획노선 편집 모달 기능 30개 체크와 B05·B06 공용 편집 기반. +- 프로젝트 단위 업로드 잠금 표시와 삭제 전 확인 경로. +- B06 구조물 보류 결정, 측구 토글 실측, B07 벽 두께 자동식, 사토장 시험 예외 정리. +- B08·B09 좌측 패널 일원화와 값 출처·계산 근거 표시. +- 사용자 확정 5차 중 돌 무게 인자표와 공구손료 입력칸. + +## 상태 경계 + +- 사용자가 위키 관리자의 2차 교차검증을 생략하도록 지시했다. 이 페이지는 체크 상태와 계획서의 자체검증 기록을 옮긴 `draft`다. +- 계획서 제목의 `검증 대기`, 본문의 `사용자 확인 대기`, `보류 확정`을 완료 검증으로 바꾸지 않았다. +- 미완료 체크가 남은 `3-17 횡단도 손질` 등은 아카이브하지 않고 상시 계획서에 유지했다. + +## 자체검증 기록 요약 + +| 범위 | 계획서 기록 | +|---|---| +| 계획노선 편집 | ORCA 실제 화면, API 표고 측정, TypeScript·Ruff·Prettier와 전체 회귀 기록 | +| B08·B09 근거 표시 | 로그인한 실제 화면·실제 서버 응답에서 B08 1,914칸, B09 사전 16장과 패널 동작 확인 | +| 기타 완료 체크 | 각 항목의 커밋·시험·화면 실측 또는 보류 결정은 원문 아카이브에 보존 | + diff --git a/docs/wiki/graphify-out/.graphify_labels.json b/docs/wiki/graphify-out/.graphify_labels.json index 0989da7b..9cb20f2d 100644 --- a/docs/wiki/graphify-out/.graphify_labels.json +++ b/docs/wiki/graphify-out/.graphify_labels.json @@ -171,6 +171,10 @@ "169": "B08_DesignDetail_Engine_Cad_Basin.py", "170": "B08_DesignDetail_Engine_Cad_MassHaul.py", "171": "B08 CAD·납품 도면 후속", + "172": "B05 계획노선 편집 — 2026-09-12", + "173": "B06 종횡단 공용화 — 2026-09-12", + "174": "B08 수량 근거 표시 — 2026-09-12", + "175": "B09 원가 근거 표시 — 2026-09-12", "176": "OpenWebCAD Core", "177": "common_util_mass_haul_settle.ts", "178": "Drainage Watershed (유역도)", diff --git a/docs/wiki/graphify-out/2026-09-12/.graphify_analysis.json b/docs/wiki/graphify-out/2026-09-12/.graphify_analysis.json new file mode 100644 index 00000000..49611912 --- /dev/null +++ b/docs/wiki/graphify-out/2026-09-12/.graphify_analysis.json @@ -0,0 +1,1735 @@ +{ + "communities": { + "0": [ + "concepts_crs_metadata", + "concepts_crs_metadata_crs_메타데이터_정상화", + "concepts_crs_metadata_검증_범위와_모순_이력", + "concepts_crs_metadata_검증된_판정", + "concepts_crs_metadata_데이터_흐름", + "concepts_crs_metadata_사용처", + "concepts_dependencies", + "concepts_dependencies_백엔드_python_3_12_7", + "concepts_dependencies_선정_원칙_agent_md_3절", + "concepts_dependencies_외부_라이브러리_의존성", + "concepts_dependencies_프론트엔드_typescript_node_js", + "concepts_design", + "concepts_design_디자인_시스템_design_system", + "concepts_design_레이아웃_및_둥근_테두리_radius_spacing", + "concepts_design_비주얼_테마", + "concepts_design_전역_스크롤바_디자인_scrollbars", + "concepts_design_타이포그래피_typography", + "concepts_design_핵심_색상_토큰_colors", + "concepts_ui_templates", + "concepts_ui_templates_theme_css_스타일_변수", + "concepts_ui_templates_ui_template_elements_ts_공통_엘리먼트_템플릿", + "concepts_ui_templates_ui_template_general_blocks_ts_일반업무_공용_블록", + "concepts_ui_templates_ui_template_general_layout_ts_일반업무_레이아웃", + "concepts_ui_templates_ui_template_locale_ts_다국어_관리", + "concepts_ui_templates_ui_template_overlay_ts_오버레이_컴포넌트", + "concepts_ui_templates_ui_template_palette_ts_지도_팔레트_캐싱_유틸", + "concepts_ui_templates_ui_template_resizer_ts_패널_리사이저_템플릿", + "concepts_ui_templates_ui_template_workflow_layout_ts_엔지니어링_레이아웃", + "concepts_ui_templates_ui_templates_localization_components", + "concepts_ui_templates_남은_파일_한계", + "concepts_ui_templates_제약_backend_md_1" + ], + "1": [ + "concepts_api_common", + "concepts_api_common_api_공통_여러_페이지가_공유하는_엔드포인트", + "concepts_api_common_공통_오류_응답_포맷_전_라우터", + "concepts_api_common_워크플로우_상태_조회", + "concepts_api_common_폴링_패턴_legacy_workflow_json_설계_현재_구현은_workflow_state_api_사용", + "concepts_auth_rbac", + "concepts_auth_rbac_otp_비밀번호_및_디바이스_신뢰", + "concepts_auth_rbac_권한_검증_헬퍼_b01_dashboard", + "concepts_auth_rbac_라우팅_가드_frontend_md_5_2", + "concepts_auth_rbac_사용자_상태_생명주기", + "concepts_auth_rbac_사용처_역참조", + "concepts_auth_rbac_세션_인증_backend_md_6_3", + "concepts_auth_rbac_역할_users_role", + "concepts_auth_rbac_인증_rbac", + "concepts_auth_rbac_인증_갱신_및_만료_일원화", + "concepts_common_util", + "concepts_common_util_공통_유틸_common_util", + "concepts_common_util_리소스_모니터링_common_util_resource_monitor_py", + "concepts_common_util_이메일_발송_common_util_email_py", + "concepts_db_schema_users_auth", + "concepts_db_schema_users_auth_companies_회사", + "concepts_db_schema_users_auth_db_사용자_인증_조직_테이블", + "concepts_db_schema_users_auth_email_otps_이메일_otp", + "concepts_db_schema_users_auth_join_requests_회사_가입_신청", + "concepts_db_schema_users_auth_sessions_세션", + "concepts_db_schema_users_auth_trusted_devices_신뢰_기기", + "concepts_db_schema_users_auth_user_consents_약관_동의", + "concepts_db_schema_users_auth_users_사용자", + "concepts_schema_common", + "concepts_schema_common_검증_원칙_backend_md_4절", + "concepts_schema_common_공통_스키마_pydantic_요청_응답_규칙", + "concepts_schema_common_명명_규칙", + "concepts_workflow_state", + "concepts_workflow_state_r1_워크플로우_단계_재편_2026_08_08_반영", + "concepts_workflow_state_ssot_project_workflow_stages_테이블_실_db_확인", + "concepts_workflow_state_workflow_상태_관리", + "concepts_workflow_state_공통_유틸_common_util_common_util_workflow_state_py", + "concepts_workflow_state_무효화의_실제_범위", + "concepts_workflow_state_백그라운드_자동_계산_체인_및_사용자_설정_이월", + "concepts_workflow_state_조회_api", + "concepts_workflow_state_프론트엔드_게이팅_및_스텝바_연동" + ], + "2": [ + "concepts_a00_app_shell_framework", + "concepts_a00_app_shell_framework_a00_common_app_shell_framework", + "concepts_a00_app_shell_framework_app_shell_구성요소", + "concepts_a00_app_shell_framework_router_라우팅_테이블", + "concepts_a00_app_shell_framework_scaffold", + "concepts_a00_app_shell_framework_scaffold_a00_common_스캐폴드_css_종속성", + "concepts_a00_app_shell_framework_scaffold_b_page_scaffold", + "concepts_a00_app_shell_framework_scaffold_css_인젝션", + "concepts_a00_app_shell_framework_scaffold_사용처", + "concepts_a00_app_shell_framework_scaffold_종속성", + "concepts_a00_app_shell_framework_세부_스캐폴드_css_종속성", + "concepts_a00_app_shell_framework_인증_가드", + "concepts_a00_app_shell_framework_테마_언어_관리", + "concepts_a00_app_shell_framework_파일_구성", + "concepts_a00_app_shell_framework_헤더_구성_64px_높이_sticky" + ], + "3": [ + "b01_dashboard_b01_frontend", + "b03_fileinput_b03_backend", + "b03_fileinput_b03_frontend", + "b04_preprocess_b04_frontend", + "b05_profile_b05_frontend", + "b05_profile_b05_frontend_alignment", + "b05_profile_b05_frontend_viewer", + "b05_profile_b05_profile_interaction_2026_09", + "b05_profile_b05_structure_stations", + "b05_profile_b05_structures", + "b06_section_b06_frontend", + "b08_designdetail_b08_cross_structure_sheets", + "common_util", + "concepts_completed_2026_09_04", + "drainage_watershed", + "ui_templates" + ], + "4": [ + "concepts_drainage_watershed", + "concepts_drainage_watershed_1_b04_vs_b05_역할_분담_및_일원화", + "concepts_drainage_watershed_2_공용_배수_엔진_및_wamis_강우량_연동_phase_1_2_2026_08_13_관측소_전환", + "concepts_drainage_watershed_3_구조물_3단_옵션_체계_ui_phase_3_5", + "concepts_drainage_watershed_4_해석_알고리즘_등고선_하강_contour_descent", + "concepts_drainage_watershed_5_적색_청색_판정_및_유역_확장", + "concepts_drainage_watershed_6_평균_흐름_화살표_flow_arrows_및_흐름강도_램프", + "concepts_drainage_watershed_7_영구저장소_산출물_구조", + "concepts_drainage_watershed_8_b08_수리집수면적유역도", + "concepts_drainage_watershed_배수유역_해석_및_세부설계_drainage_watershed", + "concepts_las_free_sheet_surface", + "concepts_las_free_sheet_surface_e2e_결과", + "concepts_las_free_sheet_surface_las_없는_도엽등고선_서피스", + "concepts_las_free_sheet_surface_계약과_확정값", + "concepts_las_free_sheet_surface_미결", + "concepts_las_free_sheet_surface_흐름" + ], + "5": [ + "concepts_db_schema_logs_monitoring", + "concepts_db_schema_logs_monitoring_activity_logs_사용자_활동_로그", + "concepts_db_schema_logs_monitoring_audit_logs_감사_로그", + "concepts_db_schema_logs_monitoring_change_logs_설계_변경_이력", + "concepts_db_schema_logs_monitoring_db_로그_모니터링_테이블", + "concepts_db_schema_logs_monitoring_login_logs_로그인_시도_로그", + "concepts_db_schema_logs_monitoring_support_requests_기술_지원_요청", + "concepts_db_schema_logs_monitoring_system_admin_logs_시스템_관리자_행위_로그", + "concepts_db_schema_logs_monitoring_system_audit_logs_사용처_b01_b02", + "concepts_db_schema_logs_monitoring_system_audit_logs_프로젝트_조직_변경_감사_로그", + "concepts_db_schema_logs_monitoring_system_resources_시스템_자원_계측", + "concepts_db_schema_logs_monitoring_리소스_api_system_admin_전용" + ], + "6": [ + "pages_a09_security_a09_backend", + "pages_a09_security_a09_backend_a09_security_backend", + "pages_a09_security_a09_backend_api_엔드포인트", + "pages_a09_security_a09_backend_db_저장_activity_logs", + "pages_a09_security_a09_backend_권한_헬퍼", + "pages_a09_security_a09_backend_마스터_회사_관리자_전용_require_master", + "pages_a09_security_a09_backend_시스템_관리자_전용_require_system_admin", + "pages_a09_security_a09_backend_요청_스키마_pydantic", + "pages_a09_security_a09_backend_의존성_공통_유틸", + "pages_a09_security_a09_backend_인증_사용자_공통_verify_session", + "pages_a09_security_a09_backend_참고", + "pages_a09_security_a09_backend_파일_구조" + ], + "7": [ + "concepts_completed_2026_08_29", + "concepts_completed_2026_08_29_2026_08_29_완료_반영", + "concepts_completed_2026_08_29_b03_재업로드_b05_최신_조회", + "concepts_completed_2026_08_29_b05_b06_구조물_ui_통합", + "concepts_completed_2026_08_29_b07_b08_순서", + "concepts_completed_2026_08_29_b07_cad_고정_척도_횡단_장_배치", + "concepts_completed_2026_08_29_b07_cad_테마", + "concepts_completed_2026_08_29_b07_cad_확대_팬", + "concepts_completed_2026_08_29_배수시설_추천_기준", + "concepts_completed_2026_08_29_초기값_보전", + "concepts_completed_2026_08_29_초기화_복원_실측" + ], + "8": [ + "concepts_db_schema_files_surface", + "concepts_db_schema_files_surface_db_파일_지표면분석_테이블", + "concepts_db_schema_files_surface_input_files_status_값", + "concepts_db_schema_files_surface_input_files_입력_원본_파일", + "concepts_db_schema_files_surface_processed_point_cloud_status_값", + "concepts_db_schema_files_surface_processed_point_cloud_필터_변환_포인트클라우드", + "concepts_db_schema_files_surface_surface_models_status_값", + "concepts_db_schema_files_surface_surface_models_지표면_모델_및_등고선", + "concepts_db_schema_files_surface_terrain_layers_지형_레이어", + "concepts_db_schema_files_surface_upload_chunks_업로드_청크_데이터", + "concepts_db_schema_files_surface_upload_sessions_업로드_세션" + ], + "9": [ + "concepts_db_schema_route_profile", + "concepts_db_schema_route_profile_cross_sections_data_structures", + "concepts_db_schema_route_profile_cross_sections_횡단면_설계", + "concepts_db_schema_route_profile_data_컬럼_내_options_스냅샷_구조_2026_07_19_도입", + "concepts_db_schema_route_profile_data_컬럼_내_profile_alignment_구조_2026_07_23_도입", + "concepts_db_schema_route_profile_db_경로_종횡단_테이블", + "concepts_db_schema_route_profile_longitudinal_sections_종단면_설계", + "concepts_db_schema_route_profile_route_points_경로_좌표점", + "concepts_db_schema_route_profile_route_statistics_노선_통계", + "concepts_db_schema_route_profile_routes_status_흐름", + "concepts_db_schema_route_profile_routes_노선_경로" + ], + "10": [ + "pages_a04_newshistory_a04_frontend", + "pages_a04_newshistory_a04_frontend_a04_newshistory_frontend", + "pages_a04_newshistory_a04_frontend_css_클래스_구조", + "pages_a04_newshistory_a04_frontend_mock_데이터_구조", + "pages_a04_newshistory_a04_frontend_로컬라이제이션", + "pages_a04_newshistory_a04_frontend_미해결_사항", + "pages_a04_newshistory_a04_frontend_반응형", + "pages_a04_newshistory_a04_frontend_스타일_css", + "pages_a04_newshistory_a04_frontend_의존성", + "pages_a04_newshistory_a04_frontend_컴포넌트_섹션_빌더", + "pages_a04_newshistory_a04_frontend_파일_구조" + ], + "11": [ + "pages_a07_register_a07_frontend", + "pages_a07_register_a07_frontend_a07_register_frontend", + "pages_a07_register_a07_frontend_api_클라이언트_함수", + "pages_a07_register_a07_frontend_로컬라이제이션", + "pages_a07_register_a07_frontend_스타일_css", + "pages_a07_register_a07_frontend_약관_동의_아코디언", + "pages_a07_register_a07_frontend_의존성", + "pages_a07_register_a07_frontend_이벤트_핸들러", + "pages_a07_register_a07_frontend_제출_로직_2단계_폼_전환", + "pages_a07_register_a07_frontend_컴포넌트_함수_ui_auth_page_실사용", + "pages_a07_register_a07_frontend_파일_구조" + ], + "12": [ + "pages_a08_support_a08_frontend", + "pages_a08_support_a08_frontend_a08_support_frontend", + "pages_a08_support_a08_frontend_로컬라이제이션", + "pages_a08_support_a08_frontend_세션_자동_채움", + "pages_a08_support_a08_frontend_스타일_css", + "pages_a08_support_a08_frontend_의존성", + "pages_a08_support_a08_frontend_이벤트_핸들러", + "pages_a08_support_a08_frontend_제출_로직", + "pages_a08_support_a08_frontend_참고", + "pages_a08_support_a08_frontend_컴포넌트_함수", + "pages_a08_support_a08_frontend_파일_구조" + ], + "13": [ + "pages_b02_projregister_b02_frontend", + "pages_b02_projregister_b02_frontend_b02_projregister_frontend", + "pages_b02_projregister_b02_frontend_로컬라이제이션", + "pages_b02_projregister_b02_frontend_스타일_css", + "pages_b02_projregister_b02_frontend_의존성", + "pages_b02_projregister_b02_frontend_이벤트_핸들러", + "pages_b02_projregister_b02_frontend_입력_필드", + "pages_b02_projregister_b02_frontend_제출_로직", + "pages_b02_projregister_b02_frontend_참고", + "pages_b02_projregister_b02_frontend_컴포넌트_함수", + "pages_b02_projregister_b02_frontend_파일_구조" + ], + "14": [ + "pages_a01_home_a01_frontend", + "pages_a01_home_a01_frontend_a01_home_frontend", + "pages_a01_home_a01_frontend_hero_섹션", + "pages_a01_home_a01_frontend_로컬라이제이션", + "pages_a01_home_a01_frontend_세부_구현", + "pages_a01_home_a01_frontend_이벤트_핸들러", + "pages_a01_home_a01_frontend_주요_기능_섹션", + "pages_a01_home_a01_frontend_최신_소식_섹션", + "pages_a01_home_a01_frontend_컴포넌트", + "pages_a01_home_a01_frontend_파일_구조" + ], + "15": [ + "pages_a05_edudetail_a05_frontend", + "pages_a05_edudetail_a05_frontend_a05_edudetail_frontend", + "pages_a05_edudetail_a05_frontend_css_클래스_구조", + "pages_a05_edudetail_a05_frontend_로컬라이제이션", + "pages_a05_edudetail_a05_frontend_반응형", + "pages_a05_edudetail_a05_frontend_스타일_css", + "pages_a05_edudetail_a05_frontend_의존성", + "pages_a05_edudetail_a05_frontend_이벤트_핸들러", + "pages_a05_edudetail_a05_frontend_컴포넌트_섹션_빌더", + "pages_a05_edudetail_a05_frontend_파일_구조" + ], + "16": [ + "pages_a06_login_a06_frontend", + "pages_a06_login_a06_frontend_a06_login_frontend", + "pages_a06_login_a06_frontend_api_클라이언트_함수", + "pages_a06_login_a06_frontend_로컬라이제이션", + "pages_a06_login_a06_frontend_스타일_css", + "pages_a06_login_a06_frontend_의존성", + "pages_a06_login_a06_frontend_이벤트_핸들러", + "pages_a06_login_a06_frontend_제출_및_otp_제어_로직_2단계_폼_전환", + "pages_a06_login_a06_frontend_컴포넌트_함수", + "pages_a06_login_a06_frontend_파일_구조" + ], + "17": [ + "pages_a08_support_a08_backend", + "pages_a08_support_a08_backend_a08_support_backend", + "pages_a08_support_a08_backend_api_엔드포인트", + "pages_a08_support_a08_backend_db_저장_컬럼_실_코드_insert_기준", + "pages_a08_support_a08_backend_내부_헬퍼", + "pages_a08_support_a08_backend_요청_스키마_pydantic", + "pages_a08_support_a08_backend_의존성_공통_유틸", + "pages_a08_support_a08_backend_접수_로직", + "pages_a08_support_a08_backend_특징", + "pages_a08_support_a08_backend_파일_구조" + ], + "18": [ + "pages_a09_security_a09_frontend", + "pages_a09_security_a09_frontend_a09_security_frontend", + "pages_a09_security_a09_frontend_api_클라이언트_함수_미사용_정의만", + "pages_a09_security_a09_frontend_로컬라이제이션", + "pages_a09_security_a09_frontend_스타일_css", + "pages_a09_security_a09_frontend_약관_데이터_a09_security_terms_ts", + "pages_a09_security_a09_frontend_약관_텍스트와_실_코드_불일치", + "pages_a09_security_a09_frontend_의존성", + "pages_a09_security_a09_frontend_컴포넌트_함수", + "pages_a09_security_a09_frontend_파일_구조" + ], + "19": [ + "pages_b02_projregister_b02_backend", + "pages_b02_projregister_b02_backend_api_엔드포인트", + "pages_b02_projregister_b02_backend_b02_projregister_backend", + "pages_b02_projregister_b02_backend_db_저장_컬럼_projects_insert", + "pages_b02_projregister_b02_backend_생성_로직_create_project_트랜잭션", + "pages_b02_projregister_b02_backend_요청_응답_스키마_pydantic", + "pages_b02_projregister_b02_backend_의존성_공통_유틸", + "pages_b02_projregister_b02_backend_참고", + "pages_b02_projregister_b02_backend_파일_구조", + "pages_b02_projregister_b02_backend_함수" + ], + "20": [ + "pages_b04_preprocess_b04_backend", + "pages_b04_preprocess_b04_backend_2d_gis_미표시_원인_분석_및_조치", + "pages_b04_preprocess_b04_backend_b04_preprocess_backend", + "pages_b04_preprocess_b04_backend_구현_예외_처리_검토_항목_plan", + "pages_b04_preprocess_b04_backend_설정_및_환경_파일_정합성", + "pages_b04_preprocess_b04_backend_수치지형도_도엽_오버레이_아키텍처_2026_07_26_2026_08_01_s8_개편", + "pages_b04_preprocess_b04_backend_엔진_서브모듈", + "pages_b04_preprocess_b04_backend_워크플로우_상태_전이_및_자동_확정", + "pages_b04_preprocess_b04_backend_주요_함수_router_repository_engine_utility", + "pages_b04_preprocess_b04_backend_파일_구성_오케스트레이터_저장소_라우터" + ], + "21": [ + "pages_b04_preprocess_b04_frontend", + "pages_b04_preprocess_b04_frontend_3d_뷰어_dom_마운트_버그_수리", + "pages_b04_preprocess_b04_frontend_3d_뷰어_테마_연동_및_가독성_개선", + "pages_b04_preprocess_b04_frontend_3d_카메라_커서_피봇_2d_오버레이_ui_개선_2026_08_01_02_일원화", + "pages_b04_preprocess_b04_frontend_b04_preprocess_frontend", + "pages_b04_preprocess_b04_frontend_계획서와_실_코드_불일치_3d_뷰어", + "pages_b04_preprocess_b04_frontend_의존성", + "pages_b04_preprocess_b04_frontend_처리_흐름", + "pages_b04_preprocess_b04_frontend_컴포넌트_api_함수", + "pages_b04_preprocess_b04_frontend_파일_구조" + ], + "22": [ + "pages_b05_profile_b05_structures", + "pages_b05_profile_b05_structures_api", + "pages_b05_profile_b05_structures_b05_구조물_정본_통합_편집", + "pages_b05_profile_b05_structures_b06_경계와_남은_범위", + "pages_b05_profile_b05_structures_검증", + "pages_b05_profile_b05_structures_배수관_시설_옵션", + "pages_b05_profile_b05_structures_백엔드_파일", + "pages_b05_profile_b05_structures_유역_추천_개략_단면", + "pages_b05_profile_b05_structures_정본과_타입_레지스트리", + "pages_b05_profile_b05_structures_프론트엔드_파일과_동작" + ], + "23": [ + "pages_b06_section_b06_frontend", + "pages_b06_section_b06_frontend_2026_08_22_파일_한계_정리", + "pages_b06_section_b06_frontend_api_클라이언트", + "pages_b06_section_b06_frontend_b06_section_frontend", + "pages_b06_section_b06_frontend_svg_렌더러_및_유틸리티", + "pages_b06_section_b06_frontend_ui_패널_크기_및_리사이저_규칙_2026_08_02_신설", + "pages_b06_section_b06_frontend_기술부채_해결됨", + "pages_b06_section_b06_frontend_입력_옵션_표시_옵션_및_횡단_반폭_제어", + "pages_b06_section_b06_frontend_파일_구성", + "pages_b06_section_b06_frontend_화면_workflow_조회_및_확정_전용" + ], + "24": [ + "pages_a03_compdetail_a03_frontend", + "pages_a03_compdetail_a03_frontend_a03_compdetail_frontend", + "pages_a03_compdetail_a03_frontend_css_클래스_구조", + "pages_a03_compdetail_a03_frontend_로컬라이제이션", + "pages_a03_compdetail_a03_frontend_반응형", + "pages_a03_compdetail_a03_frontend_스타일_css", + "pages_a03_compdetail_a03_frontend_의존성", + "pages_a03_compdetail_a03_frontend_컴포넌트_섹션_빌더", + "pages_a03_compdetail_a03_frontend_파일_구조" + ], + "25": [ + "pages_a06_login_a06_backend", + "pages_a06_login_a06_backend_a06_login_backend", + "pages_a06_login_a06_backend_api_엔드포인트", + "pages_a06_login_a06_backend_내부_헬퍼", + "pages_a06_login_a06_backend_로그인_로직_흐름", + "pages_a06_login_a06_backend_보안_정책_실_코드_기준", + "pages_a06_login_a06_backend_요청_스키마_pydantic", + "pages_a06_login_a06_backend_의존성_공통_유틸", + "pages_a06_login_a06_backend_파일_구조" + ], + "26": [ + "concepts_mass_haul_diagram", + "concepts_mass_haul_diagram_1_개요_및_분석_목적", + "concepts_mass_haul_diagram_2_주요_계산_수식_및_원리_실무_관례_반영", + "concepts_mass_haul_diagram_3_지반유형별_토량환산계수_기본값_config_system_py", + "concepts_mass_haul_diagram_4_토공_운반장비_선정거리_및_분배_기준_config_system_py", + "concepts_mass_haul_diagram_5_유토곡선_곡선_사양_b06_구현_v2", + "concepts_mass_haul_diagram_6_웹앱_연동_및_시각화_명세_2026_08_02_확정", + "concepts_mass_haul_diagram_유토곡선_mass_haul_diagram_계산_명세", + "pages_B08_Quantity_B08_overview_2026_09" + ], + "27": [ + "pages_a07_register_a07_backend", + "pages_a07_register_a07_backend_a07_register_backend", + "pages_a07_register_a07_backend_api_엔드포인트", + "pages_a07_register_a07_backend_가입_로직_흐름", + "pages_a07_register_a07_backend_요청_스키마_pydantic", + "pages_a07_register_a07_backend_의존성_공통_유틸", + "pages_a07_register_a07_backend_참고", + "pages_a07_register_a07_backend_파일_구조" + ], + "28": [ + "pages_b06_section_b06_culvert_controls", + "pages_b06_section_b06_culvert_controls_4축_조작과_재질", + "pages_b06_section_b06_culvert_controls_b06_배수관_구조물_조작_표시", + "pages_b06_section_b06_culvert_controls_계산_보기_분리", + "pages_b06_section_b06_culvert_controls_구현_파일", + "pages_b06_section_b06_culvert_controls_자체검증_기록", + "pages_b06_section_b06_culvert_controls_조정창", + "pages_b06_section_b06_culvert_controls_집수정_9키_조작" + ], + "29": [ + "pages_b06_section_b06_revetment_link_controls", + "pages_b06_section_b06_revetment_link_controls_b06_기슭막이_연동_경사_단별_제어", + "pages_b06_section_b06_revetment_link_controls_검증", + "pages_b06_section_b06_revetment_link_controls_단별_구간값", + "pages_b06_section_b06_revetment_link_controls_선택과_하이라이트", + "pages_b06_section_b06_revetment_link_controls_연동과_경사", + "pages_b06_section_b06_revetment_link_controls_정본과_공용_모델", + "pages_b06_section_b06_revetment_link_controls_형태와_조정창" + ], + "30": [ + "pages_b08_designdetail_b08_backend", + "pages_b08_designdetail_b08_backend_b08_designdetail_backend", + "pages_b08_designdetail_b08_backend_도각_템플릿_변환_및_종단도_a1_도각_병합_2026_07_26", + "pages_b08_designdetail_b08_backend_도면_관리_종단_30측점_분할_cad_수량산출표_및_도면_템플릿_파이프라인", + "pages_b08_designdetail_b08_backend_워크플로우_게이팅_연동", + "pages_b08_designdetail_b08_backend_종단도_30측점_n분할_및_납품_양식_측점_테이블_2026_07_25_n_1_1", + "pages_b08_designdetail_b08_backend_현재_책임_경계", + "pages_b08_designdetail_b08_backend_횡단도_4개_선별_레이어_및_cad_수량산출표_2026_07_25_n_1_2_n_1_3" + ], + "31": [ + "pages_b08_designdetail_b08_drawing_masshaul_watershed", + "pages_b08_designdetail_b08_drawing_masshaul_watershed_b08_토적도_수리집수면적유역도", + "pages_b08_designdetail_b08_drawing_masshaul_watershed_검증_한계", + "pages_b08_designdetail_b08_drawing_masshaul_watershed_구현_검증_완료", + "pages_b08_designdetail_b08_drawing_masshaul_watershed_남은_결정", + "pages_b08_designdetail_b08_drawing_masshaul_watershed_데이터_흐름", + "pages_b08_designdetail_b08_drawing_masshaul_watershed_도면_기준", + "pages_b08_designdetail_b08_drawing_masshaul_watershed_유역_정보표" + ], + "32": [ + "pages_b09_estimation_b09_frontend", + "pages_b09_estimation_b09_frontend_b09_estimation_frontend", + "pages_b09_estimation_b09_frontend_로컬라이제이션", + "pages_b09_estimation_b09_frontend_백엔드_db_미착수", + "pages_b09_estimation_b09_frontend_의존성", + "pages_b09_estimation_b09_frontend_참고", + "pages_b09_estimation_b09_frontend_컴포넌트_함수", + "pages_b09_estimation_b09_frontend_파일_구조" + ], + "33": [ + "architecture_implementation_status", + "architecture_implementation_status_구현_상태_용어", + "architecture_implementation_status_단계별_판정", + "architecture_implementation_status_미결_설계", + "architecture_implementation_status_반드시_유지할_구분", + "architecture_implementation_status_비워크플로_영역_판정", + "architecture_implementation_status_현재_구현_현황_소스_읽기_감사" + ], + "34": [ + "concepts_db_schema_structure_output", + "concepts_db_schema_structure_output_db_구조물_수량_산출물_테이블", + "concepts_db_schema_structure_output_output_files_개별_산출_파일_리스트", + "concepts_db_schema_structure_output_outputs_최종_견적_도면_산출_세션", + "concepts_db_schema_structure_output_quantity_items_수량_산출_항목", + "concepts_db_schema_structure_output_quantity_items_총비용_계산_예", + "concepts_db_schema_structure_output_structures_배치_구조물" + ], + "35": [ + "pages_b01_dashboard_b01_backend", + "pages_b01_dashboard_b01_backend_b01_dashboard_backend", + "pages_b01_dashboard_b01_backend_기술부채", + "pages_b01_dashboard_b01_backend_라우터_권한_헬퍼", + "pages_b01_dashboard_b01_backend_세분화_백엔드_위키_명세", + "pages_b01_dashboard_b01_backend_요청_스키마", + "pages_b01_dashboard_b01_backend_저장소_및_삭제_함수" + ], + "36": [ + "pages_b01_dashboard_b01_frontend", + "pages_b01_dashboard_b01_frontend_b01_dashboard_frontend", + "pages_b01_dashboard_b01_frontend_ui_권한_헬퍼", + "pages_b01_dashboard_b01_frontend_공유_자원_연결", + "pages_b01_dashboard_b01_frontend_모달", + "pages_b01_dashboard_b01_frontend_분할된_ui_컴포넌트_파일", + "pages_b01_dashboard_b01_frontend_파일과_진입점" + ], + "37": [ + "pages_b03_fileinput_b03_backend", + "pages_b03_fileinput_b03_backend_b03_fileinput_backend", + "pages_b03_fileinput_b03_backend_workflow_알림", + "pages_b03_fileinput_b03_backend_메타데이터_분석_및_파일_지문", + "pages_b03_fileinput_b03_backend_임시_보관함_r2_temp_upload", + "pages_b03_fileinput_b03_backend_입력_검증_파일_처리", + "pages_b03_fileinput_b03_backend_저장소_및_초기화" + ], + "38": [ + "pages_b05_profile_b05_corridor_turn_correction_plan", + "pages_b05_profile_b05_corridor_turn_correction_plan_b05_급선회_3d_국부_보정_계획", + "pages_b05_profile_b05_corridor_turn_correction_plan_구조물_연동", + "pages_b05_profile_b05_corridor_turn_correction_plan_국부_패치_절차", + "pages_b05_profile_b05_corridor_turn_correction_plan_목적과_경계", + "pages_b05_profile_b05_corridor_turn_correction_plan_완료_조건", + "pages_b05_profile_b05_corridor_turn_correction_plan_확인된_노견_확장_회귀" + ], + "39": [ + "pages_b06_section_b06_culvert_basin_multitier", + "pages_b06_section_b06_culvert_basin_multitier_b06_집수정_다단_기슭막이", + "pages_b06_section_b06_culvert_basin_multitier_미결", + "pages_b06_section_b06_culvert_basin_multitier_유입_구조물", + "pages_b06_section_b06_culvert_basin_multitier_유출_성토부_다단", + "pages_b06_section_b06_culvert_basin_multitier_자체검증_기록", + "pages_b06_section_b06_culvert_basin_multitier_집수정_계류측_성토부" + ], + "40": [ + "pages_b06_section_b06_culvert_geometry_redesign", + "pages_b06_section_b06_culvert_geometry_redesign_b06_배수관_구조물_기하_조작_체계", + "pages_b06_section_b06_culvert_geometry_redesign_검증_상태", + "pages_b06_section_b06_culvert_geometry_redesign_구현_파일", + "pages_b06_section_b06_culvert_geometry_redesign_기슭막이_관_핵심_규칙", + "pages_b06_section_b06_culvert_geometry_redesign_설계선_트림", + "pages_b06_section_b06_culvert_geometry_redesign_접속선" + ], + "41": [ + "pages_b06_section_b06_culvert_set", + "pages_b06_section_b06_culvert_set_b06_배수관_횡단도_세트", + "pages_b06_section_b06_culvert_set_검증_근거와_후속", + "pages_b06_section_b06_culvert_set_계획선_규칙", + "pages_b06_section_b06_culvert_set_구현_항목", + "pages_b06_section_b06_culvert_set_입력_판정", + "pages_b06_section_b06_culvert_set_형상_표시_순서_2026_08_20_스냅샷" + ], + "42": [ + "pages_b10_payment_b10_frontend", + "pages_b10_payment_b10_frontend_b10_payment_frontend", + "pages_b10_payment_b10_frontend_로컬라이제이션", + "pages_b10_payment_b10_frontend_비즈니스_로직_전제_목업", + "pages_b10_payment_b10_frontend_의존성", + "pages_b10_payment_b10_frontend_주요_컴포넌트_및_함수_mockup", + "pages_b10_payment_b10_frontend_파일_구조" + ], + "43": [ + "pages_b11_status_b11_frontend", + "pages_b11_status_b11_frontend_b11_status_frontend", + "pages_b11_status_b11_frontend_결재_상태_흐름_payment_flow_status", + "pages_b11_status_b11_frontend_로컬라이제이션", + "pages_b11_status_b11_frontend_의존성", + "pages_b11_status_b11_frontend_주요_컴포넌트_및_기능_mockup", + "pages_b11_status_b11_frontend_파일_구조" + ], + "44": [ + "concepts_db_schema_overview", + "concepts_db_schema_overview_db_스키마_개요", + "concepts_db_schema_overview_설계_원칙", + "concepts_db_schema_overview_테이블_관계_핵심_흐름", + "concepts_db_schema_overview_테이블_그룹_9개", + "concepts_db_schema_overview_파일_경로_추적_컬럼_db에_경로만_기록_실_파일은_파일시스템", + "concepts_storage_paths", + "concepts_storage_paths_db_컬럼_실제_경로_매핑", + "concepts_storage_paths_경로_패턴", + "concepts_storage_paths_원칙_backend_md_3절", + "concepts_storage_paths_저장_경로_규칙_workflow_based_folder_structure", + "concepts_storage_paths_코드_감사_주의사항", + "concepts_storage_paths_파일명_규칙_structure_md_1절" + ], + "45": [ + "concepts_db_schema_projects", + "concepts_db_schema_projects_db_프로젝트_관리_테이블", + "concepts_db_schema_projects_project_automations_프로젝트_자동화_정책", + "concepts_db_schema_projects_project_versions_프로젝트_버전_스냅샷", + "concepts_db_schema_projects_project_workflow_stages_단계별_상세_상태", + "concepts_db_schema_projects_projects_프로젝트" + ], + "46": [ + "concepts_law_source_quality", + "concepts_law_source_quality_결함_유형_예시_위_파일_기준_줄번호", + "concepts_law_source_quality_원인_추정", + "concepts_law_source_quality_임도기술교본_원문_md_추출_품질_결함", + "concepts_law_source_quality_조치_상태", + "concepts_law_source_quality_확인_범위", + "concepts_standard_drawing_cost_inputs" + ], + "47": [ + "pages_a01_home_a01_components", + "pages_a01_home_a01_components_a01_home_세부_구현", + "pages_a01_home_a01_components_데이터_흐름", + "pages_a01_home_a01_components_미해결", + "pages_a01_home_a01_components_스타일", + "pages_a01_home_a01_components_의존성" + ], + "48": [ + "pages_a02_progdetail_a02_components", + "pages_a02_progdetail_a02_components_a02_progdetail_세부_구현", + "pages_a02_progdetail_a02_components_데이터_흐름", + "pages_a02_progdetail_a02_components_미해결_특이사항", + "pages_a02_progdetail_a02_components_스타일_css", + "pages_a02_progdetail_a02_components_의존성" + ], + "49": [ + "pages_a02_progdetail_a02_frontend", + "pages_a02_progdetail_a02_frontend_a02_progdetail_frontend", + "pages_a02_progdetail_a02_frontend_구조", + "pages_a02_progdetail_a02_frontend_세부_구현", + "pages_a02_progdetail_a02_frontend_제약_준수", + "pages_a02_progdetail_a02_frontend_컴포넌트_분석" + ], + "50": [ + "pages_b01_dashboard_b01_api", + "pages_b01_dashboard_b01_api_b01_dashboard_api", + "pages_b01_dashboard_b01_api_사용자_회사", + "pages_b01_dashboard_b01_api_시스템_관리자", + "pages_b01_dashboard_b01_api_프로젝트_자동화", + "pages_b01_dashboard_b01_api_회사_관리자" + ], + "51": [ + "pages_b03_fileinput_b03_frontend", + "pages_b03_fileinput_b03_frontend_api_클라이언트", + "pages_b03_fileinput_b03_frontend_b03_fileinput_frontend", + "pages_b03_fileinput_b03_frontend_ui_지원_유틸리티_분할_완료", + "pages_b03_fileinput_b03_frontend_브라우저_상태_오프라인_보조", + "pages_b03_fileinput_b03_frontend_페이지_업로드_흐름" + ], + "52": [ + "pages_b05_profile_b05_corridor_surface", + "pages_b05_profile_b05_corridor_surface_b05_계획노선_코리도_삼각망_서피스", + "pages_b05_profile_b05_corridor_surface_검증", + "pages_b05_profile_b05_corridor_surface_저장_호환성", + "pages_b05_profile_b05_corridor_surface_진행_중_계획", + "pages_b05_profile_b05_corridor_surface_프론트엔드_구성" + ], + "53": [ + "pages_b05_profile_b05_profile_plan_2026_08_18", + "pages_b05_profile_b05_profile_plan_2026_08_18_2026_08_18_b05_페이지_개선_2차_계획_기록", + "pages_b05_profile_b05_profile_plan_2026_08_18_2026_08_18_사이드_패널_입력_로직_계획_기록", + "pages_b05_profile_b05_profile_plan_2026_08_18_b05_b06_구조물_적용_범위", + "pages_b05_profile_b05_profile_plan_2026_08_18_b05_구조물_ui_현재_계획", + "pages_b05_profile_b05_profile_plan_2026_08_18_후속_결정_대기" + ], + "54": [ + "pages_b05_profile_b05_profile_plan_2026_08_19", + "pages_b05_profile_b05_profile_plan_2026_08_19_b05_구조물_입력_종단_표시_정비_2026_08_19", + "pages_b05_profile_b05_profile_plan_2026_08_19_기록된_검증", + "pages_b05_profile_b05_profile_plan_2026_08_19_기준_해석_보류", + "pages_b05_profile_b05_profile_plan_2026_08_19_완료_범위", + "pages_b05_profile_b05_profile_plan_2026_08_19_주요_항목" + ], + "55": [ + "architecture_project_map", + "architecture_project_map_aislo_프로젝트_지도", + "architecture_project_map_명칭_판정", + "architecture_project_map_탐색_순서", + "architecture_project_map_현재_명칭과_책임", + "architecture_workflow_data_flow", + "b08_designdetail_b08_frontend", + "concepts_quantity_cost_contract", + "pages_B07_DesignDetail_B07_frontend", + "pages_B07_DesignDetail_B07_standard_drawings_2026_09", + "pages_B09_Estimation_B09_overview_2026_09" + ], + "56": [ + "pages_b08_designdetail_b08_cross_structure_sheets", + "pages_b08_designdetail_b08_cross_structure_sheets_b08_횡단도_구조물_장_배치", + "pages_b08_designdetail_b08_cross_structure_sheets_결과", + "pages_b08_designdetail_b08_cross_structure_sheets_데이터_구현_흐름", + "pages_b08_designdetail_b08_cross_structure_sheets_문제와_결정", + "pages_b08_designdetail_b08_cross_structure_sheets_한계" + ], + "57": [ + "b05_profile_b05_backend", + "concepts_completed_2026_09_07", + "pages_b06_section_b06_backend", + "pages_b07_quantity_b07_frontend", + "pages_b07_quantity_b07_frontend_b07_quantity_frontend", + "pages_b07_quantity_b07_frontend_현재_사용자_동작" + ], + "58": [ + "concepts_b07_external_webcad_demos", + "concepts_b07_external_webcad_demos_b07_외부_webcad_비교_실행환경", + "concepts_b07_external_webcad_demos_검증_상태", + "concepts_b07_external_webcad_demos_라이선스_주의", + "concepts_b07_external_webcad_demos_실행과_종료" + ], + "59": [ + "concepts_temp_upload", + "concepts_temp_upload_temp_upload_프로젝트_생성_전_임시_보관함", + "concepts_temp_upload_사용처", + "concepts_temp_upload_주요_개념_및_스펙", + "concepts_temp_upload_주요_구성_요소" + ], + "60": [ + "graphify_out_memory_query_20260821_070423_배수관_매설시_각도의_제약조건이_있는지_확인해줘_임도에서", + "graphify_out_memory_query_20260821_070423_배수관_매설시_각도의_제약조건이_있는지_확인해줘_임도에서_answer", + "graphify_out_memory_query_20260821_070423_배수관_매설시_각도의_제약조건이_있는지_확인해줘_임도에서_outcome", + "graphify_out_memory_query_20260821_070423_배수관_매설시_각도의_제약조건이_있는지_확인해줘_임도에서_q_배수관_매설시_각도의_제약조건이_있는지_확인해줘_임도에서", + "graphify_out_memory_query_20260821_070423_배수관_매설시_각도의_제약조건이_있는지_확인해줘_임도에서_source_nodes" + ], + "61": [ + "graphify_out_memory_query_20260821_101018_임도_기술정보db에서_집수정의_형태정보는_어떤게_있는지_확인해줘", + "graphify_out_memory_query_20260821_101018_임도_기술정보db에서_집수정의_형태정보는_어떤게_있는지_확인해줘_answer", + "graphify_out_memory_query_20260821_101018_임도_기술정보db에서_집수정의_형태정보는_어떤게_있는지_확인해줘_outcome", + "graphify_out_memory_query_20260821_101018_임도_기술정보db에서_집수정의_형태정보는_어떤게_있는지_확인해줘_q_임도_기술정보db에서_집수정의_형태정보는_어떤게_있는지_확인해줘", + "graphify_out_memory_query_20260821_101018_임도_기술정보db에서_집수정의_형태정보는_어떤게_있는지_확인해줘_source_nodes" + ], + "62": [ + "pages_b02_projregister_b02_db", + "pages_b02_projregister_b02_db_b02_projregister_db", + "pages_b02_projregister_b02_db_쓰는_테이블", + "pages_b02_projregister_b02_db_저장소_파일시스템", + "pages_b02_projregister_b02_db_참고_계획_당시_의도" + ], + "63": [ + "pages_b03_fileinput_b03_api", + "pages_b03_fileinput_b03_api_b03_fileinput_api", + "pages_b03_fileinput_b03_api_workflow_조회", + "pages_b03_fileinput_b03_api_일반_업로드", + "pages_b03_fileinput_b03_api_청크_업로드" + ], + "64": [ + "pages_b04_preprocess_b04_db", + "pages_b04_preprocess_b04_db_b04_preprocess_db", + "pages_b04_preprocess_b04_db_repository_함수", + "pages_b04_preprocess_b04_db_쓰는_테이블", + "pages_b04_preprocess_b04_db_참고" + ], + "65": [ + "pages_b05_profile_b05_api", + "pages_b05_profile_b05_api_api_스키마_및_반환_필드", + "pages_b05_profile_b05_api_b05_profile_api", + "pages_b05_profile_b05_api_post_project_id_route_confirm_요청_routeconfirmrequest", + "pages_b05_profile_b05_api_엔드포인트" + ], + "66": [ + "pages_b05_profile_b05_corridor_patch_finish", + "pages_b05_profile_b05_corridor_patch_finish_b05_변형_성토면_마감_날개_패치", + "pages_b05_profile_b05_corridor_patch_finish_세월교_날개_패치", + "pages_b05_profile_b05_corridor_patch_finish_저장_검증", + "pages_b05_profile_b05_corridor_patch_finish_패치_마감" + ], + "67": [ + "pages_b05_profile_b05_frontend_alignment", + "pages_b05_profile_b05_frontend_alignment_12행_도면_테이블_및_가로_스크롤_정렬_개편_ui_profile_table_ts_ui_profile_panel_ts", + "pages_b05_profile_b05_frontend_alignment_b05_profile_profile_alignment_table", + "pages_b05_profile_b05_frontend_alignment_비정규_측점_구조물_테이블_오버레이_런타임_검증_ui_profile_table_ts_ui_irregularstations_ts", + "pages_b05_profile_b05_frontend_alignment_종단_계획고_편집_인터랙션_ui_profile_edit_ts_ui_profile_panel_ts_ui_page_ts" + ], + "68": [ + "pages_b05_profile_b05_structure_stations", + "pages_b05_profile_b05_structure_stations_b05_구조물_비정규_측점_공급", + "pages_b05_profile_b05_structure_stations_검증", + "pages_b05_profile_b05_structure_stations_공급_경로", + "pages_b05_profile_b05_structure_stations_정본_규칙" + ], + "69": [ + "pages_b05_profile_frontend_b05_profile_ui_drainage_parts", + "pages_b05_profile_frontend_b05_profile_ui_drainage_parts_1_개요_및_역할", + "pages_b05_profile_frontend_b05_profile_ui_drainage_parts_2_주요_기능_및_함수", + "pages_b05_profile_frontend_b05_profile_ui_drainage_parts_3_의존성", + "pages_b05_profile_frontend_b05_profile_ui_drainage_parts_b05_profile_ui_drainage_parts_배수유역_공용_ui_파츠" + ], + "70": [ + "pages_b05_profile_frontend_ui_drainage_render", + "pages_b05_profile_frontend_ui_drainage_render_1_개요_및_역할", + "pages_b05_profile_frontend_ui_drainage_render_2_주요_기능_및_함수", + "pages_b05_profile_frontend_ui_drainage_render_3_의존성", + "pages_b05_profile_frontend_ui_drainage_render_ui_drainage_render_배수유역도_canvas_렌더러" + ], + "71": [ + "pages_b05_profile_frontend_ui_profile_structures", + "pages_b05_profile_frontend_ui_profile_structures_1_개요_및_역할", + "pages_b05_profile_frontend_ui_profile_structures_2_주요_기능_및_함수", + "pages_b05_profile_frontend_ui_profile_structures_3_의존성", + "pages_b05_profile_frontend_ui_profile_structures_ui_profile_structures_종단_구조물_렌더링_및_인터랙션" + ], + "72": [ + "pages_b05_profile_frontend_ui_selection", + "pages_b05_profile_frontend_ui_selection_1_개요_및_역할", + "pages_b05_profile_frontend_ui_selection_2_주요_기능_및_함수", + "pages_b05_profile_frontend_ui_selection_3_의존성", + "pages_b05_profile_frontend_ui_selection_ui_selection_배수_구조물_3자_선택_동기화" + ], + "73": [ + "pages_b06_section_b06_culvert_link_trim", + "pages_b06_section_b06_culvert_link_trim_b06_인접_측점_구조물_트림_정리", + "pages_b06_section_b06_culvert_link_trim_검증", + "pages_b06_section_b06_culvert_link_trim_원인과_경계", + "pages_b06_section_b06_culvert_link_trim_처리_항목" + ], + "74": [ + "pages_b06_section_b06_pavement_revetment", + "pages_b06_section_b06_pavement_revetment_b06_물넘이포장_콘크리트_포장_독립_기슭막이", + "pages_b06_section_b06_pavement_revetment_검증", + "pages_b06_section_b06_pavement_revetment_독립_기슭막이", + "pages_b06_section_b06_pavement_revetment_포장과_물넘이" + ], + "75": [ + "pages_b06_section_backend_b06_section_engine_areas", + "pages_b06_section_backend_b06_section_engine_areas_1_개요_및_역할", + "pages_b06_section_backend_b06_section_engine_areas_2_주요_기능_및_함수", + "pages_b06_section_backend_b06_section_engine_areas_3_의존성", + "pages_b06_section_backend_b06_section_engine_areas_b06_section_engine_areas_횡단_면적_적분_연산_엔진" + ], + "76": [ + "pages_b06_section_backend_b06_section_router_confirm", + "pages_b06_section_backend_b06_section_router_confirm_1_개요_및_역할", + "pages_b06_section_backend_b06_section_router_confirm_2_주요_기능_및_엔드포인트", + "pages_b06_section_backend_b06_section_router_confirm_3_의존성", + "pages_b06_section_backend_b06_section_router_confirm_b06_section_router_confirm_임시_저장_및_확정_라우터" + ], + "77": [ + "pages_b06_section_frontend_b06_section_ui_cross_areas", + "pages_b06_section_frontend_b06_section_ui_cross_areas_1_개요_및_역할", + "pages_b06_section_frontend_b06_section_ui_cross_areas_2_주요_기능_및_함수", + "pages_b06_section_frontend_b06_section_ui_cross_areas_3_의존성", + "pages_b06_section_frontend_b06_section_ui_cross_areas_b06_section_ui_cross_areas_횡단_단면적_표기_및_밴드_하이라이트" + ], + "78": [ + "pages_b06_section_frontend_b06_section_ui_cross_design", + "pages_b06_section_frontend_b06_section_ui_cross_design_1_개요_및_역할", + "pages_b06_section_frontend_b06_section_ui_cross_design_2_주요_기능_및_함수", + "pages_b06_section_frontend_b06_section_ui_cross_design_3_의존성", + "pages_b06_section_frontend_b06_section_ui_cross_design_b06_section_ui_cross_design_횡단_측점별_세부_설계_컨트롤" + ], + "79": [ + "pages_b06_section_frontend_b06_section_ui_masshaul", + "pages_b06_section_frontend_b06_section_ui_masshaul_1_개요_및_역할", + "pages_b06_section_frontend_b06_section_ui_masshaul_2_주요_기능_및_함수", + "pages_b06_section_frontend_b06_section_ui_masshaul_3_의존성", + "pages_b06_section_frontend_b06_section_ui_masshaul_b06_section_ui_masshaul_유토곡선_적분_계산_엔진" + ], + "80": [ + "pages_b06_section_frontend_b06_section_ui_masshaul_balance", + "pages_b06_section_frontend_b06_section_ui_masshaul_balance_1_개요_및_역할", + "pages_b06_section_frontend_b06_section_ui_masshaul_balance_2_주요_기능_및_알고리즘", + "pages_b06_section_frontend_b06_section_ui_masshaul_balance_3_의존성", + "pages_b06_section_frontend_b06_section_ui_masshaul_balance_b06_section_ui_masshaul_balance_평형선_및_장비_띠_분할_엔진" + ], + "81": [ + "pages_b06_section_frontend_b06_section_ui_masshaul_balance_view", + "pages_b06_section_frontend_b06_section_ui_masshaul_balance_view_1_개요_및_역할", + "pages_b06_section_frontend_b06_section_ui_masshaul_balance_view_2_주요_기능_및_렌더링", + "pages_b06_section_frontend_b06_section_ui_masshaul_balance_view_3_의존성", + "pages_b06_section_frontend_b06_section_ui_masshaul_balance_view_b06_section_ui_masshaul_balance_view_운반_띠_시각화_렌더러" + ], + "82": [ + "pages_b06_section_frontend_b06_section_ui_masshaul_balloon", + "pages_b06_section_frontend_b06_section_ui_masshaul_balloon_1_개요_및_역할", + "pages_b06_section_frontend_b06_section_ui_masshaul_balloon_2_주요_기능_및_알고리즘", + "pages_b06_section_frontend_b06_section_ui_masshaul_balloon_3_의존성", + "pages_b06_section_frontend_b06_section_ui_masshaul_balloon_b06_section_ui_masshaul_balloon_물량_말풍선_배치_및_조작" + ], + "83": [ + "pages_b06_section_frontend_b06_section_ui_masshaul_curve", + "pages_b06_section_frontend_b06_section_ui_masshaul_curve_1_개요_및_역할", + "pages_b06_section_frontend_b06_section_ui_masshaul_curve_2_주요_기능_및_기하_수학", + "pages_b06_section_frontend_b06_section_ui_masshaul_curve_3_의존성", + "pages_b06_section_frontend_b06_section_ui_masshaul_curve_b06_section_ui_masshaul_curve_유토곡선_궤적_보간_및_렌더링" + ], + "84": [ + "pages_b06_section_frontend_b06_section_ui_masshaul_settle", + "pages_b06_section_frontend_b06_section_ui_masshaul_settle_1_개요_및_역할", + "pages_b06_section_frontend_b06_section_ui_masshaul_settle_2_주요_기능_및_로직", + "pages_b06_section_frontend_b06_section_ui_masshaul_settle_3_의존성", + "pages_b06_section_frontend_b06_section_ui_masshaul_settle_b06_section_ui_masshaul_settle_토량_정산_및_장거리_상쇄_엔진" + ], + "85": [ + "pages_b06_section_frontend_b06_section_ui_masshaul_view", + "pages_b06_section_frontend_b06_section_ui_masshaul_view_1_개요_및_역할", + "pages_b06_section_frontend_b06_section_ui_masshaul_view_2_주요_기능_및_함수", + "pages_b06_section_frontend_b06_section_ui_masshaul_view_3_의존성", + "pages_b06_section_frontend_b06_section_ui_masshaul_view_b06_section_ui_masshaul_view_유토곡선_시각화_렌더러" + ], + "86": [ + "pages_b06_section_frontend_b06_section_ui_page", + "pages_b06_section_frontend_b06_section_ui_page_1_개요_및_역할", + "pages_b06_section_frontend_b06_section_ui_page_2_주요_기능_및_함수", + "pages_b06_section_frontend_b06_section_ui_page_3_의존성", + "pages_b06_section_frontend_b06_section_ui_page_b06_section_ui_page_b06_메인_페이지_오케스트레이터" + ], + "87": [ + "pages_b06_section_frontend_b06_section_ui_section_view", + "pages_b06_section_frontend_b06_section_ui_section_view_1_개요_및_역할", + "pages_b06_section_frontend_b06_section_ui_section_view_2_주요_기능_및_함수", + "pages_b06_section_frontend_b06_section_ui_section_view_3_의존성", + "pages_b06_section_frontend_b06_section_ui_section_view_b06_section_ui_section_view_종_횡단_및_유토곡선_뷰_조립" + ], + "88": [ + "pages_b07_quantity_b07_backend", + "pages_b07_quantity_b07_backend_b07_quantity_backend", + "pages_b07_quantity_b07_backend_구현되지_않은_항목", + "pages_b07_quantity_b07_backend_구현된_항목", + "pages_b07_quantity_b07_backend_책임_경계_미결" + ], + "89": [ + "pages_b08_designdetail_b08_cad_blocks", + "pages_b08_designdetail_b08_cad_blocks_b08_cad_블록_라이브러리_사진", + "pages_b08_designdetail_b08_cad_blocks_검증", + "pages_b08_designdetail_b08_cad_blocks_구현", + "pages_b08_designdetail_b08_cad_blocks_범위_결정" + ], + "90": [ + "pages_b08_designdetail_b08_cad_commands", + "pages_b08_designdetail_b08_cad_commands_b08_openwebcad_명령_체계", + "pages_b08_designdetail_b08_cad_commands_검증_제한", + "pages_b08_designdetail_b08_cad_commands_구현_범위", + "pages_b08_designdetail_b08_cad_commands_핵심_구성" + ], + "91": [ + "pages_b08_designdetail_b08_cad_table_entity", + "pages_b08_designdetail_b08_cad_table_entity_검증_후속", + "pages_b08_designdetail_b08_cad_table_entity_기능", + "pages_b08_designdetail_b08_cad_table_entity_모델", + "pages_b08_designdetail_b08_cad_table_entity_이관_범위" + ], + "92": [ + "architecture_public_admin_map", + "architecture_public_admin_map_공개_인증_관리_영역_지도", + "architecture_public_admin_map_공통_의존", + "architecture_public_admin_map_직접_구현_관계" + ], + "93": [ + "architecture_shared_resources", + "architecture_shared_resources_공유_자원_영향_지도", + "architecture_shared_resources_단계별_직접_연결", + "architecture_shared_resources_영향_분석_규칙" + ], + "94": [ + "pages_a00_common_a00_common", + "pages_a00_common_a00_common_a00_common_공통_프레임워크_유틸", + "pages_a00_common_a00_common_개요", + "pages_a00_common_a00_common_세분화_마크다운_문서_목록" + ], + "95": [ + "pages_a00_common_frontend_a00_common_appshell", + "pages_a00_common_frontend_a00_common_appshell_app_shell_ts", + "pages_a00_common_frontend_a00_common_appshell_연관_개념_및_의존성", + "pages_a00_common_frontend_a00_common_appshell_주요_함수_목록" + ], + "96": [ + "pages_a00_common_frontend_a00_common_router", + "pages_a00_common_frontend_a00_common_router_router_ts", + "pages_a00_common_frontend_a00_common_router_연관_개념_및_의존성", + "pages_a00_common_frontend_a00_common_router_주요_함수_목록" + ], + "97": [ + "pages_b04_preprocess_b04_api", + "pages_b04_preprocess_b04_api_b04_preprocess_api", + "pages_b04_preprocess_b04_api_엔드포인트", + "pages_b04_preprocess_b04_api_요청_응답_스키마_pydantic" + ], + "98": [ + "pages_b04_preprocess_b04_dependencies", + "pages_b04_preprocess_b04_dependencies_b04_preprocess_dependencies", + "pages_b04_preprocess_b04_dependencies_백엔드_python", + "pages_b04_preprocess_b04_dependencies_프론트엔드_typescript" + ], + "99": [ + "pages_b05_profile_b05_backend", + "pages_b05_profile_b05_backend_b05_profile_backend", + "pages_b05_profile_b05_backend_소스코드_1_1_세분화_위키_파일_목록", + "pages_b05_profile_b05_backend_핵심_백엔드_아키텍처_개요" + ], + "100": [ + "pages_b05_profile_b05_db", + "pages_b05_profile_b05_db_b05_profile_db_사용_관계", + "pages_b05_profile_b05_db_repository_함수", + "pages_b05_profile_b05_db_저장_경로" + ], + "101": [ + "pages_b05_profile_b05_frontend_viewer", + "pages_b05_profile_b05_frontend_viewer_3d_마커_직접_드래그_이동_0_old_i_401_이식", + "pages_b05_profile_b05_frontend_viewer_3d_지형_뷰포트_시각화_ui_viewer_ts_ui_markers_ts", + "pages_b05_profile_b05_frontend_viewer_b05_profile_3d_viewer_interaction" + ], + "102": [ + "pages_b05_profile_backend_b05_profile_engine_sections", + "pages_b05_profile_backend_b05_profile_engine_sections_런타임_검증_주의사항_2026_07_24_검증_보고서_기준", + "pages_b05_profile_backend_b05_profile_engine_sections_연관_개념_및_의존성", + "pages_b05_profile_backend_b05_profile_engine_sections_주요_함수_목록" + ], + "103": [ + "pages_b05_profile_frontend_b05_profile_api_fetch", + "pages_b05_profile_frontend_b05_profile_api_fetch_b05_profile_api_fetch_ts", + "pages_b05_profile_frontend_b05_profile_api_fetch_연관_개념_및_의존성", + "pages_b05_profile_frontend_b05_profile_api_fetch_주요_api_함수_목록" + ], + "104": [ + "pages_b05_profile_frontend_b05_profile_ui_drainage_panel", + "pages_b05_profile_frontend_b05_profile_ui_drainage_panel_b05_profile_ui_drainage_panel", + "pages_b05_profile_frontend_b05_profile_ui_drainage_panel_개요_및_특징", + "pages_b05_profile_frontend_b05_profile_ui_drainage_panel_주요_함수_심볼_목록" + ], + "105": [ + "pages_b05_profile_frontend_b05_profile_ui_drainage_pipes", + "pages_b05_profile_frontend_b05_profile_ui_drainage_pipes_b05_profile_ui_drainage_pipes", + "pages_b05_profile_frontend_b05_profile_ui_drainage_pipes_개요_및_특징", + "pages_b05_profile_frontend_b05_profile_ui_drainage_pipes_주요_함수_심볼_목록" + ], + "106": [ + "pages_b05_profile_frontend_b05_profile_ui_profile_panel", + "pages_b05_profile_frontend_b05_profile_ui_profile_panel_연관_개념_및_의존성", + "pages_b05_profile_frontend_b05_profile_ui_profile_panel_주요_기능_및_개선사항_2026_08_06", + "pages_b05_profile_frontend_b05_profile_ui_profile_panel_주요_함수_목록" + ], + "107": [ + "pages_b06_section_b06_db", + "pages_b06_section_b06_db_b06_section_db_사용_관계", + "pages_b06_section_b06_db_repository_함수", + "pages_b06_section_b06_db_파일_경로" + ], + "108": [ + "pages_b06_section_frontend_b06_section_api_fetch", + "pages_b06_section_frontend_b06_section_api_fetch_1_개요_및_역할", + "pages_b06_section_frontend_b06_section_api_fetch_2_주요_연동_api_함수", + "pages_b06_section_frontend_b06_section_api_fetch_b06_section_api_fetch_b06_프론트엔드_api_클라이언트" + ], + "109": [ + "pages_b06_section_frontend_b06_section_ui_standard_diagram", + "pages_b06_section_frontend_b06_section_ui_standard_diagram_1_개요_및_역할", + "pages_b06_section_frontend_b06_section_ui_standard_diagram_2_주요_기능", + "pages_b06_section_frontend_b06_section_ui_standard_diagram_b06_section_ui_standard_diagram_표준단면_모식도_컴포넌트" + ], + "110": [ + "pages_b06_section_frontend_b06_section_ui_standard_panel", + "pages_b06_section_frontend_b06_section_ui_standard_panel_1_개요_및_역할", + "pages_b06_section_frontend_b06_section_ui_standard_panel_2_주요_기능", + "pages_b06_section_frontend_b06_section_ui_standard_panel_b06_section_ui_standard_panel_표준단면_입력_및_제어_패널" + ], + "111": [ + "pages_b08_designdetail_b08_dependencies", + "pages_b08_designdetail_b08_dependencies_b08_designdetail_dependencies", + "pages_b08_designdetail_b08_dependencies_backend_requirements_txt", + "pages_b08_designdetail_b08_dependencies_frontend_package_json_tsconfig_json" + ], + "112": [ + "concepts_common_util_common_util_project_delete", + "concepts_common_util_common_util_project_delete_역참조_사용처", + "concepts_common_util_common_util_project_delete_주요_함수_목록" + ], + "113": [ + "concepts_common_util_common_util_storage", + "concepts_common_util_common_util_storage_역참조_사용처", + "concepts_common_util_common_util_storage_주요_함수_목록" + ], + "114": [ + "concepts_common_util_common_util_workflow_state", + "concepts_common_util_common_util_workflow_state_역참조_사용처", + "concepts_common_util_common_util_workflow_state_주요_함수_목록" + ], + "115": [ + "concepts_db_schema_unconfirmed_readme", + "concepts_db_schema_unconfirmed_readme_미확정_테이블_보관소_unconfirmed_db_schemas", + "concepts_db_schema_unconfirmed_readme_운영_규칙" + ], + "116": [ + "pages_a01_home_frontend_a01_home_ui_page", + "pages_a01_home_frontend_a01_home_ui_page_연관_개념_및_의존성", + "pages_a01_home_frontend_a01_home_ui_page_주요_함수_및_인터페이스_목록" + ], + "117": [ + "pages_a02_progdetail_frontend_a02_progdetail_ui_page", + "pages_a02_progdetail_frontend_a02_progdetail_ui_page_연관_개념_및_의존성", + "pages_a02_progdetail_frontend_a02_progdetail_ui_page_주요_함수_목록" + ], + "118": [ + "pages_a06_login_backend_a06_login_router", + "pages_a06_login_backend_a06_login_router_라우터_api_및_주요_헬퍼_함수_목록", + "pages_a06_login_backend_a06_login_router_연관_개념_및_의존성" + ], + "119": [ + "pages_a07_register_backend_a07_register_router", + "pages_a07_register_backend_a07_register_router_라우터_api_및_주요_함수_목록", + "pages_a07_register_backend_a07_register_router_연관_개념_및_의존성" + ], + "120": [ + "pages_a08_support_backend_a08_support_router", + "pages_a08_support_backend_a08_support_router_라우터_api_및_주요_함수_목록", + "pages_a08_support_backend_a08_support_router_연관_개념_및_의존성" + ], + "121": [ + "pages_a09_security_backend_a09_security_router", + "pages_a09_security_backend_a09_security_router_라우터_api_및_주요_함수_목록", + "pages_a09_security_backend_a09_security_router_연관_개념_및_의존성" + ], + "122": [ + "pages_b01_dashboard_b01_db", + "pages_b01_dashboard_b01_db_b01_dashboard_db_사용_관계", + "pages_b01_dashboard_b01_db_트랜잭션_경계" + ], + "123": [ + "pages_b01_dashboard_b01_dependencies", + "pages_b01_dashboard_b01_dependencies_b01_dashboard_dependencies", + "pages_b01_dashboard_b01_dependencies_프로젝트_공통_모듈" + ], + "124": [ + "pages_b01_dashboard_backend_b01_dashboard_router", + "pages_b01_dashboard_backend_b01_dashboard_router_라우터_api_및_주요_함수_목록", + "pages_b01_dashboard_backend_b01_dashboard_router_연관_개념_및_의존성" + ], + "125": [ + "pages_b01_dashboard_frontend_b01_dashboard_ui_page", + "pages_b01_dashboard_frontend_b01_dashboard_ui_page_연관_개념_및_의존성", + "pages_b01_dashboard_frontend_b01_dashboard_ui_page_주요_함수_목록" + ], + "126": [ + "pages_b02_projregister_backend_b02_projregister_router", + "pages_b02_projregister_backend_b02_projregister_router_연관_개념_및_의존성", + "pages_b02_projregister_backend_b02_projregister_router_주요_함수_목록" + ], + "127": [ + "pages_b03_fileinput_b03_db", + "pages_b03_fileinput_b03_db_b03_fileinput_db_사용_관계", + "pages_b03_fileinput_b03_db_파일_경로" + ], + "128": [ + "pages_b03_fileinput_b03_dependencies", + "pages_b03_fileinput_b03_dependencies_b03_fileinput_dependencies", + "pages_b03_fileinput_b03_dependencies_공통_모듈" + ], + "129": [ + "pages_b03_fileinput_backend_b03_fileinput_router", + "pages_b03_fileinput_backend_b03_fileinput_router_연관_개념_및_의존성", + "pages_b03_fileinput_backend_b03_fileinput_router_주요_함수_목록" + ], + "130": [ + "pages_b04_preprocess_backend_b04_preprocess_router", + "pages_b04_preprocess_backend_b04_preprocess_router_연관_개념_및_의존성", + "pages_b04_preprocess_backend_b04_preprocess_router_주요_함수_목록" + ], + "131": [ + "pages_b05_profile_b05_dependencies", + "pages_b05_profile_b05_dependencies_b05_profile_dependencies", + "pages_b05_profile_b05_dependencies_페이지_파일별_연결" + ], + "132": [ + "pages_b05_profile_backend_b05_profile_engine_grade", + "pages_b05_profile_backend_b05_profile_engine_grade_연관_개념_및_의존성", + "pages_b05_profile_backend_b05_profile_engine_grade_주요_클래스_및_함수_목록" + ], + "133": [ + "pages_b05_profile_backend_b05_profile_engine_solver", + "pages_b05_profile_backend_b05_profile_engine_solver_엔진_핵심_함수_목록", + "pages_b05_profile_backend_b05_profile_engine_solver_연관_개념_및_의존성" + ], + "134": [ + "pages_b05_profile_backend_b05_profile_repository", + "pages_b05_profile_backend_b05_profile_repository_db_접근_함수_목록", + "pages_b05_profile_backend_b05_profile_repository_연관_개념_및_의존성" + ], + "135": [ + "pages_b05_profile_backend_b05_profile_router", + "pages_b05_profile_backend_b05_profile_router_라우터_api_및_주요_함수_목록", + "pages_b05_profile_backend_b05_profile_router_연관_모듈_및_의존성" + ], + "136": [ + "pages_b05_profile_backend_b05_profile_router_confirm", + "pages_b05_profile_backend_b05_profile_router_confirm_연관_모듈", + "pages_b05_profile_backend_b05_profile_router_confirm_주요_헬퍼_함수_목록" + ], + "137": [ + "pages_b05_profile_backend_b05_profile_schema", + "pages_b05_profile_backend_b05_profile_schema_pydantic_모델_및_검증_헬퍼_목록", + "pages_b05_profile_backend_b05_profile_schema_연관_개념_및_의존성" + ], + "138": [ + "pages_b05_profile_frontend_b05_profile_ui_irregularstations", + "pages_b05_profile_frontend_b05_profile_ui_irregularstations_연관_개념_및_의존성", + "pages_b05_profile_frontend_b05_profile_ui_irregularstations_주요_인터페이스_및_함수_목록" + ], + "139": [ + "pages_b05_profile_frontend_b05_profile_ui_page", + "pages_b05_profile_frontend_b05_profile_ui_page_연관_개념_및_의존성", + "pages_b05_profile_frontend_b05_profile_ui_page_주요_컴포넌트_및_함수_목록" + ], + "140": [ + "pages_b05_profile_frontend_b05_profile_ui_panel", + "pages_b05_profile_frontend_b05_profile_ui_panel_연관_개념_및_의존성", + "pages_b05_profile_frontend_b05_profile_ui_panel_주요_함수_목록" + ], + "141": [ + "pages_b05_profile_frontend_b05_profile_ui_profile_alignment", + "pages_b05_profile_frontend_b05_profile_ui_profile_alignment_연관_개념_및_의존성", + "pages_b05_profile_frontend_b05_profile_ui_profile_alignment_주요_함수_목록" + ], + "142": [ + "pages_b05_profile_frontend_b05_profile_ui_profile_table", + "pages_b05_profile_frontend_b05_profile_ui_profile_table_연관_개념_및_의존성", + "pages_b05_profile_frontend_b05_profile_ui_profile_table_주요_함수_목록" + ], + "143": [ + "pages_b05_profile_frontend_b05_profile_ui_viewer", + "pages_b05_profile_frontend_b05_profile_ui_viewer_연관_개념_및_의존성", + "pages_b05_profile_frontend_b05_profile_ui_viewer_주요_함수_목록" + ], + "144": [ + "pages_b06_section_b06_dependencies", + "pages_b06_section_b06_dependencies_b06_section_dependencies", + "pages_b06_section_b06_dependencies_공통_모듈" + ], + "145": [ + "pages_b06_section_backend_b06_section_router", + "pages_b06_section_backend_b06_section_router_라우터_api_및_주요_함수_목록", + "pages_b06_section_backend_b06_section_router_연관_개념_및_의존성" + ], + "146": [ + "architecture_workflow_data_flow_b01_b09_workflow_데이터_흐름", + "architecture_workflow_data_flow_b04_b06_자동_계산과_재설계", + "architecture_workflow_data_flow_단계_관계", + "architecture_workflow_data_flow_상태와_산출물_무효화", + "architecture_workflow_data_flow_정본_위치" + ], + "147": [ + "pages_b08_designdetail_b08_api", + "pages_b08_designdetail_b08_api_api_엔드포인트", + "pages_b08_designdetail_b08_api_b08_designdetail_api" + ], + "148": [ + "concepts_db_schema_route_profile_longitudinal_alignment", + "concepts_db_schema_route_profile_longitudinal_alignment_db_longitudinal_sections_data_profile_alignment_구조" + ], + "149": [ + "pages_b03_fileinput_b03_fileinput_plan_lidar_multi_file", + "pages_b03_fileinput_b03_fileinput_plan_lidar_multi_file_b03_다중_라이다_파일_대용량_처리_보류_계획" + ], + "150": [ + "pages_b05_profile_b05_completed_followups", + "pages_b05_profile_b05_completed_followups_b05_후속_완료_항목" + ], + "151": [ + "pages_b05_profile_b05_corridor_followup_decisions", + "pages_b05_profile_b05_corridor_followup_decisions_b05_구조물_3d_후속_판정" + ], + "152": [ + "pages_b06_section_b06_api", + "pages_b06_section_b06_api_b06_section_api" + ], + "153": [ + "pages_b07_quantity_b07_db", + "pages_b07_quantity_b07_db_b07_quantity_db" + ], + "154": [ + "pages_b08_designdetail_backend_b08_designdetail_router", + "pages_b08_designdetail_backend_b08_designdetail_router_실제_api" + ], + "155": [ + "pages_b09_estimation_frontend_b09_estimation_ui_page", + "pages_b09_estimation_frontend_b09_estimation_ui_page_주요_함수_목록" + ], + "156": [ + "pages_b10_payment_frontend_b10_payment_ui_page", + "pages_b10_payment_frontend_b10_payment_ui_page_주요_함수_목록" + ], + "157": [ + "pages_b11_status_frontend_b11_status_ui_page", + "pages_b11_status_frontend_b11_status_ui_page_주요_함수_목록" + ], + "158": [ + "b03_fileinput_route_snapshot_crs" + ], + "159": [ + "b03_fileinput_upload_ui_2026_09" + ], + "160": [ + "b04_preprocess_compass_crs_2026_09" + ], + "161": [ + "b04_preprocess_drainage_compass_crs" + ], + "162": [ + "b05_profile_corridor_cut_fill" + ], + "163": [ + "b05_profile_corridor_plan_curves" + ], + "164": [ + "b05_profile_frontend" + ], + "165": [ + "b05_profile_masshaul_structure_2026_09" + ], + "166": [ + "b05_profile_profile_interaction_2026_09" + ], + "167": [ + "b06_section_cross_design_ui_2026_09" + ], + "168": [ + "b06_section_masshaul_culvert_2026_09" + ], + "169": [ + "b08_designdetail_b08_designdetail_engine_cad_basin_py" + ], + "170": [ + "b08_designdetail_b08_designdetail_engine_cad_masshaul_py" + ], + "171": [ + "b08_designdetail_cad_delivery_2026_09" + ], + "172": [ + "b08_designdetail_cad_interaction" + ], + "173": [ + "b08_designdetail_cad_title_block" + ], + "174": [ + "b08_designdetail_cad_usability_2026_09_01" + ], + "175": [ + "b08_designdetail_frontend" + ], + "176": [ + "b08_designdetail_openwebcad_app" + ], + "177": [ + "common_util_common_util_mass_haul_settle_ts" + ], + "178": [ + "concept_drainage_watershed" + ], + "179": [ + "concept_mass_haul_diagram" + ], + "180": [ + "concepts_completed_2026_09_01" + ], + "181": [ + "concepts_completed_2026_09_01_followups" + ], + "182": [ + "concepts_completed_2026_09_02" + ], + "183": [ + "concepts_completed_2026_09_03" + ], + "184": [ + "concepts_completed_2026_09_03_additional" + ], + "185": [ + "graphify_out_memory_query_20260821_101018_임도_기술정보db에서_집수정의_형태정보는_어떤게_있는지_확인해줘_md_query" + ], + "186": [ + "index" + ], + "187": [ + "pages_b03_fileinput_backend" + ], + "188": [ + "pages_b03_fileinput_frontend" + ], + "189": [ + "pages_b04_preprocess_backend" + ], + "190": [ + "pages_b04_preprocess_frontend" + ], + "191": [ + "pages_b07_quantity_backend_b07_quantity_router" + ], + "192": [ + "pages_b08_designdetail_cad_blocks" + ], + "193": [ + "pages_b08_designdetail_cad_table_entity" + ], + "194": [ + "pages_b08_designdetail_cross_structure_sheets" + ], + "195": [ + "query_20260821_070423_배수관_매설시_각도의_제약조건이_있는지_확인해줘__임도_md_query" + ], + "196": [ + "pages_b06_section_b06_backend_b06_section_backend", + "pages_b06_section_b06_backend_계산_엔진", + "pages_b06_section_b06_backend_데이터_영구_저장_및_환경설정", + "pages_b06_section_b06_backend_라우터_workflow_조회_확정_타_프로젝트_불러오기_및_재생성", + "pages_b06_section_b06_backend_요청_응답_모델" + ] + }, + "cohesion": { + "0": 0.06451612903225806, + "1": 0.04878048780487805, + "2": 0.13333333333333333, + "3": 0.125, + "4": 0.125, + "5": 0.16666666666666666, + "6": 0.16666666666666666, + "7": 0.18181818181818182, + "8": 0.18181818181818182, + "9": 0.18181818181818182, + "10": 0.18181818181818182, + "11": 0.18181818181818182, + "12": 0.18181818181818182, + "13": 0.18181818181818182, + "14": 0.2, + "15": 0.2, + "16": 0.2, + "17": 0.2, + "18": 0.2, + "19": 0.2, + "20": 0.2, + "21": 0.2, + "22": 0.2, + "23": 0.2, + "24": 0.2222222222222222, + "25": 0.2222222222222222, + "26": 0.2222222222222222, + "27": 0.25, + "28": 0.25, + "29": 0.25, + "30": 0.25, + "31": 0.25, + "32": 0.25, + "33": 0.2857142857142857, + "34": 0.2857142857142857, + "35": 0.2857142857142857, + "36": 0.2857142857142857, + "37": 0.2857142857142857, + "38": 0.2857142857142857, + "39": 0.2857142857142857, + "40": 0.2857142857142857, + "41": 0.2857142857142857, + "42": 0.2857142857142857, + "43": 0.2857142857142857, + "44": 0.15384615384615385, + "45": 0.3333333333333333, + "46": 0.2857142857142857, + "47": 0.3333333333333333, + "48": 0.3333333333333333, + "49": 0.3333333333333333, + "50": 0.3333333333333333, + "51": 0.3333333333333333, + "52": 0.3333333333333333, + "53": 0.3333333333333333, + "54": 0.3333333333333333, + "55": 0.2, + "56": 0.3333333333333333, + "57": 0.3333333333333333, + "58": 0.4, + "59": 0.4, + "60": 0.4, + "61": 0.4, + "62": 0.4, + "63": 0.4, + "64": 0.4, + "65": 0.4, + "66": 0.4, + "67": 0.4, + "68": 0.4, + "69": 0.4, + "70": 0.4, + "71": 0.4, + "72": 0.4, + "73": 0.4, + "74": 0.4, + "75": 0.4, + "76": 0.4, + "77": 0.4, + "78": 0.4, + "79": 0.4, + "80": 0.4, + "81": 0.4, + "82": 0.4, + "83": 0.4, + "84": 0.4, + "85": 0.4, + "86": 0.4, + "87": 0.4, + "88": 0.4, + "89": 0.4, + "90": 0.4, + "91": 0.4, + "92": 0.5, + "93": 0.5, + "94": 0.5, + "95": 0.5, + "96": 0.5, + "97": 0.5, + "98": 0.5, + "99": 0.5, + "100": 0.5, + "101": 0.5, + "102": 0.5, + "103": 0.5, + "104": 0.5, + "105": 0.5, + "106": 0.5, + "107": 0.5, + "108": 0.5, + "109": 0.5, + "110": 0.5, + "111": 0.5, + "112": 0.6666666666666666, + "113": 0.6666666666666666, + "114": 0.6666666666666666, + "115": 0.6666666666666666, + "116": 0.6666666666666666, + "117": 0.6666666666666666, + "118": 0.6666666666666666, + "119": 0.6666666666666666, + "120": 0.6666666666666666, + "121": 0.6666666666666666, + "122": 0.6666666666666666, + "123": 0.6666666666666666, + "124": 0.6666666666666666, + "125": 0.6666666666666666, + "126": 0.6666666666666666, + "127": 0.6666666666666666, + "128": 0.6666666666666666, + "129": 0.6666666666666666, + "130": 0.6666666666666666, + "131": 0.6666666666666666, + "132": 0.6666666666666666, + "133": 0.6666666666666666, + "134": 0.6666666666666666, + "135": 0.6666666666666666, + "136": 0.6666666666666666, + "137": 0.6666666666666666, + "138": 0.6666666666666666, + "139": 0.6666666666666666, + "140": 0.6666666666666666, + "141": 0.6666666666666666, + "142": 0.6666666666666666, + "143": 0.6666666666666666, + "144": 0.6666666666666666, + "145": 0.6666666666666666, + "146": 0.4, + "147": 0.6666666666666666, + "148": 1.0, + "149": 1.0, + "150": 1.0, + "151": 1.0, + "152": 1.0, + "153": 1.0, + "154": 1.0, + "155": 1.0, + "156": 1.0, + "157": 1.0, + "158": 1.0, + "159": 1.0, + "160": 1.0, + "161": 1.0, + "162": 1.0, + "163": 1.0, + "164": 1.0, + "165": 1.0, + "166": 1.0, + "167": 1.0, + "168": 1.0, + "169": 1.0, + "170": 1.0, + "171": 1.0, + "172": 1.0, + "173": 1.0, + "174": 1.0, + "175": 1.0, + "176": 1.0, + "177": 1.0, + "178": 1.0, + "179": 1.0, + "180": 1.0, + "181": 1.0, + "182": 1.0, + "183": 1.0, + "184": 1.0, + "185": 1.0, + "186": 1.0, + "187": 1.0, + "188": 1.0, + "189": 1.0, + "190": 1.0, + "191": 1.0, + "192": 1.0, + "193": 1.0, + "194": 1.0, + "195": 1.0, + "196": 0.4 + }, + "gods": [ + { + "id": "concepts_completed_2026_09_04", + "label": "2026-09-04 완료 항목", + "degree": 17 + }, + { + "id": "concepts_ui_templates_ui_templates_localization_components", + "label": "UI Templates — Localization & Components", + "degree": 12 + }, + { + "id": "concepts_db_schema_logs_monitoring_db_로그_모니터링_테이블", + "label": "DB: 로그/모니터링 테이블", + "degree": 11 + }, + { + "id": "concepts_completed_2026_08_29_2026_08_29_완료_반영", + "label": "2026-08-29 완료 반영", + "degree": 10 + }, + { + "id": "concepts_db_schema_files_surface_db_파일_지표면분석_테이블", + "label": "DB: 파일/지표면분석 테이블", + "degree": 10 + }, + { + "id": "pages_a07_register_a07_frontend_a07_register_frontend", + "label": "A07_Register — Frontend", + "degree": 10 + }, + { + "id": "pages_a08_support_a08_frontend_a08_support_frontend", + "label": "A08_Support — Frontend", + "degree": 10 + }, + { + "id": "pages_b02_projregister_b02_frontend_b02_projregister_frontend", + "label": "B02_ProjRegister — Frontend", + "degree": 10 + }, + { + "id": "concepts_auth_rbac_인증_rbac", + "label": "인증 / RBAC", + "degree": 9 + }, + { + "id": "concepts_drainage_watershed_배수유역_해석_및_세부설계_drainage_watershed", + "label": "배수유역 해석 및 세부설계 (Drainage Watershed)", + "degree": 9 + } + ], + "surprises": [ + { + "source": "2026-09-04 완료 항목", + "target": "B05_Profile/B05_backend", + "source_files": [ + "concepts/completed_2026-09-04.md", + "B05_Profile/B05_backend.md" + ], + "confidence": "EXTRACTED", + "relation": "references", + "why": "connects across different repos/directories; bridges separate communities; peripheral node `B05_Profile/B05_backend` unexpectedly reaches hub `2026-09-04 완료 항목`" + }, + { + "source": "2026-09-04 완료 항목", + "target": "B08_DesignDetail/B08_frontend", + "source_files": [ + "concepts/completed_2026-09-04.md", + "B08_DesignDetail/B08_frontend.md" + ], + "confidence": "EXTRACTED", + "relation": "references", + "why": "connects across different repos/directories; bridges separate communities; peripheral node `B08_DesignDetail/B08_frontend` unexpectedly reaches hub `2026-09-04 완료 항목`" + }, + { + "source": "B07 구조물 표준도 — 조사·합의와 현재 통로", + "target": "표준도·수량·원가 입력의 미결 경계", + "source_files": [ + "pages/B07_DesignDetail/B07_standard_drawings_2026_09.md", + "concepts/standard_drawing_cost_inputs.md" + ], + "confidence": "EXTRACTED", + "relation": "references", + "why": "connects across different repos/directories; bridges separate communities; peripheral node `표준도·수량·원가 입력의 미결 경계` unexpectedly reaches hub `B07 구조물 표준도 — 조사·합의와 현재 통로`" + }, + { + "source": "2026-09-04 완료 항목", + "target": "B01_Dashboard/B01_frontend", + "source_files": [ + "concepts/completed_2026-09-04.md", + "B01_Dashboard/B01_frontend.md" + ], + "confidence": "EXTRACTED", + "relation": "references", + "why": "connects across different repos/directories; peripheral node `B01_Dashboard/B01_frontend` unexpectedly reaches hub `2026-09-04 완료 항목`" + }, + { + "source": "2026-09-04 완료 항목", + "target": "B03_FileInput/B03_backend", + "source_files": [ + "concepts/completed_2026-09-04.md", + "B03_FileInput/B03_backend.md" + ], + "confidence": "EXTRACTED", + "relation": "references", + "why": "connects across different repos/directories; peripheral node `B03_FileInput/B03_backend` unexpectedly reaches hub `2026-09-04 완료 항목`" + } + ], + "questions": [ + { + "type": "bridge_node", + "question": "Why does `B07 구조물 표준도 — 조사·합의와 현재 통로` connect `B07 구조물 표준도 — 조사·합의와 현재 통로` to `유토곡선 (Mass Haul Diagram) 계산 명세`, `임도기술교본 원문 md 추출 품질 결함`?", + "why": "High betweenness centrality (0.002) - this node is a cross-community bridge." + }, + { + "type": "bridge_node", + "question": "Why does `2026-09-04 완료 항목` connect `2026-09-04 완료 항목` to `2026-09-07 완료·보류 요약`, `B07 구조물 표준도 — 조사·합의와 현재 통로`?", + "why": "High betweenness centrality (0.002) - this node is a cross-community bridge." + }, + { + "type": "isolated_nodes", + "question": "What connects `단계별 판정`, `비워크플로 영역 판정`, `구현 상태 용어` to the rest of the system?", + "why": "675 weakly-connected nodes found - possible documentation gaps or missing edges." + }, + { + "type": "low_cohesion", + "question": "Should `UI Templates — Localization & Components` be split into smaller, more focused modules?", + "why": "Cohesion score 0.06451612903225806 - nodes in this community are weakly interconnected." + }, + { + "type": "low_cohesion", + "question": "Should `인증 / RBAC` be split into smaller, more focused modules?", + "why": "Cohesion score 0.04878048780487805 - nodes in this community are weakly interconnected." + }, + { + "type": "low_cohesion", + "question": "Should `A00_Common — App Shell Framework` be split into smaller, more focused modules?", + "why": "Cohesion score 0.13333333333333333 - nodes in this community are weakly interconnected." + }, + { + "type": "low_cohesion", + "question": "Should `2026-09-04 완료 항목` be split into smaller, more focused modules?", + "why": "Cohesion score 0.125 - nodes in this community are weakly interconnected." + } + ] +} \ No newline at end of file diff --git a/docs/wiki/graphify-out/2026-09-12/.graphify_labels.json b/docs/wiki/graphify-out/2026-09-12/.graphify_labels.json new file mode 100644 index 00000000..0989da7b --- /dev/null +++ b/docs/wiki/graphify-out/2026-09-12/.graphify_labels.json @@ -0,0 +1,191 @@ +{ + "0": "UI Templates — Localization & Components", + "1": "인증 / RBAC", + "2": "A00_Common — App Shell Framework", + "3": "2026-09-04 완료 항목", + "4": "배수유역 해석 및 세부설계 (Drainage Watershed)", + "5": "DB: 로그/모니터링 테이블", + "6": "A09_Security — Backend", + "7": "2026-08-29 완료 반영", + "8": "DB: 파일/지표면분석 테이블", + "9": "DB: 경로/종횡단 테이블", + "10": "A04_NewsHistory — Frontend", + "11": "A07_Register — Frontend", + "12": "A08_Support — Frontend", + "13": "B02_ProjRegister — Frontend", + "14": "A01_Home — Frontend", + "15": "A05_EduDetail — Frontend", + "16": "A06_Login — Frontend", + "17": "A08_Support — Backend", + "18": "A09_Security — Frontend", + "19": "B02_ProjRegister — Backend", + "20": "B04_PreProcess — Backend", + "21": "B04_PreProcess — Frontend", + "22": "B05 구조물 정본·통합 편집", + "23": "B06_Section — Frontend", + "24": "A03_CompDetail — Frontend", + "25": "A06_Login — Backend", + "26": "유토곡선 (Mass Haul Diagram) 계산 명세", + "27": "A07_Register — Backend", + "28": "B06 배수관 구조물 조작·표시", + "29": "B06 기슭막이 연동·경사·단별 제어", + "30": "B08_DesignDetail — Backend", + "31": "B08 토적도·수리집수면적유역도", + "32": "B09_Estimation — Frontend", + "33": "현재 구현 현황 — 소스 읽기 감사", + "34": "DB: 구조물/수량/산출물 테이블", + "35": "B01_Dashboard — Backend", + "36": "B01_Dashboard — Frontend", + "37": "B03_FileInput — Backend", + "38": "B05 급선회 3D 국부 보정 계획", + "39": "B06 집수정·다단 기슭막이", + "40": "B06 배수관 구조물 기하·조작 체계", + "41": "B06 배수관 횡단도 세트", + "42": "B10_Payment — Frontend", + "43": "B11_Status — Frontend", + "44": "저장 경로 규칙 (Workflow-based Folder Structure)", + "45": "DB: 프로젝트 관리 테이블", + "46": "임도기술교본 원문 md 추출 품질 결함", + "47": "A01_Home — 세부 구현", + "48": "A02_ProgDetail — 세부 구현", + "49": "A02_ProgDetail — Frontend", + "50": "B01_Dashboard — API", + "51": "B03_FileInput — Frontend", + "52": "B05 계획노선 코리도 삼각망 서피스", + "53": "B05 구조물·UI 현재 계획", + "54": "B05 구조물 입력·종단 표시 정비 — 2026-08-19", + "55": "B07 구조물 표준도 — 조사·합의와 현재 통로", + "56": "B08 횡단도 구조물·장 배치", + "57": "2026-09-07 완료·보류 요약", + "58": "B07 외부 WebCAD 비교 실행환경", + "59": "Temp Upload (프로젝트 생성 전 임시 보관함)", + "60": "Q: 배수관 매설시 각도의 제약조건이 있는지 확인해줘. 임도에서", + "61": "Q: 임도 기술정보DB에서 집수정의 형태정보는 어떤게 있는지 확인해줘.", + "62": "B02_ProjRegister — DB", + "63": "B03_FileInput — API", + "64": "B04_PreProcess — DB", + "65": "B05_Profile — API", + "66": "B05 변형 성토면 마감·날개 패치", + "67": "B05_Profile — Profile Alignment & Table", + "68": "B05 구조물 비정규 측점 공급", + "69": "B05_Profile_UI_Drainage_Parts — 배수유역 공용 UI 파츠", + "70": "_UI_Drainage_Render — 배수유역도 Canvas 렌더러", + "71": "_UI_Profile_Structures — 종단 구조물 렌더링 및 인터랙션", + "72": "_UI_Selection — 배수/구조물 3자 선택 동기화", + "73": "B06 인접 측점 구조물 트림 정리", + "74": "B06 물넘이포장·콘크리트 포장·독립 기슭막이", + "75": "B06_Section_Engine_Areas — 횡단 면적 적분 연산 엔진", + "76": "B06_Section_Router_Confirm — 임시 저장 및 확정 라우터", + "77": "B06_Section_UI_Cross_Areas — 횡단 단면적 표기 및 밴드 하이라이트", + "78": "B06_Section_UI_Cross_Design — 횡단 측점별 세부 설계 컨트롤", + "79": "B06_Section_UI_MassHaul — 유토곡선 적분 계산 엔진", + "80": "B06_Section_UI_MassHaul_Balance — 평형선 및 장비 띠 분할 엔진", + "81": "B06_Section_UI_MassHaul_Balance_View — 운반 띠 시각화 렌더러", + "82": "B06_Section_UI_MassHaul_Balloon — 물량 말풍선 배치 및 조작", + "83": "B06_Section_UI_MassHaul_Curve — 유토곡선 궤적 보간 및 렌더링", + "84": "B06_Section_UI_MassHaul_Settle — 토량 정산 및 장거리 상쇄 엔진", + "85": "B06_Section_UI_MassHaul_View — 유토곡선 시각화 렌더러", + "86": "B06_Section_UI_Page — B06 메인 페이지 오케스트레이터", + "87": "B06_Section_UI_Section_View — 종/횡단 및 유토곡선 뷰 조립", + "88": "B07 Quantity — Backend", + "89": "B08 CAD 블록 라이브러리·사진", + "90": "B08 OpenWebCAD 명령 체계", + "91": "B08_CAD_table_entity.md", + "92": "공개·인증·관리 영역 지도", + "93": "공유 자원 영향 지도", + "94": "A00_Common — 공통 프레임워크 & 유틸", + "95": "app_shell.ts", + "96": "router.ts", + "97": "B04_PreProcess — API", + "98": "B04_PreProcess — Dependencies", + "99": "B05_Profile — Backend", + "100": "B05_Profile — DB 사용 관계", + "101": "B05_Profile — 3D Viewer & Interaction", + "102": "B05_Profile_Engine_Sections.md", + "103": "B05_Profile_Api_Fetch.ts", + "104": "B05_Profile_UI_Drainage_Panel", + "105": "B05_Profile_UI_Drainage_Pipes", + "106": "B05_Profile_UI_Profile_Panel.md", + "107": "B06_Section — DB 사용 관계", + "108": "B06_Section_Api_Fetch — B06 프론트엔드 API 클라이언트", + "109": "B06_Section_UI_Standard_Diagram — 표준단면 모식도 컴포넌트", + "110": "B06_Section_UI_Standard_Panel — 표준단면 입력 및 제어 패널", + "111": "B08_DesignDetail — Dependencies", + "112": "common_util_project_delete.md", + "113": "common_util_storage.md", + "114": "common_util_workflow_state.md", + "115": "미확정 테이블 보관소 (Unconfirmed DB Schemas)", + "116": "A01_Home_UI_Page.md", + "117": "A02_ProgDetail_UI_Page.md", + "118": "A06_Login_Router.md", + "119": "A07_Register_Router.md", + "120": "A08_Support_Router.md", + "121": "A09_Security_Router.md", + "122": "B01_Dashboard — DB 사용 관계", + "123": "B01_Dashboard — Dependencies", + "124": "B01_Dashboard_Router.md", + "125": "B01_Dashboard_UI_Page.md", + "126": "B02_ProjRegister_Router.md", + "127": "B03_FileInput — DB 사용 관계", + "128": "B03_FileInput — Dependencies", + "129": "B03_FileInput_Router.md", + "130": "B04_PreProcess_Router.md", + "131": "B05_Profile — Dependencies", + "132": "B05_Profile_Engine_Grade.md", + "133": "B05_Profile_Engine_Solver.md", + "134": "B05_Profile_Repository.md", + "135": "B05_Profile_Router.md", + "136": "B05_Profile_Router_Confirm.md", + "137": "B05_Profile_Schema.md", + "138": "B05_Profile_UI_IrregularStations.md", + "139": "B05_Profile_UI_Page.md", + "140": "B05_Profile_UI_Panel.md", + "141": "B05_Profile_UI_Profile_Alignment.md", + "142": "B05_Profile_UI_Profile_Table.md", + "143": "B05_Profile_UI_Viewer.md", + "144": "B06_Section — Dependencies", + "145": "B06_Section_Router.md", + "146": "B01~B09 Workflow 데이터 흐름", + "147": "B08_DesignDetail — API", + "148": "longitudinal_alignment.md", + "149": "B03_FileInput_plan_lidar_multi_file.md", + "150": "B05_completed_followups.md", + "151": "B05_corridor_followup_decisions.md", + "152": "B06_api.md", + "153": "B07_db.md", + "154": "B08_DesignDetail_Router.md", + "155": "B09_Estimation_UI_Page.md", + "156": "B10_Payment_UI_Page.md", + "157": "B11_Status_UI_Page.md", + "158": "B03 계획노선 정본·좌표계 후속", + "159": "B03 파일 입력 화면 정리", + "160": "B04 3D 방위·좌표계 최신 결정", + "161": "B04 세부유역·방위·좌표계", + "162": "B05 구조물 구간 절취·측벽·성토 패치", + "163": "B05 구조물 3D 투영 커브", + "164": "B05_Profile — Frontend", + "165": "B05 유토곡선·구조물 후속", + "166": "B05 종단곡선·실시간 횡단 연동", + "167": "B06 횡단 계산 미러·카드 표기", + "168": "B06 횡단 관 형상·유토곡선 후속", + "169": "B08_DesignDetail_Engine_Cad_Basin.py", + "170": "B08_DesignDetail_Engine_Cad_MassHaul.py", + "171": "B08 CAD·납품 도면 후속", + "176": "OpenWebCAD Core", + "177": "common_util_mass_haul_settle.ts", + "178": "Drainage Watershed (유역도)", + "179": "Mass Haul Diagram (토적도)", + "182": "2026-09-02 완료 항목", + "183": "2026-09-03 완료 — 입력·배수·종횡단·CAD", + "184": "2026-09-03 추가 완료 — 화면·종단·횡단", + "185": "Query: 임도 집수정 형태정보", + "187": "B03 File Input Backend", + "188": "B03 File Input Frontend", + "189": "B04 PreProcess Backend", + "190": "B04 PreProcess Frontend", + "191": "B07_Quantity_Router.md", + "192": "B08 CAD Blocks Library", + "193": "B08 CAD Table Entity", + "194": "B08 Cross Section Structure Sheets", + "195": "Query: 배수관 매설 각도 제약조건 (임도)" +} diff --git a/docs/wiki/graphify-out/2026-09-12/.graphify_semantic_marker b/docs/wiki/graphify-out/2026-09-12/.graphify_semantic_marker new file mode 100644 index 00000000..b0cd2155 --- /dev/null +++ b/docs/wiki/graphify-out/2026-09-12/.graphify_semantic_marker @@ -0,0 +1 @@ +{"output_tokens": 2385} \ No newline at end of file diff --git a/docs/wiki/graphify-out/2026-09-12/GRAPH_REPORT.md b/docs/wiki/graphify-out/2026-09-12/GRAPH_REPORT.md new file mode 100644 index 00000000..b800b319 --- /dev/null +++ b/docs/wiki/graphify-out/2026-09-12/GRAPH_REPORT.md @@ -0,0 +1,891 @@ +# Graph Report - wiki (2026-09-11) + +## Corpus Check +- 206 files · ~57,686 words +- Verdict: corpus is large enough that graph structure adds value. + +## Summary +- 1170 nodes · 996 edges · 189 communities (155 shown, 34 thin omitted) +- Extraction: 100% EXTRACTED · 0% INFERRED · 0% AMBIGUOUS +- Token cost: 0 input · 0 output + +## Graph Freshness +- Built from commit: `e49e4d85` +- Run `git rev-parse HEAD` and compare to check if the graph is stale. +- Run `graphify update .` after code changes (no API cost). + +## Community Hubs (Navigation) +- UI Templates — Localization & Components +- 인증 / RBAC +- A00_Common — App Shell Framework +- 2026-09-04 완료 항목 +- 배수유역 해석 및 세부설계 (Drainage Watershed) +- DB: 로그/모니터링 테이블 +- A09_Security — Backend +- 2026-08-29 완료 반영 +- DB: 파일/지표면분석 테이블 +- DB: 경로/종횡단 테이블 +- A04_NewsHistory — Frontend +- A07_Register — Frontend +- A08_Support — Frontend +- B02_ProjRegister — Frontend +- A01_Home — Frontend +- A05_EduDetail — Frontend +- A06_Login — Frontend +- A08_Support — Backend +- A09_Security — Frontend +- B02_ProjRegister — Backend +- B04_PreProcess — Backend +- B04_PreProcess — Frontend +- B05 구조물 정본·통합 편집 +- B06_Section — Frontend +- A03_CompDetail — Frontend +- A06_Login — Backend +- 유토곡선 (Mass Haul Diagram) 계산 명세 +- A07_Register — Backend +- B06 배수관 구조물 조작·표시 +- B06 기슭막이 연동·경사·단별 제어 +- B08_DesignDetail — Backend +- B08 토적도·수리집수면적유역도 +- B09_Estimation — Frontend +- 현재 구현 현황 — 소스 읽기 감사 +- DB: 구조물/수량/산출물 테이블 +- B01_Dashboard — Backend +- B01_Dashboard — Frontend +- B03_FileInput — Backend +- B05 급선회 3D 국부 보정 계획 +- B06 집수정·다단 기슭막이 +- B06 배수관 구조물 기하·조작 체계 +- B06 배수관 횡단도 세트 +- B10_Payment — Frontend +- B11_Status — Frontend +- 저장 경로 규칙 (Workflow-based Folder Structure) +- DB: 프로젝트 관리 테이블 +- 임도기술교본 원문 md 추출 품질 결함 +- A01_Home — 세부 구현 +- A02_ProgDetail — 세부 구현 +- A02_ProgDetail — Frontend +- B01_Dashboard — API +- B03_FileInput — Frontend +- B05 계획노선 코리도 삼각망 서피스 +- B05 구조물·UI 현재 계획 +- B05 구조물 입력·종단 표시 정비 — 2026-08-19 +- B07 구조물 표준도 — 조사·합의와 현재 통로 +- B08 횡단도 구조물·장 배치 +- 2026-09-07 완료·보류 요약 +- B07 외부 WebCAD 비교 실행환경 +- Temp Upload (프로젝트 생성 전 임시 보관함) +- Q: 배수관 매설시 각도의 제약조건이 있는지 확인해줘. 임도에서 +- Q: 임도 기술정보DB에서 집수정의 형태정보는 어떤게 있는지 확인해줘. +- B02_ProjRegister — DB +- B03_FileInput — API +- B04_PreProcess — DB +- B05_Profile — API +- B05 변형 성토면 마감·날개 패치 +- B05_Profile — Profile Alignment & Table +- B05 구조물 비정규 측점 공급 +- B05_Profile_UI_Drainage_Parts — 배수유역 공용 UI 파츠 +- _UI_Drainage_Render — 배수유역도 Canvas 렌더러 +- _UI_Profile_Structures — 종단 구조물 렌더링 및 인터랙션 +- _UI_Selection — 배수/구조물 3자 선택 동기화 +- B06 인접 측점 구조물 트림 정리 +- B06 물넘이포장·콘크리트 포장·독립 기슭막이 +- B06_Section_Engine_Areas — 횡단 면적 적분 연산 엔진 +- B06_Section_Router_Confirm — 임시 저장 및 확정 라우터 +- B06_Section_UI_Cross_Areas — 횡단 단면적 표기 및 밴드 하이라이트 +- B06_Section_UI_Cross_Design — 횡단 측점별 세부 설계 컨트롤 +- B06_Section_UI_MassHaul — 유토곡선 적분 계산 엔진 +- B06_Section_UI_MassHaul_Balance — 평형선 및 장비 띠 분할 엔진 +- B06_Section_UI_MassHaul_Balance_View — 운반 띠 시각화 렌더러 +- B06_Section_UI_MassHaul_Balloon — 물량 말풍선 배치 및 조작 +- B06_Section_UI_MassHaul_Curve — 유토곡선 궤적 보간 및 렌더링 +- B06_Section_UI_MassHaul_Settle — 토량 정산 및 장거리 상쇄 엔진 +- B06_Section_UI_MassHaul_View — 유토곡선 시각화 렌더러 +- B06_Section_UI_Page — B06 메인 페이지 오케스트레이터 +- B06_Section_UI_Section_View — 종/횡단 및 유토곡선 뷰 조립 +- B07 Quantity — Backend +- B08 CAD 블록 라이브러리·사진 +- B08 OpenWebCAD 명령 체계 +- B08_CAD_table_entity.md +- 공개·인증·관리 영역 지도 +- 공유 자원 영향 지도 +- A00_Common — 공통 프레임워크 & 유틸 +- app_shell.ts +- router.ts +- B04_PreProcess — API +- B04_PreProcess — Dependencies +- B05_Profile — Backend +- B05_Profile — DB 사용 관계 +- B05_Profile — 3D Viewer & Interaction +- B05_Profile_Engine_Sections.md +- B05_Profile_Api_Fetch.ts +- B05_Profile_UI_Drainage_Panel +- B05_Profile_UI_Drainage_Pipes +- B05_Profile_UI_Profile_Panel.md +- B06_Section — DB 사용 관계 +- B06_Section_Api_Fetch — B06 프론트엔드 API 클라이언트 +- B06_Section_UI_Standard_Diagram — 표준단면 모식도 컴포넌트 +- B06_Section_UI_Standard_Panel — 표준단면 입력 및 제어 패널 +- B08_DesignDetail — Dependencies +- common_util_project_delete.md +- common_util_storage.md +- common_util_workflow_state.md +- 미확정 테이블 보관소 (Unconfirmed DB Schemas) +- A01_Home_UI_Page.md +- A02_ProgDetail_UI_Page.md +- A06_Login_Router.md +- A07_Register_Router.md +- A08_Support_Router.md +- A09_Security_Router.md +- B01_Dashboard — DB 사용 관계 +- B01_Dashboard — Dependencies +- B01_Dashboard_Router.md +- B01_Dashboard_UI_Page.md +- B02_ProjRegister_Router.md +- B03_FileInput — DB 사용 관계 +- B03_FileInput — Dependencies +- B03_FileInput_Router.md +- B04_PreProcess_Router.md +- B05_Profile — Dependencies +- B05_Profile_Engine_Grade.md +- B05_Profile_Engine_Solver.md +- B05_Profile_Repository.md +- B05_Profile_Router.md +- B05_Profile_Router_Confirm.md +- B05_Profile_Schema.md +- B05_Profile_UI_IrregularStations.md +- B05_Profile_UI_Page.md +- B05_Profile_UI_Panel.md +- B05_Profile_UI_Profile_Alignment.md +- B05_Profile_UI_Profile_Table.md +- B05_Profile_UI_Viewer.md +- B06_Section — Dependencies +- B06_Section_Router.md +- B01~B09 Workflow 데이터 흐름 +- B08_DesignDetail — API +- longitudinal_alignment.md +- B03_FileInput_plan_lidar_multi_file.md +- B05_completed_followups.md +- B05_corridor_followup_decisions.md +- B06_api.md +- B07_db.md +- B08_DesignDetail_Router.md +- B09_Estimation_UI_Page.md +- B10_Payment_UI_Page.md +- B11_Status_UI_Page.md +- B03 계획노선 정본·좌표계 후속 +- B03 파일 입력 화면 정리 +- B04 3D 방위·좌표계 최신 결정 +- B04 세부유역·방위·좌표계 +- B05 구조물 구간 절취·측벽·성토 패치 +- B05 구조물 3D 투영 커브 +- B05_Profile — Frontend +- B05 유토곡선·구조물 후속 +- B05 종단곡선·실시간 횡단 연동 +- B06 횡단 계산 미러·카드 표기 +- B06 횡단 관 형상·유토곡선 후속 +- B08_DesignDetail_Engine_Cad_Basin.py +- B08_DesignDetail_Engine_Cad_MassHaul.py +- B08 CAD·납품 도면 후속 +- OpenWebCAD Core +- common_util_mass_haul_settle.ts +- Drainage Watershed (유역도) +- Mass Haul Diagram (토적도) +- 2026-09-02 완료 항목 +- 2026-09-03 완료 — 입력·배수·종횡단·CAD +- 2026-09-03 추가 완료 — 화면·종단·횡단 +- Query: 임도 집수정 형태정보 +- B03 File Input Backend +- B03 File Input Frontend +- B04 PreProcess Backend +- B04 PreProcess Frontend +- B07_Quantity_Router.md +- B08 CAD Blocks Library +- B08 CAD Table Entity +- B08 Cross Section Structure Sheets +- Query: 배수관 매설 각도 제약조건 (임도) + +## God Nodes (most connected - your core abstractions) +1. `UI Templates — Localization & Components` - 12 edges +2. `DB: 로그/모니터링 테이블` - 11 edges +3. `B07 구조물 표준도 — 조사·합의와 현재 통로` - 11 edges +4. `2026-08-29 완료 반영` - 10 edges +5. `DB: 파일/지표면분석 테이블` - 10 edges +6. `A07_Register — Frontend` - 10 edges +7. `A08_Support — Frontend` - 10 edges +8. `B02_ProjRegister — Frontend` - 10 edges +9. `인증 / RBAC` - 9 edges +10. `배수유역 해석 및 세부설계 (Drainage Watershed)` - 9 edges + +## Surprising Connections (you probably didn't know these) +- `B07 구조물 표준도 — 조사·합의와 현재 통로` --references--> `B07 DesignDetail — 현재 책임` [EXTRACTED] + pages/B07_DesignDetail/B07_standard_drawings_2026_09.md → pages/B07_DesignDetail/B07_frontend.md +- `B07 구조물 표준도 — 조사·합의와 현재 통로` --references--> `B08 Quantity — 2026-09 수량산출` [EXTRACTED] + pages/B07_DesignDetail/B07_standard_drawings_2026_09.md → pages/B08_Quantity/B08_overview_2026_09.md +- `B07 구조물 표준도 — 조사·합의와 현재 통로` --references--> `B09 Estimation — 2026-09 원가계산` [EXTRACTED] + pages/B07_DesignDetail/B07_standard_drawings_2026_09.md → pages/B09_Estimation/B09_overview_2026_09.md + +## Import Cycles +- None detected. + +## Hyperedges (group relationships) +- **B03-B08 Workflow Data Flow** — b03_fileinput_route_snapshot_crs, b04_preprocess_drainage_compass_crs, b05_profile_frontend, b06_section_cross_design_ui_2026_09, b08_designdetail_frontend [INFERRED 0.90] +- **Shared Mass Haul Calculation and UI** — b05_profile_masshaul_structure_2026_09, b06_section_masshaul_culvert_2026_09, b08_designdetail_cad_delivery_2026_09 [EXTRACTED 0.85] +- **CAD Delivery and Usability Framework** — b08_designdetail_cad_interaction, b08_designdetail_cad_title_block, b08_designdetail_cad_usability_2026_09_01, b08_designdetail_cad_delivery_2026_09 [EXTRACTED 0.95] +- **LAS-Free Analysis Workflow** — concepts_las_free_sheet_surface, pages_b03_fileinput_backend, pages_b04_preprocess_backend [EXTRACTED 1.00] +- **B08 Drawing Generation Flow** — b08_designdetail_b08_designdetail_engine_cad_masshaul_py, b08_designdetail_b08_designdetail_engine_cad_basin_py, common_util_common_util_mass_haul_settle_ts [EXTRACTED 0.90] +- **Drainage System Workflow** — concepts_drainage_watershed, pages_b05_profile_b05_structures, pages_b06_section_b06_culvert_set, pages_b06_section_b06_culvert_geometry_redesign [EXTRACTED 0.95] +- **Mass Haul Diagram System** — concepts_mass_haul_diagram, pages_b06_section_b06_frontend, pages_b08_designdetail_b08_drawing_masshaul_watershed [EXTRACTED 0.90] +- **3D Corridor Generation Flow** — pages_b05_profile_b05_corridor_surface, pages_b05_profile_b05_corridor_plan_curves, pages_b05_profile_b05_corridor_cut_fill, pages_b05_profile_b05_corridor_patch_finish [EXTRACTED 0.90] +- **Late Workflow Stages (B07-B09)** — pages_b07_quantity_b07_frontend, pages_b08_designdetail_b08_frontend, pages_b09_estimation_b09_frontend [EXTRACTED 1.00] + +## Communities (189 total, 34 thin omitted) + +### Community 0 - "UI Templates — Localization & Components" +Cohesion: 0.05 +Nodes (38): 2026-09-04 완료 항목, 700줄 제한 분리, 보존된 미완료 범위, 상시계획서 추가 완료 범위, 완료 범위, 추가 완료 범위, 디자인 시스템 (Design System), 레이아웃 및 둥근 테두리 (Radius & Spacing) (+30 more) + +### Community 1 - "인증 / RBAC" +Cohesion: 0.06 +Nodes (31): OTP / 비밀번호 및 디바이스 신뢰, 권한 검증 헬퍼 (B01_Dashboard), 라우팅 가드 (frontend.md 5.2), 사용자 상태 생명주기, 사용처 (역참조), 세션 인증 (backend.md 6.3), 역할 (users.role), 인증 / RBAC (+23 more) + +### Community 2 - "A00_Common — App Shell Framework" +Cohesion: 0.08 +Nodes (22): A00_Common — App Shell Framework, app_shell 구성요소, router 라우팅 테이블, A00_Common — 스캐폴드·CSS·종속성, b_page_scaffold, CSS 인젝션, 사용처, 종속성 (+14 more) + +### Community 3 - "2026-09-04 완료 항목" +Cohesion: 0.07 +Nodes (25): API 공통 (여러 페이지가 공유하는 엔드포인트), 공통 오류 응답 포맷 (전 라우터), 워크플로우 상태 조회, 폴링 패턴 (legacy workflow.json 설계; 현재 구현은 workflow-state API 사용), 계산 구현 원칙, 계획노선 규칙, 설계 데이터 생명주기, 정본 세 벌 (+17 more) + +### Community 4 - "배수유역 해석 및 세부설계 (Drainage Watershed)" +Cohesion: 0.25 +Nodes (7): B08_DesignDetail — Frontend, CAD 계획선 레이어 연동 및 편집 지원 (2026-07-22), openwebcad 단위 정합, 선 특성/폰트 UI 및 Fit-in-all (2026-07-20), 독립형 CAD 임베드 및 데이터 연동 아키텍처, 의존성, 주요 컴포넌트 / 함수, 파일 구조 + +### Community 5 - "DB: 로그/모니터링 테이블" +Cohesion: 0.17 +Nodes (11): activity_logs (사용자 활동 로그), audit_logs (감사 로그), change_logs (설계 변경 이력), DB: 로그/모니터링 테이블, login_logs (로그인 시도 로그), support_requests (기술 지원 요청), system_admin_logs (시스템 관리자 행위 로그), system_audit_logs — 사용처 (B01, B02) (+3 more) + +### Community 6 - "A09_Security — Backend" +Cohesion: 0.17 +Nodes (11): A09_Security — Backend, API 엔드포인트, DB 저장 (activity_logs), 권한 헬퍼, 마스터(회사 관리자) 전용 — `require_master`, 시스템 관리자 전용 — `require_system_admin`, 요청 스키마 (Pydantic), 의존성 (공통 유틸) (+3 more) + +### Community 7 - "2026-08-29 완료 반영" +Cohesion: 0.10 +Nodes (17): 2026-08-29 완료 반영, B03 재업로드·B05 최신 조회, B05/B06 구조물 UI 통합, B07↔B08 순서, B07 CAD 고정 척도·횡단 장 배치, B07 CAD 테마, B07 CAD 확대·팬, 배수시설 추천 기준 (+9 more) + +### Community 8 - "DB: 파일/지표면분석 테이블" +Cohesion: 0.18 +Nodes (10): DB: 파일/지표면분석 테이블, input_files.status 값, input_files (입력 원본 파일), processed_point_cloud.status 값, processed_point_cloud (필터/변환 포인트클라우드), surface_models.status 값, surface_models (지표면 모델 및 등고선), terrain_layers (지형 레이어) (+2 more) + +### Community 9 - "DB: 경로/종횡단 테이블" +Cohesion: 0.18 +Nodes (10): cross_sections.data.structures, cross_sections (횡단면 설계), `data` 컬럼 내 `options` 스냅샷 구조 (2026-07-19 도입), `data` 컬럼 내 `profile_alignment` 구조 (2026-07-23 도입), DB: 경로/종횡단 테이블, longitudinal_sections (종단면 설계), route_points (경로 좌표점), route_statistics (노선 통계) (+2 more) + +### Community 10 - "A04_NewsHistory — Frontend" +Cohesion: 0.18 +Nodes (10): A04_NewsHistory — Frontend, CSS 클래스 구조, Mock 데이터 구조, 로컬라이제이션, 미해결 사항, 반응형, 스타일 (CSS), 의존성 (+2 more) + +### Community 11 - "A07_Register — Frontend" +Cohesion: 0.18 +Nodes (10): A07_Register — Frontend, API 클라이언트 함수, 로컬라이제이션, 스타일 (CSS), 약관 동의 (아코디언), 의존성, 이벤트 핸들러, 제출 로직 (2단계 폼 전환) (+2 more) + +### Community 12 - "A08_Support — Frontend" +Cohesion: 0.18 +Nodes (10): A08_Support — Frontend, 로컬라이제이션, 세션 자동 채움, 스타일 (CSS), 의존성, 이벤트 핸들러, 제출 로직, 참고 (+2 more) + +### Community 13 - "B02_ProjRegister — Frontend" +Cohesion: 0.18 +Nodes (10): B02_ProjRegister — Frontend, 로컬라이제이션, 스타일 (CSS), 의존성, 이벤트 핸들러, 입력 필드, 제출 로직, 참고 (+2 more) + +### Community 14 - "A01_Home — Frontend" +Cohesion: 0.20 +Nodes (9): A01_Home — Frontend, Hero 섹션, 로컬라이제이션, 세부 구현, 이벤트 핸들러, 주요 기능 섹션, 최신 소식 섹션, 컴포넌트 (+1 more) + +### Community 15 - "A05_EduDetail — Frontend" +Cohesion: 0.20 +Nodes (9): A05_EduDetail — Frontend, CSS 클래스 구조, 로컬라이제이션, 반응형, 스타일 (CSS), 의존성, 이벤트 핸들러, 컴포넌트 (섹션 빌더) (+1 more) + +### Community 16 - "A06_Login — Frontend" +Cohesion: 0.20 +Nodes (9): A06_Login — Frontend, API 클라이언트 함수, 로컬라이제이션, 스타일 (CSS), 의존성, 이벤트 핸들러, 제출 및 OTP 제어 로직 (2단계 폼 전환), 컴포넌트 / 함수 (+1 more) + +### Community 17 - "A08_Support — Backend" +Cohesion: 0.20 +Nodes (9): A08_Support — Backend, API 엔드포인트, DB 저장 컬럼 (실 코드 INSERT 기준), 내부 헬퍼, 요청 스키마 (Pydantic), 의존성 (공통 유틸), 접수 로직, 특징 (+1 more) + +### Community 18 - "A09_Security — Frontend" +Cohesion: 0.20 +Nodes (9): A09_Security — Frontend, API 클라이언트 함수 (⚠️ 미사용, 정의만), 로컬라이제이션, 스타일 (CSS), 약관 데이터 (A09_Security_Terms.ts), ⚠️ 약관 텍스트와 실 코드 불일치, 의존성, 컴포넌트 / 함수 (+1 more) + +### Community 19 - "B02_ProjRegister — Backend" +Cohesion: 0.20 +Nodes (9): API 엔드포인트, B02_ProjRegister — Backend, DB 저장 컬럼 (projects INSERT), 생성 로직 (create_project 트랜잭션), 요청/응답 스키마 (Pydantic), 의존성 (공통 유틸), 참고, 파일 구조 (+1 more) + +### Community 20 - "B04_PreProcess — Backend" +Cohesion: 0.20 +Nodes (9): 2D/GIS 미표시 원인 분석 및 조치, B04_PreProcess — Backend, 📋 구현 예외 처리 검토 항목 (PLAN), ⚙️ 설정 및 환경 파일 정합성, 수치지형도 도엽 오버레이 아키텍처 (2026-07-26, 2026-08-01 S8 개편), 엔진 서브모듈, 워크플로우 상태 전이 및 자동 확정, 주요 함수 (Router / Repository / Engine / Utility) (+1 more) + +### Community 21 - "B04_PreProcess — Frontend" +Cohesion: 0.20 +Nodes (9): 3D 뷰어 DOM 마운트 버그 수리, 3D 뷰어 테마 연동 및 가독성 개선, 3D 카메라 커서 피봇 & 2D 오버레이 UI 개선 (2026-08-01~02 일원화), B04_PreProcess — Frontend, ⚠️ 계획서와 실 코드 불일치 (3D 뷰어), 의존성, 처리 흐름, 컴포넌트 & API 함수 (+1 more) + +### Community 22 - "B05 구조물 정본·통합 편집" +Cohesion: 0.20 +Nodes (9): API, B05 구조물 정본·통합 편집, B06 경계와 남은 범위, 검증, 배수관·시설 옵션, 백엔드 파일, 유역 추천·개략 단면, 정본과 타입 레지스트리 (+1 more) + +### Community 23 - "B06_Section — Frontend" +Cohesion: 0.20 +Nodes (9): 2026-08-22 파일 한계 정리, API 클라이언트, B06_Section — Frontend, SVG 렌더러 및 유틸리티, UI 패널 크기 및 리사이저 규칙 (2026-08-02 신설), 기술부채 (해결됨), 입력 옵션 (표시 옵션 및 횡단 반폭 제어), 파일 구성 (+1 more) + +### Community 24 - "A03_CompDetail — Frontend" +Cohesion: 0.22 +Nodes (8): A03_CompDetail — Frontend, CSS 클래스 구조, 로컬라이제이션, 반응형, 스타일 (CSS), 의존성, 컴포넌트 (섹션 빌더), 파일 구조 + +### Community 25 - "A06_Login — Backend" +Cohesion: 0.22 +Nodes (8): A06_Login — Backend, API 엔드포인트, 내부 헬퍼, 로그인 로직 흐름, 보안 정책 (실 코드 기준), 요청 스키마 (Pydantic), 의존성 (공통 유틸), 파일 구조 + +### Community 26 - "유토곡선 (Mass Haul Diagram) 계산 명세" +Cohesion: 0.15 +Nodes (11): 1. 개요 및 분석 목적, 2. 주요 계산 수식 및 원리 (실무 관례 반영), 3. 지반유형별 토량환산계수 기본값 (`config_system.py`), 4. 토공 운반장비 선정거리 및 분배 기준 (`config_system.py`), 5. 유토곡선 곡선 사양 (B06 구현 v2), 6. 웹앱 연동 및 시각화 명세 (2026-08-02 확정), 유토곡선 (Mass Haul Diagram) 계산 명세, B08 Quantity — 2026-09 수량산출 (+3 more) + +### Community 27 - "A07_Register — Backend" +Cohesion: 0.25 +Nodes (7): A07_Register — Backend, API 엔드포인트, 가입 로직 흐름, 요청 스키마 (Pydantic), 의존성 (공통 유틸), 참고, 파일 구조 + +### Community 28 - "B06 배수관 구조물 조작·표시" +Cohesion: 0.25 +Nodes (7): 4축 조작과 재질, B06 배수관 구조물 조작·표시, 계산·보기 분리, 구현 파일, 자체검증 기록, 조정창, 집수정 9키 조작 + +### Community 29 - "B06 기슭막이 연동·경사·단별 제어" +Cohesion: 0.25 +Nodes (7): B06 기슭막이 연동·경사·단별 제어, 검증, 단별 구간값, 선택과 하이라이트, 연동과 경사, 정본과 공용 모델, 형태와 조정창 + +### Community 30 - "B08_DesignDetail — Backend" +Cohesion: 0.25 +Nodes (7): B08_DesignDetail — Backend, 도각 템플릿 변환 및 종단도 A1 도각 병합 (2026-07-26), 도면 관리, 종단 30측점 분할, CAD 수량산출표 및 도면 템플릿 파이프라인, 워크플로우 게이팅 연동, 종단도 30측점 N분할 및 납품 양식 측점 테이블 (2026-07-25 N-1-1), 현재 책임 경계, 횡단도 4개 선별 레이어 및 CAD 수량산출표 (2026-07-25 N-1-2/N-1-3) + +### Community 31 - "B08 토적도·수리집수면적유역도" +Cohesion: 0.25 +Nodes (7): B08 토적도·수리집수면적유역도, 검증 한계, 구현·검증 완료, 남은 결정, 데이터 흐름, 도면 기준, 유역 정보표 + +### Community 32 - "B09_Estimation — Frontend" +Cohesion: 0.25 +Nodes (7): B09_Estimation — Frontend, 로컬라이제이션, 백엔드/DB — 미착수, 의존성, 참고, 컴포넌트 / 함수, 파일 구조 + +### Community 33 - "현재 구현 현황 — 소스 읽기 감사" +Cohesion: 0.06 +Nodes (28): 구현 상태 용어, 단계별 판정, 미결 설계, 반드시 유지할 구분, 비워크플로 영역 판정, 현재 구현 현황 — 소스 읽기 감사, Aislo 프로젝트 지도, 명칭 판정 (+20 more) + +### Community 34 - "DB: 구조물/수량/산출물 테이블" +Cohesion: 0.29 +Nodes (6): DB: 구조물/수량/산출물 테이블, output_files (개별 산출 파일 리스트), outputs (최종 견적/도면 산출 세션), quantity_items (수량 산출 항목), quantity_items 총비용 계산 예, structures (배치 구조물) + +### Community 35 - "B01_Dashboard — Backend" +Cohesion: 0.29 +Nodes (6): B01_Dashboard — Backend, 기술부채, 라우터 권한 헬퍼, 세분화 백엔드 위키 명세, 요청 스키마, 저장소 및 삭제 함수 + +### Community 36 - "B01_Dashboard — Frontend" +Cohesion: 0.29 +Nodes (6): B01_Dashboard — Frontend, UI 권한 헬퍼, 공유 자원 연결, 모달, 분할된 UI 컴포넌트 파일, 파일과 진입점 + +### Community 37 - "B03_FileInput — Backend" +Cohesion: 0.29 +Nodes (6): B03_FileInput — Backend, workflow·알림, 메타데이터 분석 및 파일 지문, 임시 보관함 (R2 Temp Upload), 입력 검증·파일 처리, 저장소 및 초기화 + +### Community 38 - "B05 급선회 3D 국부 보정 계획" +Cohesion: 0.29 +Nodes (6): B05 급선회 3D 국부 보정 계획, 구조물 연동, 국부 패치 절차, 목적과 경계, 완료 조건, 확인된 노견 확장 회귀 + +### Community 39 - "B06 집수정·다단 기슭막이" +Cohesion: 0.29 +Nodes (6): B06 집수정·다단 기슭막이, 미결, 유입 구조물, 유출 성토부·다단, 자체검증 기록, 집수정 계류측 성토부 + +### Community 40 - "B06 배수관 구조물 기하·조작 체계" +Cohesion: 0.29 +Nodes (6): B06 배수관 구조물 기하·조작 체계, 검증 상태, 구현 파일, 기슭막이·관 핵심 규칙, 설계선 트림, 접속선 + +### Community 41 - "B06 배수관 횡단도 세트" +Cohesion: 0.29 +Nodes (6): B06 배수관 횡단도 세트, 검증 근거와 후속, 계획선 규칙, 구현 항목, 입력·판정, 형상·표시 순서 (2026-08-20 스냅샷) + +### Community 42 - "B10_Payment — Frontend" +Cohesion: 0.29 +Nodes (6): B10_Payment — Frontend, 로컬라이제이션, 비즈니스 로직 전제 (목업), 의존성, 주요 컴포넌트 및 함수 (Mockup), 파일 구조 + +### Community 43 - "B11_Status — Frontend" +Cohesion: 0.29 +Nodes (6): B11_Status — Frontend, 결재 상태 흐름 (Payment Flow Status), 로컬라이제이션, 의존성, 주요 컴포넌트 및 기능 (Mockup), 파일 구조 + +### Community 44 - "저장 경로 규칙 (Workflow-based Folder Structure)" +Cohesion: 0.29 +Nodes (6): B05 구조물 3D 투영 커브, 검증, 구조물 날개·바닥 연결, 비탈 투영·성토면 절단, 저장·호환성, 커브 생성·렌더 + +### Community 45 - "DB: 프로젝트 관리 테이블" +Cohesion: 0.33 +Nodes (5): DB: 프로젝트 관리 테이블, project_automations (프로젝트 자동화 정책), project_versions (프로젝트 버전 스냅샷), project_workflow_stages (단계별 상세 상태), projects (프로젝트) + +### Community 46 - "임도기술교본 원문 md 추출 품질 결함" +Cohesion: 0.05 +Nodes (33): 2026-09-09 완료 구현·검증, B05·B06 종횡단, B07 표준도, B08 수량산출, B09 원가계산, 검증 경계, 결함 유형 (예시 = 위 파일 기준 줄번호), 원인 추정 (+25 more) + +### Community 47 - "A01_Home — 세부 구현" +Cohesion: 0.33 +Nodes (5): A01_Home — 세부 구현, 데이터 흐름, 미해결, 스타일, 의존성 + +### Community 48 - "A02_ProgDetail — 세부 구현" +Cohesion: 0.33 +Nodes (5): A02_ProgDetail — 세부 구현, 데이터 흐름, 미해결 / 특이사항, 스타일 (CSS), 의존성 + +### Community 49 - "A02_ProgDetail — Frontend" +Cohesion: 0.33 +Nodes (5): A02_ProgDetail — Frontend, 구조, 세부 구현, 제약 준수, 컴포넌트 분석 + +### Community 50 - "B01_Dashboard — API" +Cohesion: 0.33 +Nodes (5): B01_Dashboard — API, 사용자·회사, 시스템 관리자, 프로젝트·자동화, 회사 관리자 + +### Community 51 - "B03_FileInput — Frontend" +Cohesion: 0.33 +Nodes (5): API 클라이언트, B03_FileInput — Frontend, UI 지원 유틸리티 (분할 완료), 브라우저 상태·오프라인 보조, 페이지·업로드 흐름 + +### Community 52 - "B05 계획노선 코리도 삼각망 서피스" +Cohesion: 0.33 +Nodes (5): B05 계획노선 코리도 삼각망 서피스, 검증, 저장·호환성, 진행 중 계획, 프론트엔드 구성 + +### Community 53 - "B05 구조물·UI 현재 계획" +Cohesion: 0.33 +Nodes (5): 2026-08-18 B05 페이지 개선 2차 계획 기록, 2026-08-18 사이드 패널·입력 로직 계획 기록, B05/B06 구조물 적용 범위, B05 구조물·UI 현재 계획, 후속 결정 대기 + +### Community 54 - "B05 구조물 입력·종단 표시 정비 — 2026-08-19" +Cohesion: 0.33 +Nodes (5): B05 구조물 입력·종단 표시 정비 — 2026-08-19, 기록된 검증, 기준 해석 보류, 완료 범위, 주요 항목 + +### Community 55 - "B07 구조물 표준도 — 조사·합의와 현재 통로" +Cohesion: 0.29 +Nodes (6): B05_Profile — Frontend, 남은 파일 한계, 📂 소스코드 1:1 세분화 위키 파일 목록, 종단 편집 안전장치, 종단테이블 표시 보정, 📋 핵심 프론트엔드 아키텍처 개요 + +### Community 56 - "B08 횡단도 구조물·장 배치" +Cohesion: 0.33 +Nodes (5): B08 횡단도 구조물·장 배치, 결과, 데이터·구현 흐름, 문제와 결정, 한계 + +### Community 57 - "2026-09-07 완료·보류 요약" +Cohesion: 0.14 +Nodes (11): 2026-09-07 완료·보류 요약, 성능·운영 결정, 완료 범위, 주의, B06_Section — Backend, 계산 엔진, 데이터 영구 저장 및 환경설정, 라우터·workflow (조회, 확정, 타 프로젝트 불러오기 및 재생성) (+3 more) + +### Community 58 - "B07 외부 WebCAD 비교 실행환경" +Cohesion: 0.40 +Nodes (4): B07 외부 WebCAD 비교 실행환경, 검증 상태, 라이선스 주의, 실행과 종료 + +### Community 59 - "Temp Upload (프로젝트 생성 전 임시 보관함)" +Cohesion: 0.40 +Nodes (4): Temp Upload (프로젝트 생성 전 임시 보관함), 사용처, 주요 개념 및 스펙, 주요 구성 요소 + +### Community 60 - "Q: 배수관 매설시 각도의 제약조건이 있는지 확인해줘. 임도에서" +Cohesion: 0.40 +Nodes (4): Answer, Outcome, Q: 배수관 매설시 각도의 제약조건이 있는지 확인해줘. 임도에서, Source Nodes + +### Community 61 - "Q: 임도 기술정보DB에서 집수정의 형태정보는 어떤게 있는지 확인해줘." +Cohesion: 0.40 +Nodes (4): Answer, Outcome, Q: 임도 기술정보DB에서 집수정의 형태정보는 어떤게 있는지 확인해줘., Source Nodes + +### Community 62 - "B02_ProjRegister — DB" +Cohesion: 0.40 +Nodes (4): B02_ProjRegister — DB, 쓰는 테이블, 저장소(파일시스템), 참고 (계획 당시 의도) + +### Community 63 - "B03_FileInput — API" +Cohesion: 0.40 +Nodes (4): B03_FileInput — API, workflow 조회, 일반 업로드, 청크 업로드 + +### Community 64 - "B04_PreProcess — DB" +Cohesion: 0.40 +Nodes (4): B04_PreProcess — DB, Repository 함수, 쓰는 테이블, 참고 + +### Community 65 - "B05_Profile — API" +Cohesion: 0.40 +Nodes (4): API 스키마 및 반환 필드, B05_Profile — API, `POST /{project_id}/route/confirm` 요청 (`RouteConfirmRequest`), 엔드포인트 + +### Community 66 - "B05 변형 성토면 마감·날개 패치" +Cohesion: 0.40 +Nodes (4): B05 변형 성토면 마감·날개 패치, 세월교 날개 패치, 저장·검증, 패치 마감 + +### Community 67 - "B05_Profile — Profile Alignment & Table" +Cohesion: 0.40 +Nodes (4): 12행 도면 테이블 및 가로 스크롤 정렬 개편 (`_UI_Profile_Table.ts`, `_UI_Profile_Panel.ts`), B05_Profile — Profile Alignment & Table, 비정규 측점(구조물) 테이블 오버레이 & 런타임 검증 (`_UI_Profile_Table.ts`, `_UI_IrregularStations.ts`), 종단 계획고 편집 인터랙션 (`_UI_Profile_Edit.ts`, `_UI_Profile_Panel.ts`, `_UI_Page.ts`) + +### Community 68 - "B05 구조물 비정규 측점 공급" +Cohesion: 0.40 +Nodes (4): B05 구조물 비정규 측점 공급, 검증, 공급 경로, 정본 규칙 + +### Community 69 - "B05_Profile_UI_Drainage_Parts — 배수유역 공용 UI 파츠" +Cohesion: 0.40 +Nodes (4): 1. 개요 및 역할, 2. 주요 기능 및 함수, 3. 의존성, B05_Profile_UI_Drainage_Parts — 배수유역 공용 UI 파츠 + +### Community 70 - "_UI_Drainage_Render — 배수유역도 Canvas 렌더러" +Cohesion: 0.40 +Nodes (4): 1. 개요 및 역할, 2. 주요 기능 및 함수, 3. 의존성, _UI_Drainage_Render — 배수유역도 Canvas 렌더러 + +### Community 71 - "_UI_Profile_Structures — 종단 구조물 렌더링 및 인터랙션" +Cohesion: 0.40 +Nodes (4): 1. 개요 및 역할, 2. 주요 기능 및 함수, 3. 의존성, _UI_Profile_Structures — 종단 구조물 렌더링 및 인터랙션 + +### Community 72 - "_UI_Selection — 배수/구조물 3자 선택 동기화" +Cohesion: 0.40 +Nodes (4): 1. 개요 및 역할, 2. 주요 기능 및 함수, 3. 의존성, _UI_Selection — 배수/구조물 3자 선택 동기화 + +### Community 73 - "B06 인접 측점 구조물 트림 정리" +Cohesion: 0.40 +Nodes (4): B06 인접 측점 구조물 트림 정리, 검증, 원인과 경계, 처리 항목 + +### Community 74 - "B06 물넘이포장·콘크리트 포장·독립 기슭막이" +Cohesion: 0.40 +Nodes (4): B06 물넘이포장·콘크리트 포장·독립 기슭막이, 검증, 독립 기슭막이, 포장과 물넘이 + +### Community 75 - "B06_Section_Engine_Areas — 횡단 면적 적분 연산 엔진" +Cohesion: 0.40 +Nodes (4): 1. 개요 및 역할, 2. 주요 기능 및 함수, 3. 의존성, B06_Section_Engine_Areas — 횡단 면적 적분 연산 엔진 + +### Community 76 - "B06_Section_Router_Confirm — 임시 저장 및 확정 라우터" +Cohesion: 0.40 +Nodes (4): 1. 개요 및 역할, 2. 주요 기능 및 엔드포인트, 3. 의존성, B06_Section_Router_Confirm — 임시 저장 및 확정 라우터 + +### Community 77 - "B06_Section_UI_Cross_Areas — 횡단 단면적 표기 및 밴드 하이라이트" +Cohesion: 0.40 +Nodes (4): 1. 개요 및 역할, 2. 주요 기능 및 함수, 3. 의존성, B06_Section_UI_Cross_Areas — 횡단 단면적 표기 및 밴드 하이라이트 + +### Community 78 - "B06_Section_UI_Cross_Design — 횡단 측점별 세부 설계 컨트롤" +Cohesion: 0.40 +Nodes (4): 1. 개요 및 역할, 2. 주요 기능 및 함수, 3. 의존성, B06_Section_UI_Cross_Design — 횡단 측점별 세부 설계 컨트롤 + +### Community 79 - "B06_Section_UI_MassHaul — 유토곡선 적분 계산 엔진" +Cohesion: 0.40 +Nodes (4): 1. 개요 및 역할, 2. 주요 기능 및 함수, 3. 의존성, B06_Section_UI_MassHaul — 유토곡선 적분 계산 엔진 + +### Community 80 - "B06_Section_UI_MassHaul_Balance — 평형선 및 장비 띠 분할 엔진" +Cohesion: 0.40 +Nodes (4): 1. 개요 및 역할, 2. 주요 기능 및 알고리즘, 3. 의존성, B06_Section_UI_MassHaul_Balance — 평형선 및 장비 띠 분할 엔진 + +### Community 81 - "B06_Section_UI_MassHaul_Balance_View — 운반 띠 시각화 렌더러" +Cohesion: 0.40 +Nodes (4): 1. 개요 및 역할, 2. 주요 기능 및 렌더링, 3. 의존성, B06_Section_UI_MassHaul_Balance_View — 운반 띠 시각화 렌더러 + +### Community 82 - "B06_Section_UI_MassHaul_Balloon — 물량 말풍선 배치 및 조작" +Cohesion: 0.40 +Nodes (4): 1. 개요 및 역할, 2. 주요 기능 및 알고리즘, 3. 의존성, B06_Section_UI_MassHaul_Balloon — 물량 말풍선 배치 및 조작 + +### Community 83 - "B06_Section_UI_MassHaul_Curve — 유토곡선 궤적 보간 및 렌더링" +Cohesion: 0.40 +Nodes (4): 1. 개요 및 역할, 2. 주요 기능 및 기하 수학, 3. 의존성, B06_Section_UI_MassHaul_Curve — 유토곡선 궤적 보간 및 렌더링 + +### Community 84 - "B06_Section_UI_MassHaul_Settle — 토량 정산 및 장거리 상쇄 엔진" +Cohesion: 0.40 +Nodes (4): 1. 개요 및 역할, 2. 주요 기능 및 로직, 3. 의존성, B06_Section_UI_MassHaul_Settle — 토량 정산 및 장거리 상쇄 엔진 + +### Community 85 - "B06_Section_UI_MassHaul_View — 유토곡선 시각화 렌더러" +Cohesion: 0.40 +Nodes (4): 1. 개요 및 역할, 2. 주요 기능 및 함수, 3. 의존성, B06_Section_UI_MassHaul_View — 유토곡선 시각화 렌더러 + +### Community 86 - "B06_Section_UI_Page — B06 메인 페이지 오케스트레이터" +Cohesion: 0.40 +Nodes (4): 1. 개요 및 역할, 2. 주요 기능 및 함수, 3. 의존성, B06_Section_UI_Page — B06 메인 페이지 오케스트레이터 + +### Community 87 - "B06_Section_UI_Section_View — 종/횡단 및 유토곡선 뷰 조립" +Cohesion: 0.40 +Nodes (4): 1. 개요 및 역할, 2. 주요 기능 및 함수, 3. 의존성, B06_Section_UI_Section_View — 종/횡단 및 유토곡선 뷰 조립 + +### Community 88 - "B07 Quantity — Backend" +Cohesion: 0.40 +Nodes (4): B07 Quantity — Backend, 구현되지 않은 항목, 구현된 항목, 책임 경계 미결 + +### Community 89 - "B08 CAD 블록 라이브러리·사진" +Cohesion: 0.40 +Nodes (4): B08 CAD 블록 라이브러리·사진, 검증, 구현, 범위 결정 + +### Community 90 - "B08 OpenWebCAD 명령 체계" +Cohesion: 0.40 +Nodes (4): B08 OpenWebCAD 명령 체계, 검증·제한, 구현 범위, 핵심 구성 + +### Community 91 - "B08_CAD_table_entity.md" +Cohesion: 0.33 +Nodes (5): B08 CAD TableEntity, 검증·후속, 기능, 모델, 이관 범위 + +### Community 92 - "공개·인증·관리 영역 지도" +Cohesion: 0.29 +Nodes (6): B09 원가계산 — 2026-09-09 완료 근거, 가격·조건 입력, 검증 기록, 기계·제비율·산출물, 남은 경계, 단가·밑수 완성 + +### Community 93 - "공유 자원 영향 지도" +Cohesion: 0.33 +Nodes (5): B08 수량산출 — 2026-09-09 완료 근거, 검증 기록, 구조물·수량 표시, 남은 경계, 밑수와 인계 + +### Community 94 - "A00_Common — 공통 프레임워크 & 유틸" +Cohesion: 0.50 +Nodes (3): A00_Common — 공통 프레임워크 & 유틸, 📋 개요, 📂 세분화 마크다운 문서 목록 + +### Community 95 - "app_shell.ts" +Cohesion: 0.50 +Nodes (3): app_shell.ts, 🔗 연관 개념 및 의존성, 🛠️ 주요 함수 목록 + +### Community 96 - "router.ts" +Cohesion: 0.50 +Nodes (3): router.ts, 🔗 연관 개념 및 의존성, 🛠️ 주요 함수 목록 + +### Community 97 - "B04_PreProcess — API" +Cohesion: 0.50 +Nodes (3): B04_PreProcess — API, 엔드포인트, 요청/응답 스키마 (Pydantic) + +### Community 98 - "B04_PreProcess — Dependencies" +Cohesion: 0.50 +Nodes (3): B04_PreProcess — Dependencies, 백엔드 (Python), 프론트엔드 (TypeScript) + +### Community 99 - "B05_Profile — Backend" +Cohesion: 0.50 +Nodes (3): B05_Profile — Backend, 📂 소스코드 1:1 세분화 위키 파일 목록, 📋 핵심 백엔드 아키텍처 개요 + +### Community 100 - "B05_Profile — DB 사용 관계" +Cohesion: 0.50 +Nodes (3): B05_Profile — DB 사용 관계, Repository 함수, 저장 경로 + +### Community 101 - "B05_Profile — 3D Viewer & Interaction" +Cohesion: 0.50 +Nodes (3): 3D 마커 직접 드래그 이동 (0_old I-401 이식), 3D 지형 뷰포트 시각화 (`_UI_Viewer.ts`, `_UI_Markers.ts`), B05_Profile — 3D Viewer & Interaction + +### Community 102 - "B05_Profile_Engine_Sections.md" +Cohesion: 0.40 +Nodes (4): B05_Profile_Engine_Sections.py, ⚠️ 런타임 검증 주의사항 (2026-07-24 검증 보고서 기준), 🔗 연관 개념 및 의존성, 🛠️ 주요 함수 목록 + +### Community 103 - "B05_Profile_Api_Fetch.ts" +Cohesion: 0.50 +Nodes (3): B05_Profile_Api_Fetch.ts, 🔗 연관 개념 및 의존성, 🛠️ 주요 API 함수 목록 + +### Community 104 - "B05_Profile_UI_Drainage_Panel" +Cohesion: 0.50 +Nodes (3): B05_Profile_UI_Drainage_Panel, 📋 개요 및 특징, 🛠️ 주요 함수 / 심볼 목록 + +### Community 105 - "B05_Profile_UI_Drainage_Pipes" +Cohesion: 0.50 +Nodes (3): B05_Profile_UI_Drainage_Pipes, 📋 개요 및 특징, 🛠️ 주요 함수 / 심볼 목록 + +### Community 106 - "B05_Profile_UI_Profile_Panel.md" +Cohesion: 0.40 +Nodes (4): B05_Profile_UI_Profile_Panel.ts, 🔗 연관 개념 및 의존성, 🛠️ 주요 기능 및 개선사항 (2026-08-06), 🛠️ 주요 함수 목록 + +### Community 107 - "B06_Section — DB 사용 관계" +Cohesion: 0.50 +Nodes (3): B06_Section — DB 사용 관계, Repository 함수, 파일 경로 + +### Community 108 - "B06_Section_Api_Fetch — B06 프론트엔드 API 클라이언트" +Cohesion: 0.50 +Nodes (3): 1. 개요 및 역할, 2. 주요 연동 API 함수, B06_Section_Api_Fetch — B06 프론트엔드 API 클라이언트 + +### Community 109 - "B06_Section_UI_Standard_Diagram — 표준단면 모식도 컴포넌트" +Cohesion: 0.50 +Nodes (3): 1. 개요 및 역할, 2. 주요 기능, B06_Section_UI_Standard_Diagram — 표준단면 모식도 컴포넌트 + +### Community 110 - "B06_Section_UI_Standard_Panel — 표준단면 입력 및 제어 패널" +Cohesion: 0.50 +Nodes (3): 1. 개요 및 역할, 2. 주요 기능, B06_Section_UI_Standard_Panel — 표준단면 입력 및 제어 패널 + +### Community 111 - "B08_DesignDetail — Dependencies" +Cohesion: 0.50 +Nodes (3): B08_DesignDetail — Dependencies, Backend (requirements.txt), Frontend (package.json / tsconfig.json) + +### Community 112 - "common_util_project_delete.md" +Cohesion: 0.50 +Nodes (3): common_util_project_delete.py, 🔗 역참조 (사용처), 🛠️ 주요 함수 목록 + +### Community 113 - "common_util_storage.md" +Cohesion: 0.50 +Nodes (3): common_util_storage.py, 🔗 역참조 (사용처), 🛠️ 주요 함수 목록 + +### Community 114 - "common_util_workflow_state.md" +Cohesion: 0.50 +Nodes (3): common_util_workflow_state.py, 🔗 역참조 (사용처), 🛠️ 주요 함수 목록 + +### Community 116 - "A01_Home_UI_Page.md" +Cohesion: 0.50 +Nodes (3): A01_Home_UI_Page.ts, 🔗 연관 개념 및 의존성, 🛠️ 주요 함수 및 인터페이스 목록 + +### Community 117 - "A02_ProgDetail_UI_Page.md" +Cohesion: 0.50 +Nodes (3): A02_ProgDetail_UI_Page.ts, 🔗 연관 개념 및 의존성, 🛠️ 주요 함수 목록 + +### Community 118 - "A06_Login_Router.md" +Cohesion: 0.50 +Nodes (3): A06_Login_Router.py, 🛠️ 라우터 API 및 주요 헬퍼 함수 목록, 🔗 연관 개념 및 의존성 + +### Community 119 - "A07_Register_Router.md" +Cohesion: 0.50 +Nodes (3): A07_Register_Router.py, 🛠️ 라우터 API 및 주요 함수 목록, 🔗 연관 개념 및 의존성 + +### Community 120 - "A08_Support_Router.md" +Cohesion: 0.50 +Nodes (3): A08_Support_Router.py, 🛠️ 라우터 API 및 주요 함수 목록, 🔗 연관 개념 및 의존성 + +### Community 121 - "A09_Security_Router.md" +Cohesion: 0.50 +Nodes (3): A09_Security_Router.py, 🛠️ 라우터 API 및 주요 함수 목록, 🔗 연관 개념 및 의존성 + +### Community 124 - "B01_Dashboard_Router.md" +Cohesion: 0.50 +Nodes (3): B01_Dashboard_Router.py, 🛠️ 라우터 API 및 주요 함수 목록, 🔗 연관 개념 및 의존성 + +### Community 125 - "B01_Dashboard_UI_Page.md" +Cohesion: 0.50 +Nodes (3): B01_Dashboard_UI_Page.ts, 🔗 연관 개념 및 의존성, 🛠️ 주요 함수 목록 + +### Community 126 - "B02_ProjRegister_Router.md" +Cohesion: 0.50 +Nodes (3): B02_ProjRegister_Router.py, 🔗 연관 개념 및 의존성, 🛠️ 주요 함수 목록 + +### Community 129 - "B03_FileInput_Router.md" +Cohesion: 0.50 +Nodes (3): B03_FileInput_Router.py, 🔗 연관 개념 및 의존성, 🛠️ 주요 함수 목록 + +### Community 130 - "B04_PreProcess_Router.md" +Cohesion: 0.50 +Nodes (3): B04_PreProcess_Router.py, 🔗 연관 개념 및 의존성, 🛠️ 주요 함수 목록 + +### Community 132 - "B05_Profile_Engine_Grade.md" +Cohesion: 0.50 +Nodes (3): B05_Profile_Engine_Grade.py, 🔗 연관 개념 및 의존성, 🛠️ 주요 클래스 및 함수 목록 + +### Community 133 - "B05_Profile_Engine_Solver.md" +Cohesion: 0.50 +Nodes (3): B05_Profile_Engine_Solver.py, 🛠️ 엔진 핵심 함수 목록, 🔗 연관 개념 및 의존성 + +### Community 134 - "B05_Profile_Repository.md" +Cohesion: 0.50 +Nodes (3): B05_Profile_Repository.py, 🛠️ DB 접근 함수 목록, 🔗 연관 개념 및 의존성 + +### Community 135 - "B05_Profile_Router.md" +Cohesion: 0.50 +Nodes (3): B05_Profile_Router.py, 🛠️ 라우터 API 및 주요 함수 목록, 🔗 연관 모듈 및 의존성 + +### Community 136 - "B05_Profile_Router_Confirm.md" +Cohesion: 0.50 +Nodes (3): B05_Profile_Router_Confirm.py, 🔗 연관 모듈, 🛠️ 주요 헬퍼 함수 목록 + +### Community 137 - "B05_Profile_Schema.md" +Cohesion: 0.50 +Nodes (3): B05_Profile_Schema.py, 🛠️ Pydantic 모델 및 검증 헬퍼 목록, 🔗 연관 개념 및 의존성 + +### Community 138 - "B05_Profile_UI_IrregularStations.md" +Cohesion: 0.50 +Nodes (3): B05_Profile_UI_IrregularStations.ts, 🔗 연관 개념 및 의존성, 🛠️ 주요 인터페이스 및 함수 목록 + +### Community 139 - "B05_Profile_UI_Page.md" +Cohesion: 0.50 +Nodes (3): B05_Profile_UI_Page.ts, 🔗 연관 개념 및 의존성, 🛠️ 주요 컴포넌트 및 함수 목록 + +### Community 140 - "B05_Profile_UI_Panel.md" +Cohesion: 0.50 +Nodes (3): B05_Profile_UI_Panel.ts, 🔗 연관 개념 및 의존성, 🛠️ 주요 함수 목록 + +### Community 141 - "B05_Profile_UI_Profile_Alignment.md" +Cohesion: 0.50 +Nodes (3): B05_Profile_UI_Profile_Alignment.ts, 🔗 연관 개념 및 의존성, 🛠️ 주요 함수 목록 + +### Community 142 - "B05_Profile_UI_Profile_Table.md" +Cohesion: 0.50 +Nodes (3): B05_Profile_UI_Profile_Table.ts, 🔗 연관 개념 및 의존성, 🛠️ 주요 함수 목록 + +### Community 143 - "B05_Profile_UI_Viewer.md" +Cohesion: 0.50 +Nodes (3): B05_Profile_UI_Viewer.ts, 🔗 연관 개념 및 의존성, 🛠️ 주요 함수 목록 + +### Community 145 - "B06_Section_Router.md" +Cohesion: 0.50 +Nodes (3): B06_Section_Router.py, 🛠️ 라우터 API 및 주요 함수 목록, 🔗 연관 개념 및 의존성 + +### Community 146 - "B01~B09 Workflow 데이터 흐름" +Cohesion: 0.40 +Nodes (4): 3D 방위와 좌표계, B04 세부유역·방위·좌표계, 세부유역 형상 보존, 종단 높낮이 기반 배정 + +### Community 158 - "B03 계획노선 정본·좌표계 후속" +Cohesion: 0.40 +Nodes (4): B05 구조물 구간 절취·측벽·성토 패치, B06 변형 성토선 패치, 저장·검증, 절취와 경계 + +### Community 159 - "B03 파일 입력 화면 정리" +Cohesion: 0.40 +Nodes (4): B06 횡단 관 형상·유토곡선 후속, I형 집수정 관 형상, 계산 상태와 경고, 파일 책임 분리 + +### Community 160 - "B04 3D 방위·좌표계 최신 결정" +Cohesion: 0.40 +Nodes (4): B08 CAD 기본 조작, 검증·제외, 선택·편집, 입력·상태 + +### Community 161 - "B04 세부유역·방위·좌표계" +Cohesion: 0.40 +Nodes (4): B08 CAD 도각·표제란, 값 공급, 도각 편집·보존, 회사 자산과 담당자 + +### Community 162 - "B05 구조물 구간 절취·측벽·성토 패치" +Cohesion: 0.40 +Nodes (4): B08 CAD 사용자 편의성 정리, 검증 상태, 구현 기록, 사용자 흐름 + +### Community 163 - "B05 구조물 3D 투영 커브" +Cohesion: 0.50 +Nodes (3): B03 계획노선 정본·좌표계 후속, LAS 없는 설계와 업로드 상태, 계획노선 정본 + +### Community 164 - "B05_Profile — Frontend" +Cohesion: 0.50 +Nodes (3): B03 파일 입력 화면 정리, 입력 규칙, 화면 구성 + +### Community 165 - "B05 유토곡선·구조물 후속" +Cohesion: 0.50 +Nodes (3): 3D 방위 위젯, B04 3D 방위·좌표계 최신 결정, 작업 좌표계 + +### Community 166 - "B05 종단곡선·실시간 횡단 연동" +Cohesion: 0.50 +Nodes (3): B05 유토곡선·구조물 후속, 유지·판정 사항, 유토곡선 공용화 + +### Community 167 - "B06 횡단 계산 미러·카드 표기" +Cohesion: 0.50 +Nodes (3): B05 종단곡선·실시간 횡단 연동, 실시간 횡단·유토곡선, 초기 종단곡선 + +### Community 168 - "B06 횡단 관 형상·유토곡선 후속" +Cohesion: 0.50 +Nodes (3): B06 횡단 계산 미러·카드 표기, 프론트 계산 미러, 횡단 카드 표기 + +### Community 171 - "B08 CAD·납품 도면 후속" +Cohesion: 0.50 +Nodes (3): B08 CAD·납품 도면 후속, CAD 편집·확정, 토적도·유역도 + +### Community 182 - "2026-09-02 완료 항목" +Cohesion: 0.25 +Nodes (7): 2026-09-02 완료 항목, B05 구조물 3D, B05 종단 편집 후속, CAD, 노선·지표면, 작업 환경, 회귀 상태 + +### Community 183 - "2026-09-03 완료 — 입력·배수·종횡단·CAD" +Cohesion: 0.50 +Nodes (3): 2026-09-03 완료 — 입력·배수·종횡단·CAD, 공통 결정, 완료 범위 + +### Community 184 - "2026-09-03 추가 완료 — 화면·종단·횡단" +Cohesion: 0.50 +Nodes (3): 2026-09-03 추가 완료 — 화면·종단·횡단, 완료 범위, 최신 결정 + +## Knowledge Gaps +- **756 isolated node(s):** `단계별 판정`, `비워크플로 영역 판정`, `구현 상태 용어`, `반드시 유지할 구분`, `미결 설계` (+751 more) + These have ≤1 connection - possible missing edges or undocumented components. +- **34 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes. + +## Work-memory lessons + +**Known dead ends** — questions that led nowhere; don't re-derive. +- "배수관 매설시 각도의 제약조건이 있는지 확인해줘. 임도에서" -> `배수유역 해석 및 세부설계` +- "임도 기술정보DB에서 집수정의 형태정보는 어떤게 있는지 확인해줘." -> `B06 배수관 횡단도 세트`, `유입 구조물 판정` + +## Suggested Questions +_Questions this graph is uniquely positioned to answer:_ + +- **What connects `단계별 판정`, `비워크플로 영역 판정`, `구현 상태 용어` to the rest of the system?** + _756 weakly-connected nodes found - possible documentation gaps or missing edges._ +- **Should `UI Templates — Localization & Components` be split into smaller, more focused modules?** + _Cohesion score 0.046511627906976744 - nodes in this community are weakly interconnected._ +- **Should `인증 / RBAC` be split into smaller, more focused modules?** + _Cohesion score 0.05555555555555555 - nodes in this community are weakly interconnected._ +- **Should `A00_Common — App Shell Framework` be split into smaller, more focused modules?** + _Cohesion score 0.07692307692307693 - nodes in this community are weakly interconnected._ +- **Should `2026-09-04 완료 항목` be split into smaller, more focused modules?** + _Cohesion score 0.06896551724137931 - nodes in this community are weakly interconnected._ +- **Should `2026-08-29 완료 반영` be split into smaller, more focused modules?** + _Cohesion score 0.1 - nodes in this community are weakly interconnected._ +- **Should `현재 구현 현황 — 소스 읽기 감사` be split into smaller, more focused modules?** + _Cohesion score 0.058823529411764705 - nodes in this community are weakly interconnected._ \ No newline at end of file diff --git a/docs/wiki/graphify-out/2026-09-12/cost.json b/docs/wiki/graphify-out/2026-09-12/cost.json new file mode 100644 index 00000000..db24c842 --- /dev/null +++ b/docs/wiki/graphify-out/2026-09-12/cost.json @@ -0,0 +1,51 @@ +{ + "runs": [ + { + "date": "2026-08-16T00:00:00+09:00", + "input_tokens": 265124, + "output_tokens": 14991, + "files": 146 + }, + { + "date": "2026-08-16T12:43:20.106802+00:00", + "input_tokens": 27985, + "output_tokens": 2184, + "files": 22 + }, + { + "date": "2026-08-16T12:46:45.166477+00:00", + "input_tokens": 5694, + "output_tokens": 1138, + "files": 6 + }, + { + "date": "2026-08-16T12:48:56.020124+00:00", + "input_tokens": 14784, + "output_tokens": 2835, + "files": 12 + }, + { + "date": "2026-08-16T14:33:37.811664+00:00", + "input_tokens": 0, + "output_tokens": 0, + "files": 12, + "usage_note": "semantic subagent token usage unavailable from collaboration runtime; graph content extracted and validated" + }, + { + "date": "2026-08-20T11:01:22.299635+00:00", + "input_tokens": 0, + "output_tokens": 0, + "files": 10, + "usage_note": "Gemini backend dependency unavailable; host semantic extraction used and collaboration runtime token usage unavailable; 27 nodes/59 edges validated" + }, + { + "date": "2026-08-21T09:54:12.581221+00:00", + "input_tokens": 0, + "output_tokens": 0, + "files": 3, + "note": "collaboration runtime did not expose semantic extraction token usage" + } + ], + "total_input_tokens": 313587, + "total_output_tokens": 21148 +} \ No newline at end of file diff --git a/docs/wiki/graphify-out/2026-09-12/graph.json b/docs/wiki/graphify-out/2026-09-12/graph.json new file mode 100644 index 00000000..29afc03e --- /dev/null +++ b/docs/wiki/graphify-out/2026-09-12/graph.json @@ -0,0 +1,24053 @@ +{ + "directed": false, + "multigraph": false, + "graph": { + "hyperedges": [ + { + "id": "workflow_b03_b08_integration", + "label": "B03-B08 Workflow Data Flow", + "nodes": [ + "b03_fileinput_route_snapshot_crs", + "b04_preprocess_drainage_compass_crs", + "b05_profile_frontend", + "b06_section_cross_design_ui_2026_09", + "b08_designdetail_frontend" + ], + "relation": "participate_in", + "confidence": "INFERRED", + "confidence_score": 0.9, + "source_file": "index.md" + }, + { + "id": "mass_haul_shared_logic", + "label": "Shared Mass Haul Calculation and UI", + "nodes": [ + "b05_profile_masshaul_structure_2026_09", + "b06_section_masshaul_culvert_2026_09", + "b08_designdetail_cad_delivery_2026_09" + ], + "relation": "participate_in", + "confidence": "EXTRACTED", + "confidence_score": 0.85, + "source_file": "pages/B05_Profile/B05_masshaul_structure_2026_09.md" + }, + { + "id": "cad_delivery_system", + "label": "CAD Delivery and Usability Framework", + "nodes": [ + "b08_designdetail_cad_interaction", + "b08_designdetail_cad_title_block", + "b08_designdetail_cad_usability_2026_09_01", + "b08_designdetail_cad_delivery_2026_09" + ], + "relation": "form", + "confidence": "EXTRACTED", + "confidence_score": 0.95, + "source_file": "pages/B08_DesignDetail/B08_cad_delivery_2026_09.md" + }, + { + "id": "las_free_workflow_chain", + "label": "LAS-Free Analysis Workflow", + "nodes": [ + "concepts_las_free_sheet_surface", + "pages_b03_fileinput_backend", + "pages_b04_preprocess_backend" + ], + "relation": "participate_in", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "concepts/las_free_sheet_surface.md" + }, + { + "id": "b08_drawing_generation_flow", + "label": "B08 Drawing Generation Flow", + "nodes": [ + "b08_designdetail_b08_designdetail_engine_cad_masshaul_py", + "b08_designdetail_b08_designdetail_engine_cad_basin_py", + "common_util_common_util_mass_haul_settle_ts" + ], + "relation": "participate_in", + "confidence": "EXTRACTED", + "confidence_score": 0.9, + "source_file": "pages/B08_DesignDetail/B08_drawing_masshaul_watershed.md" + }, + { + "id": "drainage_system_flow", + "label": "Drainage System Workflow", + "nodes": [ + "concepts_drainage_watershed", + "pages_b05_profile_b05_structures", + "pages_b06_section_b06_culvert_set", + "pages_b06_section_b06_culvert_geometry_redesign" + ], + "relation": "participate_in", + "confidence": "EXTRACTED", + "confidence_score": 0.95, + "source_file": "concepts/drainage_watershed.md" + }, + { + "id": "mass_haul_system", + "label": "Mass Haul Diagram System", + "nodes": [ + "concepts_mass_haul_diagram", + "pages_b06_section_b06_frontend", + "pages_b08_designdetail_b08_drawing_masshaul_watershed" + ], + "relation": "participate_in", + "confidence": "EXTRACTED", + "confidence_score": 0.9, + "source_file": "concepts/mass_haul_diagram.md" + }, + { + "id": "corridor_3d_generation", + "label": "3D Corridor Generation Flow", + "nodes": [ + "pages_b05_profile_b05_corridor_surface", + "pages_b05_profile_b05_corridor_plan_curves", + "pages_b05_profile_b05_corridor_cut_fill", + "pages_b05_profile_b05_corridor_patch_finish" + ], + "relation": "participate_in", + "confidence": "EXTRACTED", + "confidence_score": 0.9, + "source_file": "pages/B05_Profile/B05_corridor_surface.md" + }, + { + "id": "workflow_late_stages", + "label": "Late Workflow Stages (B07-B09)", + "nodes": [ + "pages_b07_quantity_b07_frontend", + "pages_b08_designdetail_b08_frontend", + "pages_b09_estimation_b09_frontend" + ], + "relation": "participate_in", + "confidence": "EXTRACTED", + "confidence_score": 1.0 + } + ] + }, + "nodes": [ + { + "label": "implementation_status.md", + "file_type": "document", + "source_file": "architecture/implementation_status.md", + "source_location": "L1", + "_origin": "ast", + "id": "architecture_implementation_status", + "community": 33, + "community_name": "\ud604\uc7ac \uad6c\ud604 \ud604\ud669 \u2014 \uc18c\uc2a4 \uc77d\uae30 \uac10\uc0ac", + "norm_label": "implementation_status.md" + }, + { + "label": "\ud604\uc7ac \uad6c\ud604 \ud604\ud669 \u2014 \uc18c\uc2a4 \uc77d\uae30 \uac10\uc0ac", + "file_type": "document", + "source_file": "architecture/implementation_status.md", + "source_location": "L9", + "_origin": "ast", + "id": "architecture_implementation_status_\ud604\uc7ac_\uad6c\ud604_\ud604\ud669_\uc18c\uc2a4_\uc77d\uae30_\uac10\uc0ac", + "community": 33, + "community_name": "\ud604\uc7ac \uad6c\ud604 \ud604\ud669 \u2014 \uc18c\uc2a4 \uc77d\uae30 \uac10\uc0ac", + "norm_label": "\u1112\u1167\u11ab\u110c\u1162 \u1100\u116e\u1112\u1167\u11ab \u1112\u1167\u11ab\u1112\u116a\u11bc \u2014 \u1109\u1169\u1109\u1173 \u110b\u1175\u11b0\u1100\u1175 \u1100\u1161\u11b7\u1109\u1161" + }, + { + "label": "\ub2e8\uacc4\ubcc4 \ud310\uc815", + "file_type": "document", + "source_file": "architecture/implementation_status.md", + "source_location": "L13", + "_origin": "ast", + "id": "architecture_implementation_status_\ub2e8\uacc4\ubcc4_\ud310\uc815", + "community": 33, + "community_name": "\ud604\uc7ac \uad6c\ud604 \ud604\ud669 \u2014 \uc18c\uc2a4 \uc77d\uae30 \uac10\uc0ac", + "norm_label": "\u1103\u1161\u11ab\u1100\u1168\u1107\u1167\u11af \u1111\u1161\u11ab\u110c\u1165\u11bc" + }, + { + "label": "\ube44\uc6cc\ud06c\ud50c\ub85c \uc601\uc5ed \ud310\uc815", + "file_type": "document", + "source_file": "architecture/implementation_status.md", + "source_location": "L25", + "_origin": "ast", + "id": "architecture_implementation_status_\ube44\uc6cc\ud06c\ud50c\ub85c_\uc601\uc5ed_\ud310\uc815", + "community": 33, + "community_name": "\ud604\uc7ac \uad6c\ud604 \ud604\ud669 \u2014 \uc18c\uc2a4 \uc77d\uae30 \uac10\uc0ac", + "norm_label": "\u1107\u1175\u110b\u116f\u110f\u1173\u1111\u1173\u11af\u1105\u1169 \u110b\u1167\u11bc\u110b\u1167\u11a8 \u1111\u1161\u11ab\u110c\u1165\u11bc" + }, + { + "label": "\uad6c\ud604 \uc0c1\ud0dc \uc6a9\uc5b4", + "file_type": "document", + "source_file": "architecture/implementation_status.md", + "source_location": "L40", + "_origin": "ast", + "id": "architecture_implementation_status_\uad6c\ud604_\uc0c1\ud0dc_\uc6a9\uc5b4", + "community": 33, + "community_name": "\ud604\uc7ac \uad6c\ud604 \ud604\ud669 \u2014 \uc18c\uc2a4 \uc77d\uae30 \uac10\uc0ac", + "norm_label": "\u1100\u116e\u1112\u1167\u11ab \u1109\u1161\u11bc\u1110\u1162 \u110b\u116d\u11bc\u110b\u1165" + }, + { + "label": "\ubc18\ub4dc\uc2dc \uc720\uc9c0\ud560 \uad6c\ubd84", + "file_type": "document", + "source_file": "architecture/implementation_status.md", + "source_location": "L50", + "_origin": "ast", + "id": "architecture_implementation_status_\ubc18\ub4dc\uc2dc_\uc720\uc9c0\ud560_\uad6c\ubd84", + "community": 33, + "community_name": "\ud604\uc7ac \uad6c\ud604 \ud604\ud669 \u2014 \uc18c\uc2a4 \uc77d\uae30 \uac10\uc0ac", + "norm_label": "\u1107\u1161\u11ab\u1103\u1173\u1109\u1175 \u110b\u1172\u110c\u1175\u1112\u1161\u11af \u1100\u116e\u1107\u116e\u11ab" + }, + { + "label": "\ubbf8\uacb0 \uc124\uacc4", + "file_type": "document", + "source_file": "architecture/implementation_status.md", + "source_location": "L61", + "_origin": "ast", + "id": "architecture_implementation_status_\ubbf8\uacb0_\uc124\uacc4", + "community": 33, + "community_name": "\ud604\uc7ac \uad6c\ud604 \ud604\ud669 \u2014 \uc18c\uc2a4 \uc77d\uae30 \uac10\uc0ac", + "norm_label": "\u1106\u1175\u1100\u1167\u11af \u1109\u1165\u11af\u1100\u1168" + }, + { + "label": "project_map.md", + "file_type": "document", + "source_file": "architecture/project_map.md", + "source_location": "L1", + "_origin": "ast", + "id": "architecture_project_map", + "community": 33, + "community_name": "\ud604\uc7ac \uad6c\ud604 \ud604\ud669 \u2014 \uc18c\uc2a4 \uc77d\uae30 \uac10\uc0ac", + "norm_label": "project_map.md" + }, + { + "label": "Aislo \ud504\ub85c\uc81d\ud2b8 \uc9c0\ub3c4", + "file_type": "document", + "source_file": "architecture/project_map.md", + "source_location": "L9", + "_origin": "ast", + "id": "architecture_project_map_aislo_\ud504\ub85c\uc81d\ud2b8_\uc9c0\ub3c4", + "community": 33, + "community_name": "\ud604\uc7ac \uad6c\ud604 \ud604\ud669 \u2014 \uc18c\uc2a4 \uc77d\uae30 \uac10\uc0ac", + "norm_label": "aislo \u1111\u1173\u1105\u1169\u110c\u1166\u11a8\u1110\u1173 \u110c\u1175\u1103\u1169" + }, + { + "label": "\ud604\uc7ac \uba85\uce6d\uacfc \ucc45\uc784", + "file_type": "document", + "source_file": "architecture/project_map.md", + "source_location": "L11", + "_origin": "ast", + "id": "architecture_project_map_\ud604\uc7ac_\uba85\uce6d\uacfc_\ucc45\uc784", + "community": 33, + "community_name": "\ud604\uc7ac \uad6c\ud604 \ud604\ud669 \u2014 \uc18c\uc2a4 \uc77d\uae30 \uac10\uc0ac", + "norm_label": "\u1112\u1167\u11ab\u110c\u1162 \u1106\u1167\u11bc\u110e\u1175\u11bc\u1100\u116a \u110e\u1162\u11a8\u110b\u1175\u11b7" + }, + { + "label": "\ud0d0\uc0c9 \uc21c\uc11c", + "file_type": "document", + "source_file": "architecture/project_map.md", + "source_location": "L29", + "_origin": "ast", + "id": "architecture_project_map_\ud0d0\uc0c9_\uc21c\uc11c", + "community": 33, + "community_name": "\ud604\uc7ac \uad6c\ud604 \ud604\ud669 \u2014 \uc18c\uc2a4 \uc77d\uae30 \uac10\uc0ac", + "norm_label": "\u1110\u1161\u11b7\u1109\u1162\u11a8 \u1109\u116e\u11ab\u1109\u1165" + }, + { + "label": "\uba85\uce6d \ud310\uc815", + "file_type": "document", + "source_file": "architecture/project_map.md", + "source_location": "L39", + "_origin": "ast", + "id": "architecture_project_map_\uba85\uce6d_\ud310\uc815", + "community": 33, + "community_name": "\ud604\uc7ac \uad6c\ud604 \ud604\ud669 \u2014 \uc18c\uc2a4 \uc77d\uae30 \uac10\uc0ac", + "norm_label": "\u1106\u1167\u11bc\u110e\u1175\u11bc \u1111\u1161\u11ab\u110c\u1165\u11bc" + }, + { + "label": "public_admin_map.md", + "file_type": "document", + "source_file": "architecture/public_admin_map.md", + "source_location": "L1", + "_origin": "ast", + "id": "architecture_public_admin_map", + "community": 33, + "community_name": "\ud604\uc7ac \uad6c\ud604 \ud604\ud669 \u2014 \uc18c\uc2a4 \uc77d\uae30 \uac10\uc0ac", + "norm_label": "public_admin_map.md" + }, + { + "label": "\uacf5\uac1c\u00b7\uc778\uc99d\u00b7\uad00\ub9ac \uc601\uc5ed \uc9c0\ub3c4", + "file_type": "document", + "source_file": "architecture/public_admin_map.md", + "source_location": "L9", + "_origin": "ast", + "id": "architecture_public_admin_map_\uacf5\uac1c_\uc778\uc99d_\uad00\ub9ac_\uc601\uc5ed_\uc9c0\ub3c4", + "community": 33, + "community_name": "\ud604\uc7ac \uad6c\ud604 \ud604\ud669 \u2014 \uc18c\uc2a4 \uc77d\uae30 \uac10\uc0ac", + "norm_label": "\u1100\u1169\u11bc\u1100\u1162\u00b7\u110b\u1175\u11ab\u110c\u1173\u11bc\u00b7\u1100\u116a\u11ab\u1105\u1175 \u110b\u1167\u11bc\u110b\u1167\u11a8 \u110c\u1175\u1103\u1169" + }, + { + "label": "\uacf5\ud1b5 \uc758\uc874", + "file_type": "document", + "source_file": "architecture/public_admin_map.md", + "source_location": "L23", + "_origin": "ast", + "id": "architecture_public_admin_map_\uacf5\ud1b5_\uc758\uc874", + "community": 33, + "community_name": "\ud604\uc7ac \uad6c\ud604 \ud604\ud669 \u2014 \uc18c\uc2a4 \uc77d\uae30 \uac10\uc0ac", + "norm_label": "\u1100\u1169\u11bc\u1110\u1169\u11bc \u110b\u1174\u110c\u1169\u11ab" + }, + { + "label": "\uc9c1\uc811 \uad6c\ud604 \uad00\uacc4", + "file_type": "document", + "source_file": "architecture/public_admin_map.md", + "source_location": "L34", + "_origin": "ast", + "id": "architecture_public_admin_map_\uc9c1\uc811_\uad6c\ud604_\uad00\uacc4", + "community": 33, + "community_name": "\ud604\uc7ac \uad6c\ud604 \ud604\ud669 \u2014 \uc18c\uc2a4 \uc77d\uae30 \uac10\uc0ac", + "norm_label": "\u110c\u1175\u11a8\u110c\u1165\u11b8 \u1100\u116e\u1112\u1167\u11ab \u1100\u116a\u11ab\u1100\u1168" + }, + { + "label": "shared_resources.md", + "file_type": "document", + "source_file": "architecture/shared_resources.md", + "source_location": "L1", + "_origin": "ast", + "id": "architecture_shared_resources", + "community": 33, + "community_name": "\ud604\uc7ac \uad6c\ud604 \ud604\ud669 \u2014 \uc18c\uc2a4 \uc77d\uae30 \uac10\uc0ac", + "norm_label": "shared_resources.md" + }, + { + "label": "\uacf5\uc720 \uc790\uc6d0 \uc601\ud5a5 \uc9c0\ub3c4", + "file_type": "document", + "source_file": "architecture/shared_resources.md", + "source_location": "L8", + "_origin": "ast", + "id": "architecture_shared_resources_\uacf5\uc720_\uc790\uc6d0_\uc601\ud5a5_\uc9c0\ub3c4", + "community": 33, + "community_name": "\ud604\uc7ac \uad6c\ud604 \ud604\ud669 \u2014 \uc18c\uc2a4 \uc77d\uae30 \uac10\uc0ac", + "norm_label": "\u1100\u1169\u11bc\u110b\u1172 \u110c\u1161\u110b\u116f\u11ab \u110b\u1167\u11bc\u1112\u1163\u11bc \u110c\u1175\u1103\u1169" + }, + { + "label": "\ub2e8\uacc4\ubcc4 \uc9c1\uc811 \uc5f0\uacb0", + "file_type": "document", + "source_file": "architecture/shared_resources.md", + "source_location": "L29", + "_origin": "ast", + "id": "architecture_shared_resources_\ub2e8\uacc4\ubcc4_\uc9c1\uc811_\uc5f0\uacb0", + "community": 33, + "community_name": "\ud604\uc7ac \uad6c\ud604 \ud604\ud669 \u2014 \uc18c\uc2a4 \uc77d\uae30 \uac10\uc0ac", + "norm_label": "\u1103\u1161\u11ab\u1100\u1168\u1107\u1167\u11af \u110c\u1175\u11a8\u110c\u1165\u11b8 \u110b\u1167\u11ab\u1100\u1167\u11af" + }, + { + "label": "\uc601\ud5a5 \ubd84\uc11d \uaddc\uce59", + "file_type": "document", + "source_file": "architecture/shared_resources.md", + "source_location": "L41", + "_origin": "ast", + "id": "architecture_shared_resources_\uc601\ud5a5_\ubd84\uc11d_\uaddc\uce59", + "community": 33, + "community_name": "\ud604\uc7ac \uad6c\ud604 \ud604\ud669 \u2014 \uc18c\uc2a4 \uc77d\uae30 \uac10\uc0ac", + "norm_label": "\u110b\u1167\u11bc\u1112\u1163\u11bc \u1107\u116e\u11ab\u1109\u1165\u11a8 \u1100\u1172\u110e\u1175\u11a8" + }, + { + "label": "workflow_data_flow.md", + "file_type": "document", + "source_file": "architecture/workflow_data_flow.md", + "source_location": "L1", + "_origin": "ast", + "id": "architecture_workflow_data_flow", + "community": 33, + "community_name": "\ud604\uc7ac \uad6c\ud604 \ud604\ud669 \u2014 \uc18c\uc2a4 \uc77d\uae30 \uac10\uc0ac", + "norm_label": "workflow_data_flow.md" + }, + { + "label": "B01~B09 Workflow \ub370\uc774\ud130 \ud750\ub984", + "file_type": "document", + "source_file": "architecture/workflow_data_flow.md", + "source_location": "L9", + "_origin": "ast", + "id": "architecture_workflow_data_flow_b01_b09_workflow_\ub370\uc774\ud130_\ud750\ub984", + "community": 33, + "community_name": "\ud604\uc7ac \uad6c\ud604 \ud604\ud669 \u2014 \uc18c\uc2a4 \uc77d\uae30 \uac10\uc0ac", + "norm_label": "b01~b09 workflow \u1103\u1166\u110b\u1175\u1110\u1165 \u1112\u1173\u1105\u1173\u11b7" + }, + { + "label": "\ub2e8\uacc4 \uad00\uacc4", + "file_type": "document", + "source_file": "architecture/workflow_data_flow.md", + "source_location": "L11", + "_origin": "ast", + "id": "architecture_workflow_data_flow_\ub2e8\uacc4_\uad00\uacc4", + "community": 33, + "community_name": "\ud604\uc7ac \uad6c\ud604 \ud604\ud669 \u2014 \uc18c\uc2a4 \uc77d\uae30 \uac10\uc0ac", + "norm_label": "\u1103\u1161\u11ab\u1100\u1168 \u1100\u116a\u11ab\u1100\u1168" + }, + { + "label": "B04\u2192B06 \uc790\ub3d9 \uacc4\uc0b0\uacfc \uc7ac\uc124\uacc4", + "file_type": "document", + "source_file": "architecture/workflow_data_flow.md", + "source_location": "L25", + "_origin": "ast", + "id": "architecture_workflow_data_flow_b04_b06_\uc790\ub3d9_\uacc4\uc0b0\uacfc_\uc7ac\uc124\uacc4", + "community": 33, + "community_name": "\ud604\uc7ac \uad6c\ud604 \ud604\ud669 \u2014 \uc18c\uc2a4 \uc77d\uae30 \uac10\uc0ac", + "norm_label": "b04\u2192b06 \u110c\u1161\u1103\u1169\u11bc \u1100\u1168\u1109\u1161\u11ab\u1100\u116a \u110c\u1162\u1109\u1165\u11af\u1100\u1168" + }, + { + "label": "\uc0c1\ud0dc\uc640 \uc0b0\ucd9c\ubb3c \ubb34\ud6a8\ud654", + "file_type": "document", + "source_file": "architecture/workflow_data_flow.md", + "source_location": "L35", + "_origin": "ast", + "id": "architecture_workflow_data_flow_\uc0c1\ud0dc\uc640_\uc0b0\ucd9c\ubb3c_\ubb34\ud6a8\ud654", + "community": 33, + "community_name": "\ud604\uc7ac \uad6c\ud604 \ud604\ud669 \u2014 \uc18c\uc2a4 \uc77d\uae30 \uac10\uc0ac", + "norm_label": "\u1109\u1161\u11bc\u1110\u1162\u110b\u116a \u1109\u1161\u11ab\u110e\u116e\u11af\u1106\u116e\u11af \u1106\u116e\u1112\u116d\u1112\u116a" + }, + { + "label": "\uc815\ubcf8 \uc704\uce58", + "file_type": "document", + "source_file": "architecture/workflow_data_flow.md", + "source_location": "L43", + "_origin": "ast", + "id": "architecture_workflow_data_flow_\uc815\ubcf8_\uc704\uce58", + "community": 33, + "community_name": "\ud604\uc7ac \uad6c\ud604 \ud604\ud669 \u2014 \uc18c\uc2a4 \uc77d\uae30 \uac10\uc0ac", + "norm_label": "\u110c\u1165\u11bc\u1107\u1169\u11ab \u110b\u1171\u110e\u1175" + }, + { + "label": "a00_app_shell_framework.md", + "file_type": "document", + "source_file": "concepts/a00_app_shell_framework.md", + "source_location": "L1", + "_origin": "ast", + "id": "concepts_a00_app_shell_framework", + "community": 2, + "community_name": "A00_Common \u2014 App Shell Framework", + "norm_label": "a00_app_shell_framework.md" + }, + { + "label": "A00_Common \u2014 App Shell Framework", + "file_type": "document", + "source_file": "concepts/a00_app_shell_framework.md", + "source_location": "L8", + "_origin": "ast", + "id": "concepts_a00_app_shell_framework_a00_common_app_shell_framework", + "community": 2, + "community_name": "A00_Common \u2014 App Shell Framework", + "norm_label": "a00_common \u2014 app shell framework" + }, + { + "label": "\ud30c\uc77c \uad6c\uc131", + "file_type": "document", + "source_file": "concepts/a00_app_shell_framework.md", + "source_location": "L12", + "_origin": "ast", + "id": "concepts_a00_app_shell_framework_\ud30c\uc77c_\uad6c\uc131", + "community": 2, + "community_name": "A00_Common \u2014 App Shell Framework", + "norm_label": "\u1111\u1161\u110b\u1175\u11af \u1100\u116e\u1109\u1165\u11bc" + }, + { + "label": "app_shell \uad6c\uc131\uc694\uc18c", + "file_type": "document", + "source_file": "concepts/a00_app_shell_framework.md", + "source_location": "L21", + "_origin": "ast", + "id": "concepts_a00_app_shell_framework_app_shell_\uad6c\uc131\uc694\uc18c", + "community": 2, + "community_name": "A00_Common \u2014 App Shell Framework", + "norm_label": "app_shell \u1100\u116e\u1109\u1165\u11bc\u110b\u116d\u1109\u1169" + }, + { + "label": "\ud14c\ub9c8 & \uc5b8\uc5b4 \uad00\ub9ac", + "file_type": "document", + "source_file": "concepts/a00_app_shell_framework.md", + "source_location": "L22", + "_origin": "ast", + "id": "concepts_a00_app_shell_framework_\ud14c\ub9c8_\uc5b8\uc5b4_\uad00\ub9ac", + "community": 2, + "community_name": "A00_Common \u2014 App Shell Framework", + "norm_label": "\u1110\u1166\u1106\u1161 & \u110b\u1165\u11ab\u110b\u1165 \u1100\u116a\u11ab\u1105\u1175" + }, + { + "label": "\ud5e4\ub354 \uad6c\uc131 (64px \ub192\uc774, sticky)", + "file_type": "document", + "source_file": "concepts/a00_app_shell_framework.md", + "source_location": "L27", + "_origin": "ast", + "id": "concepts_a00_app_shell_framework_\ud5e4\ub354_\uad6c\uc131_64px_\ub192\uc774_sticky", + "community": 2, + "community_name": "A00_Common \u2014 App Shell Framework", + "norm_label": "\u1112\u1166\u1103\u1165 \u1100\u116e\u1109\u1165\u11bc (64px \u1102\u1169\u11c1\u110b\u1175, sticky)" + }, + { + "label": "router \ub77c\uc6b0\ud305 \ud14c\uc774\ube14", + "file_type": "document", + "source_file": "concepts/a00_app_shell_framework.md", + "source_location": "L32", + "_origin": "ast", + "id": "concepts_a00_app_shell_framework_router_\ub77c\uc6b0\ud305_\ud14c\uc774\ube14", + "community": 2, + "community_name": "A00_Common \u2014 App Shell Framework", + "norm_label": "router \u1105\u1161\u110b\u116e\u1110\u1175\u11bc \u1110\u1166\u110b\u1175\u1107\u1173\u11af" + }, + { + "label": "\uc778\uc99d \uac00\ub4dc", + "file_type": "document", + "source_file": "concepts/a00_app_shell_framework.md", + "source_location": "L36", + "_origin": "ast", + "id": "concepts_a00_app_shell_framework_\uc778\uc99d_\uac00\ub4dc", + "community": 2, + "community_name": "A00_Common \u2014 App Shell Framework", + "norm_label": "\u110b\u1175\u11ab\u110c\u1173\u11bc \u1100\u1161\u1103\u1173" + }, + { + "label": "\uc138\ubd80 \uc2a4\uce90\ud3f4\ub4dc\u00b7CSS\u00b7\uc885\uc18d\uc131", + "file_type": "document", + "source_file": "concepts/a00_app_shell_framework.md", + "source_location": "L40", + "_origin": "ast", + "id": "concepts_a00_app_shell_framework_\uc138\ubd80_\uc2a4\uce90\ud3f4\ub4dc_css_\uc885\uc18d\uc131", + "community": 2, + "community_name": "A00_Common \u2014 App Shell Framework", + "norm_label": "\u1109\u1166\u1107\u116e \u1109\u1173\u110f\u1162\u1111\u1169\u11af\u1103\u1173\u00b7css\u00b7\u110c\u1169\u11bc\u1109\u1169\u11a8\u1109\u1165\u11bc" + }, + { + "label": "a00_app_shell_framework_scaffold.md", + "file_type": "document", + "source_file": "concepts/a00_app_shell_framework_scaffold.md", + "source_location": "L1", + "_origin": "ast", + "id": "concepts_a00_app_shell_framework_scaffold", + "community": 2, + "community_name": "A00_Common \u2014 App Shell Framework", + "norm_label": "a00_app_shell_framework_scaffold.md" + }, + { + "label": "A00_Common \u2014 \uc2a4\uce90\ud3f4\ub4dc\u00b7CSS\u00b7\uc885\uc18d\uc131", + "file_type": "document", + "source_file": "concepts/a00_app_shell_framework_scaffold.md", + "source_location": "L10", + "_origin": "ast", + "id": "concepts_a00_app_shell_framework_scaffold_a00_common_\uc2a4\uce90\ud3f4\ub4dc_css_\uc885\uc18d\uc131", + "community": 2, + "community_name": "A00_Common \u2014 App Shell Framework", + "norm_label": "a00_common \u2014 \u1109\u1173\u110f\u1162\u1111\u1169\u11af\u1103\u1173\u00b7css\u00b7\u110c\u1169\u11bc\u1109\u1169\u11a8\u1109\u1165\u11bc" + }, + { + "label": "b_page_scaffold", + "file_type": "document", + "source_file": "concepts/a00_app_shell_framework_scaffold.md", + "source_location": "L12", + "_origin": "ast", + "id": "concepts_a00_app_shell_framework_scaffold_b_page_scaffold", + "community": 2, + "community_name": "A00_Common \u2014 App Shell Framework", + "norm_label": "b_page_scaffold" + }, + { + "label": "CSS \uc778\uc81d\uc158", + "file_type": "document", + "source_file": "concepts/a00_app_shell_framework_scaffold.md", + "source_location": "L19", + "_origin": "ast", + "id": "concepts_a00_app_shell_framework_scaffold_css_\uc778\uc81d\uc158", + "community": 2, + "community_name": "A00_Common \u2014 App Shell Framework", + "norm_label": "css \u110b\u1175\u11ab\u110c\u1166\u11a8\u1109\u1167\u11ab" + }, + { + "label": "\uc885\uc18d\uc131", + "file_type": "document", + "source_file": "concepts/a00_app_shell_framework_scaffold.md", + "source_location": "L26", + "_origin": "ast", + "id": "concepts_a00_app_shell_framework_scaffold_\uc885\uc18d\uc131", + "community": 2, + "community_name": "A00_Common \u2014 App Shell Framework", + "norm_label": "\u110c\u1169\u11bc\u1109\u1169\u11a8\u1109\u1165\u11bc" + }, + { + "label": "\uc0ac\uc6a9\ucc98", + "file_type": "document", + "source_file": "concepts/a00_app_shell_framework_scaffold.md", + "source_location": "L34", + "_origin": "ast", + "id": "concepts_a00_app_shell_framework_scaffold_\uc0ac\uc6a9\ucc98", + "community": 2, + "community_name": "A00_Common \u2014 App Shell Framework", + "norm_label": "\u1109\u1161\u110b\u116d\u11bc\u110e\u1165" + }, + { + "label": "api_common.md", + "file_type": "document", + "source_file": "concepts/api_common.md", + "source_location": "L1", + "_origin": "ast", + "id": "concepts_api_common", + "community": 3, + "community_name": "2026-09-04 \uc644\ub8cc \ud56d\ubaa9", + "norm_label": "api_common.md" + }, + { + "label": "API \uacf5\ud1b5 (\uc5ec\ub7ec \ud398\uc774\uc9c0\uac00 \uacf5\uc720\ud558\ub294 \uc5d4\ub4dc\ud3ec\uc778\ud2b8)", + "file_type": "document", + "source_file": "concepts/api_common.md", + "source_location": "L9", + "_origin": "ast", + "id": "concepts_api_common_api_\uacf5\ud1b5_\uc5ec\ub7ec_\ud398\uc774\uc9c0\uac00_\uacf5\uc720\ud558\ub294_\uc5d4\ub4dc\ud3ec\uc778\ud2b8", + "community": 3, + "community_name": "2026-09-04 \uc644\ub8cc \ud56d\ubaa9", + "norm_label": "api \u1100\u1169\u11bc\u1110\u1169\u11bc (\u110b\u1167\u1105\u1165 \u1111\u1166\u110b\u1175\u110c\u1175\u1100\u1161 \u1100\u1169\u11bc\u110b\u1172\u1112\u1161\u1102\u1173\u11ab \u110b\u1166\u11ab\u1103\u1173\u1111\u1169\u110b\u1175\u11ab\u1110\u1173)" + }, + { + "label": "\uacf5\ud1b5 \uc624\ub958 \uc751\ub2f5 \ud3ec\ub9f7 (\uc804 \ub77c\uc6b0\ud130)", + "file_type": "document", + "source_file": "concepts/api_common.md", + "source_location": "L11", + "_origin": "ast", + "id": "concepts_api_common_\uacf5\ud1b5_\uc624\ub958_\uc751\ub2f5_\ud3ec\ub9f7_\uc804_\ub77c\uc6b0\ud130", + "community": 3, + "community_name": "2026-09-04 \uc644\ub8cc \ud56d\ubaa9", + "norm_label": "\u1100\u1169\u11bc\u1110\u1169\u11bc \u110b\u1169\u1105\u1172 \u110b\u1173\u11bc\u1103\u1161\u11b8 \u1111\u1169\u1106\u1162\u11ba (\u110c\u1165\u11ab \u1105\u1161\u110b\u116e\u1110\u1165)" + }, + { + "label": "\uc6cc\ud06c\ud50c\ub85c\uc6b0 \uc0c1\ud0dc \uc870\ud68c", + "file_type": "document", + "source_file": "concepts/api_common.md", + "source_location": "L17", + "_origin": "ast", + "id": "concepts_api_common_\uc6cc\ud06c\ud50c\ub85c\uc6b0_\uc0c1\ud0dc_\uc870\ud68c", + "community": 3, + "community_name": "2026-09-04 \uc644\ub8cc \ud56d\ubaa9", + "norm_label": "\u110b\u116f\u110f\u1173\u1111\u1173\u11af\u1105\u1169\u110b\u116e \u1109\u1161\u11bc\u1110\u1162 \u110c\u1169\u1112\u116c" + }, + { + "label": "\ud3f4\ub9c1 \ud328\ud134 (legacy workflow.json \uc124\uacc4; \ud604\uc7ac \uad6c\ud604\uc740 workflow-state API \uc0ac\uc6a9)", + "file_type": "document", + "source_file": "concepts/api_common.md", + "source_location": "L25", + "_origin": "ast", + "id": "concepts_api_common_\ud3f4\ub9c1_\ud328\ud134_legacy_workflow_json_\uc124\uacc4_\ud604\uc7ac_\uad6c\ud604\uc740_workflow_state_api_\uc0ac\uc6a9", + "community": 3, + "community_name": "2026-09-04 \uc644\ub8cc \ud56d\ubaa9", + "norm_label": "\u1111\u1169\u11af\u1105\u1175\u11bc \u1111\u1162\u1110\u1165\u11ab (legacy workflow.json \u1109\u1165\u11af\u1100\u1168; \u1112\u1167\u11ab\u110c\u1162 \u1100\u116e\u1112\u1167\u11ab\u110b\u1173\u11ab workflow-state api \u1109\u1161\u110b\u116d\u11bc)" + }, + { + "label": "auth_rbac.md", + "file_type": "document", + "source_file": "concepts/auth_rbac.md", + "source_location": "L1", + "_origin": "ast", + "id": "concepts_auth_rbac", + "community": 1, + "community_name": "\uc778\uc99d / RBAC", + "norm_label": "auth_rbac.md" + }, + { + "label": "\uc778\uc99d / RBAC", + "file_type": "document", + "source_file": "concepts/auth_rbac.md", + "source_location": "L9", + "_origin": "ast", + "id": "concepts_auth_rbac_\uc778\uc99d_rbac", + "community": 1, + "community_name": "\uc778\uc99d / RBAC", + "norm_label": "\u110b\u1175\u11ab\u110c\u1173\u11bc / rbac" + }, + { + "label": "\uc138\uc158 \uc778\uc99d (backend.md 6.3)", + "file_type": "document", + "source_file": "concepts/auth_rbac.md", + "source_location": "L11", + "_origin": "ast", + "id": "concepts_auth_rbac_\uc138\uc158_\uc778\uc99d_backend_md_6_3", + "community": 1, + "community_name": "\uc778\uc99d / RBAC", + "norm_label": "\u1109\u1166\u1109\u1167\u11ab \u110b\u1175\u11ab\u110c\u1173\u11bc (backend.md 6.3)" + }, + { + "label": "OTP / \ube44\ubc00\ubc88\ud638 \ubc0f \ub514\ubc14\uc774\uc2a4 \uc2e0\ub8b0", + "file_type": "document", + "source_file": "concepts/auth_rbac.md", + "source_location": "L18", + "_origin": "ast", + "id": "concepts_auth_rbac_otp_\ube44\ubc00\ubc88\ud638_\ubc0f_\ub514\ubc14\uc774\uc2a4_\uc2e0\ub8b0", + "community": 1, + "community_name": "\uc778\uc99d / RBAC", + "norm_label": "otp / \u1107\u1175\u1106\u1175\u11af\u1107\u1165\u11ab\u1112\u1169 \u1106\u1175\u11be \u1103\u1175\u1107\u1161\u110b\u1175\u1109\u1173 \u1109\u1175\u11ab\u1105\u116c" + }, + { + "label": "\uc0ac\uc6a9\uc790 \uc0c1\ud0dc \uc0dd\uba85\uc8fc\uae30", + "file_type": "document", + "source_file": "concepts/auth_rbac.md", + "source_location": "L27", + "_origin": "ast", + "id": "concepts_auth_rbac_\uc0ac\uc6a9\uc790_\uc0c1\ud0dc_\uc0dd\uba85\uc8fc\uae30", + "community": 1, + "community_name": "\uc778\uc99d / RBAC", + "norm_label": "\u1109\u1161\u110b\u116d\u11bc\u110c\u1161 \u1109\u1161\u11bc\u1110\u1162 \u1109\u1162\u11bc\u1106\u1167\u11bc\u110c\u116e\u1100\u1175" + }, + { + "label": "\uc5ed\ud560 (users.role)", + "file_type": "document", + "source_file": "concepts/auth_rbac.md", + "source_location": "L37", + "_origin": "ast", + "id": "concepts_auth_rbac_\uc5ed\ud560_users_role", + "community": 1, + "community_name": "\uc778\uc99d / RBAC", + "norm_label": "\u110b\u1167\u11a8\u1112\u1161\u11af (users.role)" + }, + { + "label": "\uad8c\ud55c \uac80\uc99d \ud5ec\ud37c (B01_Dashboard)", + "file_type": "document", + "source_file": "concepts/auth_rbac.md", + "source_location": "L46", + "_origin": "ast", + "id": "concepts_auth_rbac_\uad8c\ud55c_\uac80\uc99d_\ud5ec\ud37c_b01_dashboard", + "community": 1, + "community_name": "\uc778\uc99d / RBAC", + "norm_label": "\u1100\u116f\u11ab\u1112\u1161\u11ab \u1100\u1165\u11b7\u110c\u1173\u11bc \u1112\u1166\u11af\u1111\u1165 (b01_dashboard)" + }, + { + "label": "\uc778\uc99d \uac31\uc2e0 \ubc0f \ub9cc\ub8cc \uc77c\uc6d0\ud654", + "file_type": "document", + "source_file": "concepts/auth_rbac.md", + "source_location": "L57", + "_origin": "ast", + "id": "concepts_auth_rbac_\uc778\uc99d_\uac31\uc2e0_\ubc0f_\ub9cc\ub8cc_\uc77c\uc6d0\ud654", + "community": 1, + "community_name": "\uc778\uc99d / RBAC", + "norm_label": "\u110b\u1175\u11ab\u110c\u1173\u11bc \u1100\u1162\u11bc\u1109\u1175\u11ab \u1106\u1175\u11be \u1106\u1161\u11ab\u1105\u116d \u110b\u1175\u11af\u110b\u116f\u11ab\u1112\u116a" + }, + { + "label": "\ub77c\uc6b0\ud305 \uac00\ub4dc (frontend.md 5.2)", + "file_type": "document", + "source_file": "concepts/auth_rbac.md", + "source_location": "L61", + "_origin": "ast", + "id": "concepts_auth_rbac_\ub77c\uc6b0\ud305_\uac00\ub4dc_frontend_md_5_2", + "community": 1, + "community_name": "\uc778\uc99d / RBAC", + "norm_label": "\u1105\u1161\u110b\u116e\u1110\u1175\u11bc \u1100\u1161\u1103\u1173 (frontend.md 5.2)" + }, + { + "label": "\uc0ac\uc6a9\ucc98 (\uc5ed\ucc38\uc870)", + "file_type": "document", + "source_file": "concepts/auth_rbac.md", + "source_location": "L64", + "_origin": "ast", + "id": "concepts_auth_rbac_\uc0ac\uc6a9\ucc98_\uc5ed\ucc38\uc870", + "community": 1, + "community_name": "\uc778\uc99d / RBAC", + "norm_label": "\u1109\u1161\u110b\u116d\u11bc\u110e\u1165 (\u110b\u1167\u11a8\u110e\u1161\u11b7\u110c\u1169)" + }, + { + "label": "b07_external_webcad_demos.md", + "file_type": "document", + "source_file": "concepts/b07_external_webcad_demos.md", + "source_location": "L1", + "_origin": "ast", + "id": "concepts_b07_external_webcad_demos", + "community": 58, + "community_name": "B07 \uc678\ubd80 WebCAD \ube44\uad50 \uc2e4\ud589\ud658\uacbd", + "norm_label": "b07_external_webcad_demos.md" + }, + { + "label": "B07 \uc678\ubd80 WebCAD \ube44\uad50 \uc2e4\ud589\ud658\uacbd", + "file_type": "document", + "source_file": "concepts/b07_external_webcad_demos.md", + "source_location": "L8", + "_origin": "ast", + "id": "concepts_b07_external_webcad_demos_b07_\uc678\ubd80_webcad_\ube44\uad50_\uc2e4\ud589\ud658\uacbd", + "community": 58, + "community_name": "B07 \uc678\ubd80 WebCAD \ube44\uad50 \uc2e4\ud589\ud658\uacbd", + "norm_label": "b07 \u110b\u116c\u1107\u116e webcad \u1107\u1175\u1100\u116d \u1109\u1175\u11af\u1112\u1162\u11bc\u1112\u116a\u11ab\u1100\u1167\u11bc" + }, + { + "label": "\uc2e4\ud589\uacfc \uc885\ub8cc", + "file_type": "document", + "source_file": "concepts/b07_external_webcad_demos.md", + "source_location": "L18", + "_origin": "ast", + "id": "concepts_b07_external_webcad_demos_\uc2e4\ud589\uacfc_\uc885\ub8cc", + "community": 58, + "community_name": "B07 \uc678\ubd80 WebCAD \ube44\uad50 \uc2e4\ud589\ud658\uacbd", + "norm_label": "\u1109\u1175\u11af\u1112\u1162\u11bc\u1100\u116a \u110c\u1169\u11bc\u1105\u116d" + }, + { + "label": "\uac80\uc99d \uc0c1\ud0dc", + "file_type": "document", + "source_file": "concepts/b07_external_webcad_demos.md", + "source_location": "L24", + "_origin": "ast", + "id": "concepts_b07_external_webcad_demos_\uac80\uc99d_\uc0c1\ud0dc", + "community": 58, + "community_name": "B07 \uc678\ubd80 WebCAD \ube44\uad50 \uc2e4\ud589\ud658\uacbd", + "norm_label": "\u1100\u1165\u11b7\u110c\u1173\u11bc \u1109\u1161\u11bc\u1110\u1162" + }, + { + "label": "\ub77c\uc774\uc120\uc2a4 \uc8fc\uc758", + "file_type": "document", + "source_file": "concepts/b07_external_webcad_demos.md", + "source_location": "L31", + "_origin": "ast", + "id": "concepts_b07_external_webcad_demos_\ub77c\uc774\uc120\uc2a4_\uc8fc\uc758", + "community": 58, + "community_name": "B07 \uc678\ubd80 WebCAD \ube44\uad50 \uc2e4\ud589\ud658\uacbd", + "norm_label": "\u1105\u1161\u110b\u1175\u1109\u1165\u11ab\u1109\u1173 \u110c\u116e\u110b\u1174" + }, + { + "label": "common_util.md", + "file_type": "document", + "source_file": "concepts/common_util.md", + "source_location": "L1", + "_origin": "ast", + "id": "concepts_common_util", + "community": 1, + "community_name": "\uc778\uc99d / RBAC", + "norm_label": "common_util.md" + }, + { + "label": "\uacf5\ud1b5 \uc720\ud2f8 (common_util/)", + "file_type": "document", + "source_file": "concepts/common_util.md", + "source_location": "L9", + "_origin": "ast", + "id": "concepts_common_util_\uacf5\ud1b5_\uc720\ud2f8_common_util", + "community": 1, + "community_name": "\uc778\uc99d / RBAC", + "norm_label": "\u1100\u1169\u11bc\u1110\u1169\u11bc \u110b\u1172\u1110\u1175\u11af (common_util/)" + }, + { + "label": "\uc774\uba54\uc77c \ubc1c\uc1a1 (common_util_email.py)", + "file_type": "document", + "source_file": "concepts/common_util.md", + "source_location": "L39", + "_origin": "ast", + "id": "concepts_common_util_\uc774\uba54\uc77c_\ubc1c\uc1a1_common_util_email_py", + "community": 1, + "community_name": "\uc778\uc99d / RBAC", + "norm_label": "\u110b\u1175\u1106\u1166\u110b\u1175\u11af \u1107\u1161\u11af\u1109\u1169\u11bc (common_util_email.py)" + }, + { + "label": "\ub9ac\uc18c\uc2a4 \ubaa8\ub2c8\ud130\ub9c1 (common_util_resource_monitor.py)", + "file_type": "document", + "source_file": "concepts/common_util.md", + "source_location": "L43", + "_origin": "ast", + "id": "concepts_common_util_\ub9ac\uc18c\uc2a4_\ubaa8\ub2c8\ud130\ub9c1_common_util_resource_monitor_py", + "community": 1, + "community_name": "\uc778\uc99d / RBAC", + "norm_label": "\u1105\u1175\u1109\u1169\u1109\u1173 \u1106\u1169\u1102\u1175\u1110\u1165\u1105\u1175\u11bc (common_util_resource_monitor.py)" + }, + { + "label": "common_util_project_delete.md", + "file_type": "document", + "source_file": "concepts/common_util/common_util_project_delete.md", + "source_location": "L1", + "_origin": "ast", + "id": "concepts_common_util_common_util_project_delete", + "community": 112, + "community_name": "common_util_project_delete.md", + "norm_label": "common_util_project_delete.md" + }, + { + "label": "common_util_project_delete.py", + "file_type": "document", + "source_file": "concepts/common_util/common_util_project_delete.md", + "source_location": "L9", + "_origin": "ast", + "id": "concepts_common_util_common_util_project_delete_common_util_project_delete_py", + "community": 112, + "community_name": "common_util_project_delete.md", + "norm_label": "common_util_project_delete.py" + }, + { + "label": "\ud83d\udee0\ufe0f \uc8fc\uc694 \ud568\uc218 \ubaa9\ub85d", + "file_type": "document", + "source_file": "concepts/common_util/common_util_project_delete.md", + "source_location": "L13", + "_origin": "ast", + "id": "concepts_common_util_common_util_project_delete_\uc8fc\uc694_\ud568\uc218_\ubaa9\ub85d", + "community": 112, + "community_name": "common_util_project_delete.md", + "norm_label": "\ud83d\udee0\ufe0f \u110c\u116e\u110b\u116d \u1112\u1161\u11b7\u1109\u116e \u1106\u1169\u11a8\u1105\u1169\u11a8" + }, + { + "label": "\ud83d\udd17 \uc5ed\ucc38\uc870 (\uc0ac\uc6a9\ucc98)", + "file_type": "document", + "source_file": "concepts/common_util/common_util_project_delete.md", + "source_location": "L19", + "_origin": "ast", + "id": "concepts_common_util_common_util_project_delete_\uc5ed\ucc38\uc870_\uc0ac\uc6a9\ucc98", + "community": 112, + "community_name": "common_util_project_delete.md", + "norm_label": "\ud83d\udd17 \u110b\u1167\u11a8\u110e\u1161\u11b7\u110c\u1169 (\u1109\u1161\u110b\u116d\u11bc\u110e\u1165)" + }, + { + "label": "common_util_storage.md", + "file_type": "document", + "source_file": "concepts/common_util/common_util_storage.md", + "source_location": "L1", + "_origin": "ast", + "id": "concepts_common_util_common_util_storage", + "community": 113, + "community_name": "common_util_storage.md", + "norm_label": "common_util_storage.md" + }, + { + "label": "common_util_storage.py", + "file_type": "document", + "source_file": "concepts/common_util/common_util_storage.md", + "source_location": "L9", + "_origin": "ast", + "id": "concepts_common_util_common_util_storage_common_util_storage_py", + "community": 113, + "community_name": "common_util_storage.md", + "norm_label": "common_util_storage.py" + }, + { + "label": "\ud83d\udee0\ufe0f \uc8fc\uc694 \ud568\uc218 \ubaa9\ub85d", + "file_type": "document", + "source_file": "concepts/common_util/common_util_storage.md", + "source_location": "L13", + "_origin": "ast", + "id": "concepts_common_util_common_util_storage_\uc8fc\uc694_\ud568\uc218_\ubaa9\ub85d", + "community": 113, + "community_name": "common_util_storage.md", + "norm_label": "\ud83d\udee0\ufe0f \u110c\u116e\u110b\u116d \u1112\u1161\u11b7\u1109\u116e \u1106\u1169\u11a8\u1105\u1169\u11a8" + }, + { + "label": "\ud83d\udd17 \uc5ed\ucc38\uc870 (\uc0ac\uc6a9\ucc98)", + "file_type": "document", + "source_file": "concepts/common_util/common_util_storage.md", + "source_location": "L21", + "_origin": "ast", + "id": "concepts_common_util_common_util_storage_\uc5ed\ucc38\uc870_\uc0ac\uc6a9\ucc98", + "community": 113, + "community_name": "common_util_storage.md", + "norm_label": "\ud83d\udd17 \u110b\u1167\u11a8\u110e\u1161\u11b7\u110c\u1169 (\u1109\u1161\u110b\u116d\u11bc\u110e\u1165)" + }, + { + "label": "common_util_workflow_state.md", + "file_type": "document", + "source_file": "concepts/common_util/common_util_workflow_state.md", + "source_location": "L1", + "_origin": "ast", + "id": "concepts_common_util_common_util_workflow_state", + "community": 114, + "community_name": "common_util_workflow_state.md", + "norm_label": "common_util_workflow_state.md" + }, + { + "label": "common_util_workflow_state.py", + "file_type": "document", + "source_file": "concepts/common_util/common_util_workflow_state.md", + "source_location": "L9", + "_origin": "ast", + "id": "concepts_common_util_common_util_workflow_state_common_util_workflow_state_py", + "community": 114, + "community_name": "common_util_workflow_state.md", + "norm_label": "common_util_workflow_state.py" + }, + { + "label": "\ud83d\udee0\ufe0f \uc8fc\uc694 \ud568\uc218 \ubaa9\ub85d", + "file_type": "document", + "source_file": "concepts/common_util/common_util_workflow_state.md", + "source_location": "L13", + "_origin": "ast", + "id": "concepts_common_util_common_util_workflow_state_\uc8fc\uc694_\ud568\uc218_\ubaa9\ub85d", + "community": 114, + "community_name": "common_util_workflow_state.md", + "norm_label": "\ud83d\udee0\ufe0f \u110c\u116e\u110b\u116d \u1112\u1161\u11b7\u1109\u116e \u1106\u1169\u11a8\u1105\u1169\u11a8" + }, + { + "label": "\ud83d\udd17 \uc5ed\ucc38\uc870 (\uc0ac\uc6a9\ucc98)", + "file_type": "document", + "source_file": "concepts/common_util/common_util_workflow_state.md", + "source_location": "L23", + "_origin": "ast", + "id": "concepts_common_util_common_util_workflow_state_\uc5ed\ucc38\uc870_\uc0ac\uc6a9\ucc98", + "community": 114, + "community_name": "common_util_workflow_state.md", + "norm_label": "\ud83d\udd17 \u110b\u1167\u11a8\u110e\u1161\u11b7\u110c\u1169 (\u1109\u1161\u110b\u116d\u11bc\u110e\u1165)" + }, + { + "label": "completed_2026-08-29.md", + "file_type": "document", + "source_file": "concepts/completed_2026-08-29.md", + "source_location": "L1", + "_origin": "ast", + "id": "concepts_completed_2026_08_29", + "community": 7, + "community_name": "2026-08-29 \uc644\ub8cc \ubc18\uc601", + "norm_label": "completed_2026-08-29.md" + }, + { + "label": "2026-08-29 \uc644\ub8cc \ubc18\uc601", + "file_type": "document", + "source_file": "concepts/completed_2026-08-29.md", + "source_location": "L9", + "_origin": "ast", + "id": "concepts_completed_2026_08_29_2026_08_29_\uc644\ub8cc_\ubc18\uc601", + "community": 7, + "community_name": "2026-08-29 \uc644\ub8cc \ubc18\uc601", + "norm_label": "2026-08-29 \u110b\u116a\u11ab\u1105\u116d \u1107\u1161\u11ab\u110b\u1167\u11bc" + }, + { + "label": "B03 \uc7ac\uc5c5\ub85c\ub4dc\u00b7B05 \ucd5c\uc2e0 \uc870\ud68c", + "file_type": "document", + "source_file": "concepts/completed_2026-08-29.md", + "source_location": "L11", + "_origin": "ast", + "id": "concepts_completed_2026_08_29_b03_\uc7ac\uc5c5\ub85c\ub4dc_b05_\ucd5c\uc2e0_\uc870\ud68c", + "community": 7, + "community_name": "2026-08-29 \uc644\ub8cc \ubc18\uc601", + "norm_label": "b03 \u110c\u1162\u110b\u1165\u11b8\u1105\u1169\u1103\u1173\u00b7b05 \u110e\u116c\u1109\u1175\u11ab \u110c\u1169\u1112\u116c" + }, + { + "label": "B05/B06 \uad6c\uc870\ubb3c UI \ud1b5\ud569", + "file_type": "document", + "source_file": "concepts/completed_2026-08-29.md", + "source_location": "L21", + "_origin": "ast", + "id": "concepts_completed_2026_08_29_b05_b06_\uad6c\uc870\ubb3c_ui_\ud1b5\ud569", + "community": 7, + "community_name": "2026-08-29 \uc644\ub8cc \ubc18\uc601", + "norm_label": "b05/b06 \u1100\u116e\u110c\u1169\u1106\u116e\u11af ui \u1110\u1169\u11bc\u1112\u1161\u11b8" + }, + { + "label": "B07 CAD \uace0\uc815 \ucc99\ub3c4\u00b7\ud6a1\ub2e8 \uc7a5 \ubc30\uce58", + "file_type": "document", + "source_file": "concepts/completed_2026-08-29.md", + "source_location": "L32", + "_origin": "ast", + "id": "concepts_completed_2026_08_29_b07_cad_\uace0\uc815_\ucc99\ub3c4_\ud6a1\ub2e8_\uc7a5_\ubc30\uce58", + "community": 7, + "community_name": "2026-08-29 \uc644\ub8cc \ubc18\uc601", + "norm_label": "b07 cad \u1100\u1169\u110c\u1165\u11bc \u110e\u1165\u11a8\u1103\u1169\u00b7\u1112\u116c\u11bc\u1103\u1161\u11ab \u110c\u1161\u11bc \u1107\u1162\u110e\u1175" + }, + { + "label": "B07 CAD \ud14c\ub9c8", + "file_type": "document", + "source_file": "concepts/completed_2026-08-29.md", + "source_location": "L43", + "_origin": "ast", + "id": "concepts_completed_2026_08_29_b07_cad_\ud14c\ub9c8", + "community": 7, + "community_name": "2026-08-29 \uc644\ub8cc \ubc18\uc601", + "norm_label": "b07 cad \u1110\u1166\u1106\u1161" + }, + { + "label": "B07 CAD \ud655\ub300\u00b7\ud32c", + "file_type": "document", + "source_file": "concepts/completed_2026-08-29.md", + "source_location": "L53", + "_origin": "ast", + "id": "concepts_completed_2026_08_29_b07_cad_\ud655\ub300_\ud32c", + "community": 7, + "community_name": "2026-08-29 \uc644\ub8cc \ubc18\uc601", + "norm_label": "b07 cad \u1112\u116a\u11a8\u1103\u1162\u00b7\u1111\u1162\u11ab" + }, + { + "label": "B07\u2194B08 \uc21c\uc11c", + "file_type": "document", + "source_file": "concepts/completed_2026-08-29.md", + "source_location": "L62", + "_origin": "ast", + "id": "concepts_completed_2026_08_29_b07_b08_\uc21c\uc11c", + "community": 7, + "community_name": "2026-08-29 \uc644\ub8cc \ubc18\uc601", + "norm_label": "b07\u2194b08 \u1109\u116e\u11ab\u1109\u1165" + }, + { + "label": "\ucd08\uae30\uac12 \ubcf4\uc804", + "file_type": "document", + "source_file": "concepts/completed_2026-08-29.md", + "source_location": "L72", + "_origin": "ast", + "id": "concepts_completed_2026_08_29_\ucd08\uae30\uac12_\ubcf4\uc804", + "community": 7, + "community_name": "2026-08-29 \uc644\ub8cc \ubc18\uc601", + "norm_label": "\u110e\u1169\u1100\u1175\u1100\u1161\u11b9 \u1107\u1169\u110c\u1165\u11ab" + }, + { + "label": "\ucd08\uae30\ud654 \ubcf5\uc6d0 \uc2e4\uce21", + "file_type": "document", + "source_file": "concepts/completed_2026-08-29.md", + "source_location": "L83", + "_origin": "ast", + "id": "concepts_completed_2026_08_29_\ucd08\uae30\ud654_\ubcf5\uc6d0_\uc2e4\uce21", + "community": 7, + "community_name": "2026-08-29 \uc644\ub8cc \ubc18\uc601", + "norm_label": "\u110e\u1169\u1100\u1175\u1112\u116a \u1107\u1169\u11a8\u110b\u116f\u11ab \u1109\u1175\u11af\u110e\u1173\u11a8" + }, + { + "label": "\ubc30\uc218\uc2dc\uc124 \ucd94\ucc9c \uae30\uc900", + "file_type": "document", + "source_file": "concepts/completed_2026-08-29.md", + "source_location": "L92", + "_origin": "ast", + "id": "concepts_completed_2026_08_29_\ubc30\uc218\uc2dc\uc124_\ucd94\ucc9c_\uae30\uc900", + "community": 7, + "community_name": "2026-08-29 \uc644\ub8cc \ubc18\uc601", + "norm_label": "\u1107\u1162\u1109\u116e\u1109\u1175\u1109\u1165\u11af \u110e\u116e\u110e\u1165\u11ab \u1100\u1175\u110c\u116e\u11ab" + }, + { + "label": "completed_2026-09-01.md", + "file_type": "document", + "source_file": "concepts/completed_2026-09-01.md", + "source_location": "L1", + "_origin": "ast", + "id": "concepts_completed_2026_09_01", + "community": 7, + "community_name": "2026-08-29 \uc644\ub8cc \ubc18\uc601", + "norm_label": "completed_2026-09-01.md" + }, + { + "label": "2026-09-01 \uc644\ub8cc \u2014 B04 \uc9c0\uba74 \ucc98\ub9ac\u00b7B05/B06 \ubc30\uc218 \uc81c\uc5b4", + "file_type": "document", + "source_file": "concepts/completed_2026-09-01.md", + "source_location": "L9", + "_origin": "ast", + "id": "concepts_completed_2026_09_01_2026_09_01_\uc644\ub8cc_b04_\uc9c0\uba74_\ucc98\ub9ac_b05_b06_\ubc30\uc218_\uc81c\uc5b4", + "community": 7, + "community_name": "2026-08-29 \uc644\ub8cc \ubc18\uc601", + "norm_label": "2026-09-01 \u110b\u116a\u11ab\u1105\u116d \u2014 b04 \u110c\u1175\u1106\u1167\u11ab \u110e\u1165\u1105\u1175\u00b7b05/b06 \u1107\u1162\u1109\u116e \u110c\u1166\u110b\u1165" + }, + { + "label": "\uc644\ub8cc \ubc94\uc704", + "file_type": "document", + "source_file": "concepts/completed_2026-09-01.md", + "source_location": "L11", + "_origin": "ast", + "id": "concepts_completed_2026_09_01_\uc644\ub8cc_\ubc94\uc704", + "community": 7, + "community_name": "2026-08-29 \uc644\ub8cc \ubc18\uc601", + "norm_label": "\u110b\u116a\u11ab\u1105\u116d \u1107\u1165\u11b7\u110b\u1171" + }, + { + "label": "\uc800\uc7a5\u00b7\ud638\ud658 \uaddc\uce59", + "file_type": "document", + "source_file": "concepts/completed_2026-09-01.md", + "source_location": "L24", + "_origin": "ast", + "id": "concepts_completed_2026_09_01_\uc800\uc7a5_\ud638\ud658_\uaddc\uce59", + "community": 7, + "community_name": "2026-08-29 \uc644\ub8cc \ubc18\uc601", + "norm_label": "\u110c\u1165\u110c\u1161\u11bc\u00b7\u1112\u1169\u1112\u116a\u11ab \u1100\u1172\u110e\u1175\u11a8" + }, + { + "label": "\uac80\uc99d", + "file_type": "document", + "source_file": "concepts/completed_2026-09-01.md", + "source_location": "L32", + "_origin": "ast", + "id": "concepts_completed_2026_09_01_\uac80\uc99d", + "community": 7, + "community_name": "2026-08-29 \uc644\ub8cc \ubc18\uc601", + "norm_label": "\u1100\u1165\u11b7\u110c\u1173\u11bc" + }, + { + "label": "completed_2026-09-01_followups.md", + "file_type": "document", + "source_file": "concepts/completed_2026-09-01_followups.md", + "source_location": "L1", + "_origin": "ast", + "id": "concepts_completed_2026_09_01_followups", + "community": 7, + "community_name": "2026-08-29 \uc644\ub8cc \ubc18\uc601", + "norm_label": "completed_2026-09-01_followups.md" + }, + { + "label": "2026-09-01 \uc794\uc5ec \uc644\ub8cc \uccb4\ud06c \uc815\ub9ac", + "file_type": "document", + "source_file": "concepts/completed_2026-09-01_followups.md", + "source_location": "L9", + "_origin": "ast", + "id": "concepts_completed_2026_09_01_followups_2026_09_01_\uc794\uc5ec_\uc644\ub8cc_\uccb4\ud06c_\uc815\ub9ac", + "community": 7, + "community_name": "2026-08-29 \uc644\ub8cc \ubc18\uc601", + "norm_label": "2026-09-01 \u110c\u1161\u11ab\u110b\u1167 \u110b\u116a\u11ab\u1105\u116d \u110e\u1166\u110f\u1173 \u110c\u1165\u11bc\u1105\u1175" + }, + { + "label": "\ubc94\uc704", + "file_type": "document", + "source_file": "concepts/completed_2026-09-01_followups.md", + "source_location": "L13", + "_origin": "ast", + "id": "concepts_completed_2026_09_01_followups_\ubc94\uc704", + "community": 7, + "community_name": "2026-08-29 \uc644\ub8cc \ubc18\uc601", + "norm_label": "\u1107\u1165\u11b7\u110b\u1171" + }, + { + "label": "\ubcf4\ub958 \uad6c\ubd84", + "file_type": "document", + "source_file": "concepts/completed_2026-09-01_followups.md", + "source_location": "L22", + "_origin": "ast", + "id": "concepts_completed_2026_09_01_followups_\ubcf4\ub958_\uad6c\ubd84", + "community": 7, + "community_name": "2026-08-29 \uc644\ub8cc \ubc18\uc601", + "norm_label": "\u1107\u1169\u1105\u1172 \u1100\u116e\u1107\u116e\u11ab" + }, + { + "label": "completed_2026-09-02.md", + "file_type": "document", + "source_file": "concepts/completed_2026-09-02.md", + "source_location": "L1", + "_origin": "ast", + "id": "concepts_completed_2026_09_02", + "community": 182, + "community_name": "2026-09-02 \uc644\ub8cc \ud56d\ubaa9", + "norm_label": "completed_2026-09-02.md" + }, + { + "label": "2026-09-02 \uc644\ub8cc \ud56d\ubaa9", + "file_type": "document", + "source_file": "concepts/completed_2026-09-02.md", + "source_location": "L9", + "_origin": "ast", + "id": "concepts_completed_2026_09_02_2026_09_02_\uc644\ub8cc_\ud56d\ubaa9", + "community": 182, + "community_name": "2026-09-02 \uc644\ub8cc \ud56d\ubaa9", + "norm_label": "2026-09-02 \u110b\u116a\u11ab\u1105\u116d \u1112\u1161\u11bc\u1106\u1169\u11a8" + }, + { + "label": "\ub178\uc120\u00b7\uc9c0\ud45c\uba74", + "file_type": "document", + "source_file": "concepts/completed_2026-09-02.md", + "source_location": "L11", + "_origin": "ast", + "id": "concepts_completed_2026_09_02_\ub178\uc120_\uc9c0\ud45c\uba74", + "community": 182, + "community_name": "2026-09-02 \uc644\ub8cc \ud56d\ubaa9", + "norm_label": "\u1102\u1169\u1109\u1165\u11ab\u00b7\u110c\u1175\u1111\u116d\u1106\u1167\u11ab" + }, + { + "label": "\uc791\uc5c5 \ud658\uacbd", + "file_type": "document", + "source_file": "concepts/completed_2026-09-02.md", + "source_location": "L18", + "_origin": "ast", + "id": "concepts_completed_2026_09_02_\uc791\uc5c5_\ud658\uacbd", + "community": 182, + "community_name": "2026-09-02 \uc644\ub8cc \ud56d\ubaa9", + "norm_label": "\u110c\u1161\u11a8\u110b\u1165\u11b8 \u1112\u116a\u11ab\u1100\u1167\u11bc" + }, + { + "label": "CAD", + "file_type": "document", + "source_file": "concepts/completed_2026-09-02.md", + "source_location": "L23", + "_origin": "ast", + "id": "concepts_completed_2026_09_02_cad", + "community": 182, + "community_name": "2026-09-02 \uc644\ub8cc \ud56d\ubaa9", + "norm_label": "cad" + }, + { + "label": "B05 \uad6c\uc870\ubb3c 3D", + "file_type": "document", + "source_file": "concepts/completed_2026-09-02.md", + "source_location": "L32", + "_origin": "ast", + "id": "concepts_completed_2026_09_02_b05_\uad6c\uc870\ubb3c_3d", + "community": 182, + "community_name": "2026-09-02 \uc644\ub8cc \ud56d\ubaa9", + "norm_label": "b05 \u1100\u116e\u110c\u1169\u1106\u116e\u11af 3d" + }, + { + "label": "B05 \uc885\ub2e8 \ud3b8\uc9d1 \ud6c4\uc18d", + "file_type": "document", + "source_file": "concepts/completed_2026-09-02.md", + "source_location": "L38", + "_origin": "ast", + "id": "concepts_completed_2026_09_02_b05_\uc885\ub2e8_\ud3b8\uc9d1_\ud6c4\uc18d", + "community": 182, + "community_name": "2026-09-02 \uc644\ub8cc \ud56d\ubaa9", + "norm_label": "b05 \u110c\u1169\u11bc\u1103\u1161\u11ab \u1111\u1167\u11ab\u110c\u1175\u11b8 \u1112\u116e\u1109\u1169\u11a8" + }, + { + "label": "\ud68c\uadc0 \uc0c1\ud0dc", + "file_type": "document", + "source_file": "concepts/completed_2026-09-02.md", + "source_location": "L43", + "_origin": "ast", + "id": "concepts_completed_2026_09_02_\ud68c\uadc0_\uc0c1\ud0dc", + "community": 182, + "community_name": "2026-09-02 \uc644\ub8cc \ud56d\ubaa9", + "norm_label": "\u1112\u116c\u1100\u1171 \u1109\u1161\u11bc\u1110\u1162" + }, + { + "label": "completed_2026-09-03.md", + "file_type": "document", + "source_file": "concepts/completed_2026-09-03.md", + "source_location": "L1", + "_origin": "ast", + "id": "concepts_completed_2026_09_03", + "community": 183, + "community_name": "2026-09-03 \uc644\ub8cc \u2014 \uc785\ub825\u00b7\ubc30\uc218\u00b7\uc885\ud6a1\ub2e8\u00b7CAD", + "norm_label": "completed_2026-09-03.md" + }, + { + "label": "2026-09-03 \uc644\ub8cc \u2014 \uc785\ub825\u00b7\ubc30\uc218\u00b7\uc885\ud6a1\ub2e8\u00b7CAD", + "file_type": "document", + "source_file": "concepts/completed_2026-09-03.md", + "source_location": "L9", + "_origin": "ast", + "id": "concepts_completed_2026_09_03_2026_09_03_\uc644\ub8cc_\uc785\ub825_\ubc30\uc218_\uc885\ud6a1\ub2e8_cad", + "community": 183, + "community_name": "2026-09-03 \uc644\ub8cc \u2014 \uc785\ub825\u00b7\ubc30\uc218\u00b7\uc885\ud6a1\ub2e8\u00b7CAD", + "norm_label": "2026-09-03 \u110b\u116a\u11ab\u1105\u116d \u2014 \u110b\u1175\u11b8\u1105\u1167\u11a8\u00b7\u1107\u1162\u1109\u116e\u00b7\u110c\u1169\u11bc\u1112\u116c\u11bc\u1103\u1161\u11ab\u00b7cad" + }, + { + "label": "\uc644\ub8cc \ubc94\uc704", + "file_type": "document", + "source_file": "concepts/completed_2026-09-03.md", + "source_location": "L13", + "_origin": "ast", + "id": "concepts_completed_2026_09_03_\uc644\ub8cc_\ubc94\uc704", + "community": 183, + "community_name": "2026-09-03 \uc644\ub8cc \u2014 \uc785\ub825\u00b7\ubc30\uc218\u00b7\uc885\ud6a1\ub2e8\u00b7CAD", + "norm_label": "\u110b\u116a\u11ab\u1105\u116d \u1107\u1165\u11b7\u110b\u1171" + }, + { + "label": "\uacf5\ud1b5 \uacb0\uc815", + "file_type": "document", + "source_file": "concepts/completed_2026-09-03.md", + "source_location": "L23", + "_origin": "ast", + "id": "concepts_completed_2026_09_03_\uacf5\ud1b5_\uacb0\uc815", + "community": 183, + "community_name": "2026-09-03 \uc644\ub8cc \u2014 \uc785\ub825\u00b7\ubc30\uc218\u00b7\uc885\ud6a1\ub2e8\u00b7CAD", + "norm_label": "\u1100\u1169\u11bc\u1110\u1169\u11bc \u1100\u1167\u11af\u110c\u1165\u11bc" + }, + { + "label": "completed_2026-09-03_additional.md", + "file_type": "document", + "source_file": "concepts/completed_2026-09-03_additional.md", + "source_location": "L1", + "_origin": "ast", + "id": "concepts_completed_2026_09_03_additional", + "community": 184, + "community_name": "2026-09-03 \ucd94\uac00 \uc644\ub8cc \u2014 \ud654\uba74\u00b7\uc885\ub2e8\u00b7\ud6a1\ub2e8", + "norm_label": "completed_2026-09-03_additional.md" + }, + { + "label": "2026-09-03 \ucd94\uac00 \uc644\ub8cc \u2014 \ud654\uba74\u00b7\uc885\ub2e8\u00b7\ud6a1\ub2e8", + "file_type": "document", + "source_file": "concepts/completed_2026-09-03_additional.md", + "source_location": "L9", + "_origin": "ast", + "id": "concepts_completed_2026_09_03_additional_2026_09_03_\ucd94\uac00_\uc644\ub8cc_\ud654\uba74_\uc885\ub2e8_\ud6a1\ub2e8", + "community": 184, + "community_name": "2026-09-03 \ucd94\uac00 \uc644\ub8cc \u2014 \ud654\uba74\u00b7\uc885\ub2e8\u00b7\ud6a1\ub2e8", + "norm_label": "2026-09-03 \u110e\u116e\u1100\u1161 \u110b\u116a\u11ab\u1105\u116d \u2014 \u1112\u116a\u1106\u1167\u11ab\u00b7\u110c\u1169\u11bc\u1103\u1161\u11ab\u00b7\u1112\u116c\u11bc\u1103\u1161\u11ab" + }, + { + "label": "\uc644\ub8cc \ubc94\uc704", + "file_type": "document", + "source_file": "concepts/completed_2026-09-03_additional.md", + "source_location": "L13", + "_origin": "ast", + "id": "concepts_completed_2026_09_03_additional_\uc644\ub8cc_\ubc94\uc704", + "community": 184, + "community_name": "2026-09-03 \ucd94\uac00 \uc644\ub8cc \u2014 \ud654\uba74\u00b7\uc885\ub2e8\u00b7\ud6a1\ub2e8", + "norm_label": "\u110b\u116a\u11ab\u1105\u116d \u1107\u1165\u11b7\u110b\u1171" + }, + { + "label": "\ucd5c\uc2e0 \uacb0\uc815", + "file_type": "document", + "source_file": "concepts/completed_2026-09-03_additional.md", + "source_location": "L23", + "_origin": "ast", + "id": "concepts_completed_2026_09_03_additional_\ucd5c\uc2e0_\uacb0\uc815", + "community": 184, + "community_name": "2026-09-03 \ucd94\uac00 \uc644\ub8cc \u2014 \ud654\uba74\u00b7\uc885\ub2e8\u00b7\ud6a1\ub2e8", + "norm_label": "\u110e\u116c\u1109\u1175\u11ab \u1100\u1167\u11af\u110c\u1165\u11bc" + }, + { + "label": "completed_2026-09-04.md", + "file_type": "document", + "source_file": "concepts/completed_2026-09-04.md", + "source_location": "L1", + "_origin": "ast", + "id": "concepts_completed_2026_09_04", + "community": 0, + "community_name": "UI Templates \u2014 Localization & Components", + "norm_label": "completed_2026-09-04.md" + }, + { + "label": "2026-09-04 \uc644\ub8cc \ud56d\ubaa9", + "file_type": "document", + "source_file": "concepts/completed_2026-09-04.md", + "source_location": "L9", + "_origin": "ast", + "id": "concepts_completed_2026_09_04_2026_09_04_\uc644\ub8cc_\ud56d\ubaa9", + "community": 0, + "community_name": "UI Templates \u2014 Localization & Components", + "norm_label": "2026-09-04 \u110b\u116a\u11ab\u1105\u116d \u1112\u1161\u11bc\u1106\u1169\u11a8" + }, + { + "label": "\uc644\ub8cc \ubc94\uc704", + "file_type": "document", + "source_file": "concepts/completed_2026-09-04.md", + "source_location": "L13", + "_origin": "ast", + "id": "concepts_completed_2026_09_04_\uc644\ub8cc_\ubc94\uc704", + "community": 0, + "community_name": "UI Templates \u2014 Localization & Components", + "norm_label": "\u110b\u116a\u11ab\u1105\u116d \u1107\u1165\u11b7\u110b\u1171" + }, + { + "label": "\ucd94\uac00 \uc644\ub8cc \ubc94\uc704", + "file_type": "document", + "source_file": "concepts/completed_2026-09-04.md", + "source_location": "L38", + "_origin": "ast", + "id": "concepts_completed_2026_09_04_\ucd94\uac00_\uc644\ub8cc_\ubc94\uc704", + "community": 0, + "community_name": "UI Templates \u2014 Localization & Components", + "norm_label": "\u110e\u116e\u1100\u1161 \u110b\u116a\u11ab\u1105\u116d \u1107\u1165\u11b7\u110b\u1171" + }, + { + "label": "700\uc904 \uc81c\ud55c \ubd84\ub9ac", + "file_type": "document", + "source_file": "concepts/completed_2026-09-04.md", + "source_location": "L48", + "_origin": "ast", + "id": "concepts_completed_2026_09_04_700\uc904_\uc81c\ud55c_\ubd84\ub9ac", + "community": 0, + "community_name": "UI Templates \u2014 Localization & Components", + "norm_label": "700\u110c\u116e\u11af \u110c\u1166\u1112\u1161\u11ab \u1107\u116e\u11ab\u1105\u1175" + }, + { + "label": "\uc0c1\uc2dc\uacc4\ud68d\uc11c \ucd94\uac00 \uc644\ub8cc \ubc94\uc704", + "file_type": "document", + "source_file": "concepts/completed_2026-09-04.md", + "source_location": "L54", + "_origin": "ast", + "id": "concepts_completed_2026_09_04_\uc0c1\uc2dc\uacc4\ud68d\uc11c_\ucd94\uac00_\uc644\ub8cc_\ubc94\uc704", + "community": 0, + "community_name": "UI Templates \u2014 Localization & Components", + "norm_label": "\u1109\u1161\u11bc\u1109\u1175\u1100\u1168\u1112\u116c\u11a8\u1109\u1165 \u110e\u116e\u1100\u1161 \u110b\u116a\u11ab\u1105\u116d \u1107\u1165\u11b7\u110b\u1171" + }, + { + "label": "\ubcf4\uc874\ub41c \ubbf8\uc644\ub8cc \ubc94\uc704", + "file_type": "document", + "source_file": "concepts/completed_2026-09-04.md", + "source_location": "L61", + "_origin": "ast", + "id": "concepts_completed_2026_09_04_\ubcf4\uc874\ub41c_\ubbf8\uc644\ub8cc_\ubc94\uc704", + "community": 0, + "community_name": "UI Templates \u2014 Localization & Components", + "norm_label": "\u1107\u1169\u110c\u1169\u11ab\u1103\u116c\u11ab \u1106\u1175\u110b\u116a\u11ab\u1105\u116d \u1107\u1165\u11b7\u110b\u1171" + }, + { + "label": "completed_2026-09-07.md", + "file_type": "document", + "source_file": "concepts/completed_2026-09-07.md", + "source_location": "L1", + "_origin": "ast", + "id": "concepts_completed_2026_09_07", + "community": 57, + "community_name": "2026-09-07 \uc644\ub8cc\u00b7\ubcf4\ub958 \uc694\uc57d", + "norm_label": "completed_2026-09-07.md" + }, + { + "label": "2026-09-07 \uc644\ub8cc\u00b7\ubcf4\ub958 \uc694\uc57d", + "file_type": "document", + "source_file": "concepts/completed_2026-09-07.md", + "source_location": "L9", + "_origin": "ast", + "id": "concepts_completed_2026_09_07_2026_09_07_\uc644\ub8cc_\ubcf4\ub958_\uc694\uc57d", + "community": 57, + "community_name": "2026-09-07 \uc644\ub8cc\u00b7\ubcf4\ub958 \uc694\uc57d", + "norm_label": "2026-09-07 \u110b\u116a\u11ab\u1105\u116d\u00b7\u1107\u1169\u1105\u1172 \u110b\u116d\u110b\u1163\u11a8" + }, + { + "label": "\uc644\ub8cc \ubc94\uc704", + "file_type": "document", + "source_file": "concepts/completed_2026-09-07.md", + "source_location": "L11", + "_origin": "ast", + "id": "concepts_completed_2026_09_07_\uc644\ub8cc_\ubc94\uc704", + "community": 57, + "community_name": "2026-09-07 \uc644\ub8cc\u00b7\ubcf4\ub958 \uc694\uc57d", + "norm_label": "\u110b\u116a\u11ab\u1105\u116d \u1107\u1165\u11b7\u110b\u1171" + }, + { + "label": "\uc131\ub2a5\u00b7\uc6b4\uc601 \uacb0\uc815", + "file_type": "document", + "source_file": "concepts/completed_2026-09-07.md", + "source_location": "L23", + "_origin": "ast", + "id": "concepts_completed_2026_09_07_\uc131\ub2a5_\uc6b4\uc601_\uacb0\uc815", + "community": 57, + "community_name": "2026-09-07 \uc644\ub8cc\u00b7\ubcf4\ub958 \uc694\uc57d", + "norm_label": "\u1109\u1165\u11bc\u1102\u1173\u11bc\u00b7\u110b\u116e\u11ab\u110b\u1167\u11bc \u1100\u1167\u11af\u110c\u1165\u11bc" + }, + { + "label": "\uc8fc\uc758", + "file_type": "document", + "source_file": "concepts/completed_2026-09-07.md", + "source_location": "L29", + "_origin": "ast", + "id": "concepts_completed_2026_09_07_\uc8fc\uc758", + "community": 57, + "community_name": "2026-09-07 \uc644\ub8cc\u00b7\ubcf4\ub958 \uc694\uc57d", + "norm_label": "\u110c\u116e\u110b\u1174" + }, + { + "label": "completed_2026-09-09.md", + "file_type": "document", + "source_file": "concepts/completed_2026-09-09.md", + "source_location": "L1", + "_origin": "ast", + "id": "concepts_completed_2026_09_09", + "community": 46, + "community_name": "\uc784\ub3c4\uae30\uc220\uad50\ubcf8 \uc6d0\ubb38 md \ucd94\ucd9c \ud488\uc9c8 \uacb0\ud568", + "norm_label": "completed_2026-09-09.md" + }, + { + "label": "2026-09-09 \uc644\ub8cc \uad6c\ud604\u00b7\uac80\uc99d", + "file_type": "document", + "source_file": "concepts/completed_2026-09-09.md", + "source_location": "L9", + "_origin": "ast", + "id": "concepts_completed_2026_09_09_2026_09_09_\uc644\ub8cc_\uad6c\ud604_\uac80\uc99d", + "community": 46, + "community_name": "\uc784\ub3c4\uae30\uc220\uad50\ubcf8 \uc6d0\ubb38 md \ucd94\ucd9c \ud488\uc9c8 \uacb0\ud568", + "norm_label": "2026-09-09 \u110b\u116a\u11ab\u1105\u116d \u1100\u116e\u1112\u1167\u11ab\u00b7\u1100\u1165\u11b7\u110c\u1173\u11bc" + }, + { + "label": "B05\u00b7B06 \uc885\ud6a1\ub2e8", + "file_type": "document", + "source_file": "concepts/completed_2026-09-09.md", + "source_location": "L11", + "_origin": "ast", + "id": "concepts_completed_2026_09_09_b05_b06_\uc885\ud6a1\ub2e8", + "community": 46, + "community_name": "\uc784\ub3c4\uae30\uc220\uad50\ubcf8 \uc6d0\ubb38 md \ucd94\ucd9c \ud488\uc9c8 \uacb0\ud568", + "norm_label": "b05\u00b7b06 \u110c\u1169\u11bc\u1112\u116c\u11bc\u1103\u1161\u11ab" + }, + { + "label": "B07 \ud45c\uc900\ub3c4", + "file_type": "document", + "source_file": "concepts/completed_2026-09-09.md", + "source_location": "L23", + "_origin": "ast", + "id": "concepts_completed_2026_09_09_b07_\ud45c\uc900\ub3c4", + "community": 46, + "community_name": "\uc784\ub3c4\uae30\uc220\uad50\ubcf8 \uc6d0\ubb38 md \ucd94\ucd9c \ud488\uc9c8 \uacb0\ud568", + "norm_label": "b07 \u1111\u116d\u110c\u116e\u11ab\u1103\u1169" + }, + { + "label": "B08 \uc218\ub7c9\uc0b0\ucd9c", + "file_type": "document", + "source_file": "concepts/completed_2026-09-09.md", + "source_location": "L32", + "_origin": "ast", + "id": "concepts_completed_2026_09_09_b08_\uc218\ub7c9\uc0b0\ucd9c", + "community": 46, + "community_name": "\uc784\ub3c4\uae30\uc220\uad50\ubcf8 \uc6d0\ubb38 md \ucd94\ucd9c \ud488\uc9c8 \uacb0\ud568", + "norm_label": "b08 \u1109\u116e\u1105\u1163\u11bc\u1109\u1161\u11ab\u110e\u116e\u11af" + }, + { + "label": "B09 \uc6d0\uac00\uacc4\uc0b0", + "file_type": "document", + "source_file": "concepts/completed_2026-09-09.md", + "source_location": "L41", + "_origin": "ast", + "id": "concepts_completed_2026_09_09_b09_\uc6d0\uac00\uacc4\uc0b0", + "community": 46, + "community_name": "\uc784\ub3c4\uae30\uc220\uad50\ubcf8 \uc6d0\ubb38 md \ucd94\ucd9c \ud488\uc9c8 \uacb0\ud568", + "norm_label": "b09 \u110b\u116f\u11ab\u1100\u1161\u1100\u1168\u1109\u1161\u11ab" + }, + { + "label": "\uac80\uc99d \uacbd\uacc4", + "file_type": "document", + "source_file": "concepts/completed_2026-09-09.md", + "source_location": "L49", + "_origin": "ast", + "id": "concepts_completed_2026_09_09_\uac80\uc99d_\uacbd\uacc4", + "community": 46, + "community_name": "\uc784\ub3c4\uae30\uc220\uad50\ubcf8 \uc6d0\ubb38 md \ucd94\ucd9c \ud488\uc9c8 \uacb0\ud568", + "norm_label": "\u1100\u1165\u11b7\u110c\u1173\u11bc \u1100\u1167\u11bc\u1100\u1168" + }, + { + "label": "crs_metadata.md", + "file_type": "document", + "source_file": "concepts/crs_metadata.md", + "source_location": "L1", + "_origin": "ast", + "id": "concepts_crs_metadata", + "community": 2, + "community_name": "A00_Common \u2014 App Shell Framework", + "norm_label": "crs_metadata.md" + }, + { + "label": "CRS \uba54\ud0c0\ub370\uc774\ud130 \uc815\uc0c1\ud654", + "file_type": "document", + "source_file": "concepts/crs_metadata.md", + "source_location": "L9", + "_origin": "ast", + "id": "concepts_crs_metadata_crs_\uba54\ud0c0\ub370\uc774\ud130_\uc815\uc0c1\ud654", + "community": 2, + "community_name": "A00_Common \u2014 App Shell Framework", + "norm_label": "crs \u1106\u1166\u1110\u1161\u1103\u1166\u110b\u1175\u1110\u1165 \u110c\u1165\u11bc\u1109\u1161\u11bc\u1112\u116a" + }, + { + "label": "\uac80\uc99d\ub41c \ud310\uc815", + "file_type": "document", + "source_file": "concepts/crs_metadata.md", + "source_location": "L11", + "_origin": "ast", + "id": "concepts_crs_metadata_\uac80\uc99d\ub41c_\ud310\uc815", + "community": 2, + "community_name": "A00_Common \u2014 App Shell Framework", + "norm_label": "\u1100\u1165\u11b7\u110c\u1173\u11bc\u1103\u116c\u11ab \u1111\u1161\u11ab\u110c\u1165\u11bc" + }, + { + "label": "\ub370\uc774\ud130 \ud750\ub984", + "file_type": "document", + "source_file": "concepts/crs_metadata.md", + "source_location": "L22", + "_origin": "ast", + "id": "concepts_crs_metadata_\ub370\uc774\ud130_\ud750\ub984", + "community": 2, + "community_name": "A00_Common \u2014 App Shell Framework", + "norm_label": "\u1103\u1166\u110b\u1175\u1110\u1165 \u1112\u1173\u1105\u1173\u11b7" + }, + { + "label": "\uac80\uc99d \ubc94\uc704\uc640 \ubaa8\uc21c \uc774\ub825", + "file_type": "document", + "source_file": "concepts/crs_metadata.md", + "source_location": "L30", + "_origin": "ast", + "id": "concepts_crs_metadata_\uac80\uc99d_\ubc94\uc704\uc640_\ubaa8\uc21c_\uc774\ub825", + "community": 2, + "community_name": "A00_Common \u2014 App Shell Framework", + "norm_label": "\u1100\u1165\u11b7\u110c\u1173\u11bc \u1107\u1165\u11b7\u110b\u1171\u110b\u116a \u1106\u1169\u1109\u116e\u11ab \u110b\u1175\u1105\u1167\u11a8" + }, + { + "label": "\uc0ac\uc6a9\ucc98", + "file_type": "document", + "source_file": "concepts/crs_metadata.md", + "source_location": "L36", + "_origin": "ast", + "id": "concepts_crs_metadata_\uc0ac\uc6a9\ucc98", + "community": 2, + "community_name": "A00_Common \u2014 App Shell Framework", + "norm_label": "\u1109\u1161\u110b\u116d\u11bc\u110e\u1165" + }, + { + "label": "files_surface.md", + "file_type": "document", + "source_file": "concepts/db_schema/files_surface.md", + "source_location": "L1", + "_origin": "ast", + "id": "concepts_db_schema_files_surface", + "community": 8, + "community_name": "DB: \ud30c\uc77c/\uc9c0\ud45c\uba74\ubd84\uc11d \ud14c\uc774\ube14", + "norm_label": "files_surface.md" + }, + { + "label": "DB: \ud30c\uc77c/\uc9c0\ud45c\uba74\ubd84\uc11d \ud14c\uc774\ube14", + "file_type": "document", + "source_file": "concepts/db_schema/files_surface.md", + "source_location": "L9", + "_origin": "ast", + "id": "concepts_db_schema_files_surface_db_\ud30c\uc77c_\uc9c0\ud45c\uba74\ubd84\uc11d_\ud14c\uc774\ube14", + "community": 8, + "community_name": "DB: \ud30c\uc77c/\uc9c0\ud45c\uba74\ubd84\uc11d \ud14c\uc774\ube14", + "norm_label": "db: \u1111\u1161\u110b\u1175\u11af/\u110c\u1175\u1111\u116d\u1106\u1167\u11ab\u1107\u116e\u11ab\u1109\u1165\u11a8 \u1110\u1166\u110b\u1175\u1107\u1173\u11af" + }, + { + "label": "upload_sessions (\uc5c5\ub85c\ub4dc \uc138\uc158)", + "file_type": "document", + "source_file": "concepts/db_schema/files_surface.md", + "source_location": "L13", + "_origin": "ast", + "id": "concepts_db_schema_files_surface_upload_sessions_\uc5c5\ub85c\ub4dc_\uc138\uc158", + "community": 8, + "community_name": "DB: \ud30c\uc77c/\uc9c0\ud45c\uba74\ubd84\uc11d \ud14c\uc774\ube14", + "norm_label": "upload_sessions (\u110b\u1165\u11b8\u1105\u1169\u1103\u1173 \u1109\u1166\u1109\u1167\u11ab)" + }, + { + "label": "upload_chunks (\uc5c5\ub85c\ub4dc \uccad\ud06c \ub370\uc774\ud130)", + "file_type": "document", + "source_file": "concepts/db_schema/files_surface.md", + "source_location": "L24", + "_origin": "ast", + "id": "concepts_db_schema_files_surface_upload_chunks_\uc5c5\ub85c\ub4dc_\uccad\ud06c_\ub370\uc774\ud130", + "community": 8, + "community_name": "DB: \ud30c\uc77c/\uc9c0\ud45c\uba74\ubd84\uc11d \ud14c\uc774\ube14", + "norm_label": "upload_chunks (\u110b\u1165\u11b8\u1105\u1169\u1103\u1173 \u110e\u1165\u11bc\u110f\u1173 \u1103\u1166\u110b\u1175\u1110\u1165)" + }, + { + "label": "input_files (\uc785\ub825 \uc6d0\ubcf8 \ud30c\uc77c)", + "file_type": "document", + "source_file": "concepts/db_schema/files_surface.md", + "source_location": "L35", + "_origin": "ast", + "id": "concepts_db_schema_files_surface_input_files_\uc785\ub825_\uc6d0\ubcf8_\ud30c\uc77c", + "community": 8, + "community_name": "DB: \ud30c\uc77c/\uc9c0\ud45c\uba74\ubd84\uc11d \ud14c\uc774\ube14", + "norm_label": "input_files (\u110b\u1175\u11b8\u1105\u1167\u11a8 \u110b\u116f\u11ab\u1107\u1169\u11ab \u1111\u1161\u110b\u1175\u11af)" + }, + { + "label": "processed_point_cloud (\ud544\ud130/\ubcc0\ud658 \ud3ec\uc778\ud2b8\ud074\ub77c\uc6b0\ub4dc)", + "file_type": "document", + "source_file": "concepts/db_schema/files_surface.md", + "source_location": "L48", + "_origin": "ast", + "id": "concepts_db_schema_files_surface_processed_point_cloud_\ud544\ud130_\ubcc0\ud658_\ud3ec\uc778\ud2b8\ud074\ub77c\uc6b0\ub4dc", + "community": 8, + "community_name": "DB: \ud30c\uc77c/\uc9c0\ud45c\uba74\ubd84\uc11d \ud14c\uc774\ube14", + "norm_label": "processed_point_cloud (\u1111\u1175\u11af\u1110\u1165/\u1107\u1167\u11ab\u1112\u116a\u11ab \u1111\u1169\u110b\u1175\u11ab\u1110\u1173\u110f\u1173\u11af\u1105\u1161\u110b\u116e\u1103\u1173)" + }, + { + "label": "surface_models (\uc9c0\ud45c\uba74 \ubaa8\ub378 \ubc0f \ub4f1\uace0\uc120)", + "file_type": "document", + "source_file": "concepts/db_schema/files_surface.md", + "source_location": "L64", + "_origin": "ast", + "id": "concepts_db_schema_files_surface_surface_models_\uc9c0\ud45c\uba74_\ubaa8\ub378_\ubc0f_\ub4f1\uace0\uc120", + "community": 8, + "community_name": "DB: \ud30c\uc77c/\uc9c0\ud45c\uba74\ubd84\uc11d \ud14c\uc774\ube14", + "norm_label": "surface_models (\u110c\u1175\u1111\u116d\u1106\u1167\u11ab \u1106\u1169\u1103\u1166\u11af \u1106\u1175\u11be \u1103\u1173\u11bc\u1100\u1169\u1109\u1165\u11ab)" + }, + { + "label": "terrain_layers (\uc9c0\ud615 \ub808\uc774\uc5b4)", + "file_type": "document", + "source_file": "concepts/db_schema/files_surface.md", + "source_location": "L77", + "_origin": "ast", + "id": "concepts_db_schema_files_surface_terrain_layers_\uc9c0\ud615_\ub808\uc774\uc5b4", + "community": 8, + "community_name": "DB: \ud30c\uc77c/\uc9c0\ud45c\uba74\ubd84\uc11d \ud14c\uc774\ube14", + "norm_label": "terrain_layers (\u110c\u1175\u1112\u1167\u11bc \u1105\u1166\u110b\u1175\u110b\u1165)" + }, + { + "label": "input_files.status \uac12", + "file_type": "document", + "source_file": "concepts/db_schema/files_surface.md", + "source_location": "L89", + "_origin": "ast", + "id": "concepts_db_schema_files_surface_input_files_status_\uac12", + "community": 8, + "community_name": "DB: \ud30c\uc77c/\uc9c0\ud45c\uba74\ubd84\uc11d \ud14c\uc774\ube14", + "norm_label": "input_files.status \u1100\u1161\u11b9" + }, + { + "label": "surface_models.status \uac12", + "file_type": "document", + "source_file": "concepts/db_schema/files_surface.md", + "source_location": "L92", + "_origin": "ast", + "id": "concepts_db_schema_files_surface_surface_models_status_\uac12", + "community": 8, + "community_name": "DB: \ud30c\uc77c/\uc9c0\ud45c\uba74\ubd84\uc11d \ud14c\uc774\ube14", + "norm_label": "surface_models.status \u1100\u1161\u11b9" + }, + { + "label": "processed_point_cloud.status \uac12", + "file_type": "document", + "source_file": "concepts/db_schema/files_surface.md", + "source_location": "L95", + "_origin": "ast", + "id": "concepts_db_schema_files_surface_processed_point_cloud_status_\uac12", + "community": 8, + "community_name": "DB: \ud30c\uc77c/\uc9c0\ud45c\uba74\ubd84\uc11d \ud14c\uc774\ube14", + "norm_label": "processed_point_cloud.status \u1100\u1161\u11b9" + }, + { + "label": "logs_monitoring.md", + "file_type": "document", + "source_file": "concepts/db_schema/logs_monitoring.md", + "source_location": "L1", + "_origin": "ast", + "id": "concepts_db_schema_logs_monitoring", + "community": 5, + "community_name": "DB: \ub85c\uadf8/\ubaa8\ub2c8\ud130\ub9c1 \ud14c\uc774\ube14", + "norm_label": "logs_monitoring.md" + }, + { + "label": "DB: \ub85c\uadf8/\ubaa8\ub2c8\ud130\ub9c1 \ud14c\uc774\ube14", + "file_type": "document", + "source_file": "concepts/db_schema/logs_monitoring.md", + "source_location": "L9", + "_origin": "ast", + "id": "concepts_db_schema_logs_monitoring_db_\ub85c\uadf8_\ubaa8\ub2c8\ud130\ub9c1_\ud14c\uc774\ube14", + "community": 5, + "community_name": "DB: \ub85c\uadf8/\ubaa8\ub2c8\ud130\ub9c1 \ud14c\uc774\ube14", + "norm_label": "db: \u1105\u1169\u1100\u1173/\u1106\u1169\u1102\u1175\u1110\u1165\u1105\u1175\u11bc \u1110\u1166\u110b\u1175\u1107\u1173\u11af" + }, + { + "label": "login_logs (\ub85c\uadf8\uc778 \uc2dc\ub3c4 \ub85c\uadf8)", + "file_type": "document", + "source_file": "concepts/db_schema/logs_monitoring.md", + "source_location": "L13", + "_origin": "ast", + "id": "concepts_db_schema_logs_monitoring_login_logs_\ub85c\uadf8\uc778_\uc2dc\ub3c4_\ub85c\uadf8", + "community": 5, + "community_name": "DB: \ub85c\uadf8/\ubaa8\ub2c8\ud130\ub9c1 \ud14c\uc774\ube14", + "norm_label": "login_logs (\u1105\u1169\u1100\u1173\u110b\u1175\u11ab \u1109\u1175\u1103\u1169 \u1105\u1169\u1100\u1173)" + }, + { + "label": "activity_logs (\uc0ac\uc6a9\uc790 \ud65c\ub3d9 \ub85c\uadf8)", + "file_type": "document", + "source_file": "concepts/db_schema/logs_monitoring.md", + "source_location": "L23", + "_origin": "ast", + "id": "concepts_db_schema_logs_monitoring_activity_logs_\uc0ac\uc6a9\uc790_\ud65c\ub3d9_\ub85c\uadf8", + "community": 5, + "community_name": "DB: \ub85c\uadf8/\ubaa8\ub2c8\ud130\ub9c1 \ud14c\uc774\ube14", + "norm_label": "activity_logs (\u1109\u1161\u110b\u116d\u11bc\u110c\u1161 \u1112\u116a\u11af\u1103\u1169\u11bc \u1105\u1169\u1100\u1173)" + }, + { + "label": "audit_logs (\uac10\uc0ac \ub85c\uadf8)", + "file_type": "document", + "source_file": "concepts/db_schema/logs_monitoring.md", + "source_location": "L33", + "_origin": "ast", + "id": "concepts_db_schema_logs_monitoring_audit_logs_\uac10\uc0ac_\ub85c\uadf8", + "community": 5, + "community_name": "DB: \ub85c\uadf8/\ubaa8\ub2c8\ud130\ub9c1 \ud14c\uc774\ube14", + "norm_label": "audit_logs (\u1100\u1161\u11b7\u1109\u1161 \u1105\u1169\u1100\u1173)" + }, + { + "label": "system_audit_logs (\ud504\ub85c\uc81d\ud2b8/\uc870\uc9c1 \ubcc0\uacbd \uac10\uc0ac \ub85c\uadf8)", + "file_type": "document", + "source_file": "concepts/db_schema/logs_monitoring.md", + "source_location": "L43", + "_origin": "ast", + "id": "concepts_db_schema_logs_monitoring_system_audit_logs_\ud504\ub85c\uc81d\ud2b8_\uc870\uc9c1_\ubcc0\uacbd_\uac10\uc0ac_\ub85c\uadf8", + "community": 5, + "community_name": "DB: \ub85c\uadf8/\ubaa8\ub2c8\ud130\ub9c1 \ud14c\uc774\ube14", + "norm_label": "system_audit_logs (\u1111\u1173\u1105\u1169\u110c\u1166\u11a8\u1110\u1173/\u110c\u1169\u110c\u1175\u11a8 \u1107\u1167\u11ab\u1100\u1167\u11bc \u1100\u1161\u11b7\u1109\u1161 \u1105\u1169\u1100\u1173)" + }, + { + "label": "system_admin_logs (\uc2dc\uc2a4\ud15c \uad00\ub9ac\uc790 \ud589\uc704 \ub85c\uadf8)", + "file_type": "document", + "source_file": "concepts/db_schema/logs_monitoring.md", + "source_location": "L53", + "_origin": "ast", + "id": "concepts_db_schema_logs_monitoring_system_admin_logs_\uc2dc\uc2a4\ud15c_\uad00\ub9ac\uc790_\ud589\uc704_\ub85c\uadf8", + "community": 5, + "community_name": "DB: \ub85c\uadf8/\ubaa8\ub2c8\ud130\ub9c1 \ud14c\uc774\ube14", + "norm_label": "system_admin_logs (\u1109\u1175\u1109\u1173\u1110\u1166\u11b7 \u1100\u116a\u11ab\u1105\u1175\u110c\u1161 \u1112\u1162\u11bc\u110b\u1171 \u1105\u1169\u1100\u1173)" + }, + { + "label": "system_resources (\uc2dc\uc2a4\ud15c \uc790\uc6d0 \uacc4\uce21)", + "file_type": "document", + "source_file": "concepts/db_schema/logs_monitoring.md", + "source_location": "L62", + "_origin": "ast", + "id": "concepts_db_schema_logs_monitoring_system_resources_\uc2dc\uc2a4\ud15c_\uc790\uc6d0_\uacc4\uce21", + "community": 5, + "community_name": "DB: \ub85c\uadf8/\ubaa8\ub2c8\ud130\ub9c1 \ud14c\uc774\ube14", + "norm_label": "system_resources (\u1109\u1175\u1109\u1173\u1110\u1166\u11b7 \u110c\u1161\u110b\u116f\u11ab \u1100\u1168\u110e\u1173\u11a8)" + }, + { + "label": "support_requests (\uae30\uc220 \uc9c0\uc6d0 \uc694\uccad)", + "file_type": "document", + "source_file": "concepts/db_schema/logs_monitoring.md", + "source_location": "L71", + "_origin": "ast", + "id": "concepts_db_schema_logs_monitoring_support_requests_\uae30\uc220_\uc9c0\uc6d0_\uc694\uccad", + "community": 5, + "community_name": "DB: \ub85c\uadf8/\ubaa8\ub2c8\ud130\ub9c1 \ud14c\uc774\ube14", + "norm_label": "support_requests (\u1100\u1175\u1109\u116e\u11af \u110c\u1175\u110b\u116f\u11ab \u110b\u116d\u110e\u1165\u11bc)" + }, + { + "label": "change_logs (\uc124\uacc4 \ubcc0\uacbd \uc774\ub825)", + "file_type": "document", + "source_file": "concepts/db_schema/logs_monitoring.md", + "source_location": "L84", + "_origin": "ast", + "id": "concepts_db_schema_logs_monitoring_change_logs_\uc124\uacc4_\ubcc0\uacbd_\uc774\ub825", + "community": 5, + "community_name": "DB: \ub85c\uadf8/\ubaa8\ub2c8\ud130\ub9c1 \ud14c\uc774\ube14", + "norm_label": "change_logs (\u1109\u1165\u11af\u1100\u1168 \u1107\u1167\u11ab\u1100\u1167\u11bc \u110b\u1175\u1105\u1167\u11a8)" + }, + { + "label": "system_audit_logs \u2014 \uc0ac\uc6a9\ucc98 (B01, B02)", + "file_type": "document", + "source_file": "concepts/db_schema/logs_monitoring.md", + "source_location": "L95", + "_origin": "ast", + "id": "concepts_db_schema_logs_monitoring_system_audit_logs_\uc0ac\uc6a9\ucc98_b01_b02", + "community": 5, + "community_name": "DB: \ub85c\uadf8/\ubaa8\ub2c8\ud130\ub9c1 \ud14c\uc774\ube14", + "norm_label": "system_audit_logs \u2014 \u1109\u1161\u110b\u116d\u11bc\u110e\u1165 (b01, b02)" + }, + { + "label": "\ub9ac\uc18c\uc2a4 API (SYSTEM_ADMIN \uc804\uc6a9)", + "file_type": "document", + "source_file": "concepts/db_schema/logs_monitoring.md", + "source_location": "L98", + "_origin": "ast", + "id": "concepts_db_schema_logs_monitoring_\ub9ac\uc18c\uc2a4_api_system_admin_\uc804\uc6a9", + "community": 5, + "community_name": "DB: \ub85c\uadf8/\ubaa8\ub2c8\ud130\ub9c1 \ud14c\uc774\ube14", + "norm_label": "\u1105\u1175\u1109\u1169\u1109\u1173 api (system_admin \u110c\u1165\u11ab\u110b\u116d\u11bc)" + }, + { + "label": "overview.md", + "file_type": "document", + "source_file": "concepts/db_schema/overview.md", + "source_location": "L1", + "_origin": "ast", + "id": "concepts_db_schema_overview", + "community": 1, + "community_name": "\uc778\uc99d / RBAC", + "norm_label": "overview.md" + }, + { + "label": "DB \uc2a4\ud0a4\ub9c8 \uac1c\uc694", + "file_type": "document", + "source_file": "concepts/db_schema/overview.md", + "source_location": "L9", + "_origin": "ast", + "id": "concepts_db_schema_overview_db_\uc2a4\ud0a4\ub9c8_\uac1c\uc694", + "community": 1, + "community_name": "\uc778\uc99d / RBAC", + "norm_label": "db \u1109\u1173\u110f\u1175\u1106\u1161 \u1100\u1162\u110b\u116d" + }, + { + "label": "\ud14c\uc774\ube14 \uadf8\ub8f9 (9\uac1c)", + "file_type": "document", + "source_file": "concepts/db_schema/overview.md", + "source_location": "L22", + "_origin": "ast", + "id": "concepts_db_schema_overview_\ud14c\uc774\ube14_\uadf8\ub8f9_9\uac1c", + "community": 1, + "community_name": "\uc778\uc99d / RBAC", + "norm_label": "\u1110\u1166\u110b\u1175\u1107\u1173\u11af \u1100\u1173\u1105\u116e\u11b8 (9\u1100\u1162)" + }, + { + "label": "\ud30c\uc77c \uacbd\ub85c \ucd94\uc801 \uceec\ub7fc (DB\uc5d0 \uacbd\ub85c\ub9cc \uae30\ub85d, \uc2e4 \ud30c\uc77c\uc740 \ud30c\uc77c\uc2dc\uc2a4\ud15c)", + "file_type": "document", + "source_file": "concepts/db_schema/overview.md", + "source_location": "L34", + "_origin": "ast", + "id": "concepts_db_schema_overview_\ud30c\uc77c_\uacbd\ub85c_\ucd94\uc801_\uceec\ub7fc_db\uc5d0_\uacbd\ub85c\ub9cc_\uae30\ub85d_\uc2e4_\ud30c\uc77c\uc740_\ud30c\uc77c\uc2dc\uc2a4\ud15c", + "community": 1, + "community_name": "\uc778\uc99d / RBAC", + "norm_label": "\u1111\u1161\u110b\u1175\u11af \u1100\u1167\u11bc\u1105\u1169 \u110e\u116e\u110c\u1165\u11a8 \u110f\u1165\u11af\u1105\u1165\u11b7 (db\u110b\u1166 \u1100\u1167\u11bc\u1105\u1169\u1106\u1161\u11ab \u1100\u1175\u1105\u1169\u11a8, \u1109\u1175\u11af \u1111\u1161\u110b\u1175\u11af\u110b\u1173\u11ab \u1111\u1161\u110b\u1175\u11af\u1109\u1175\u1109\u1173\u1110\u1166\u11b7)" + }, + { + "label": "\uc124\uacc4 \uc6d0\uce59", + "file_type": "document", + "source_file": "concepts/db_schema/overview.md", + "source_location": "L51", + "_origin": "ast", + "id": "concepts_db_schema_overview_\uc124\uacc4_\uc6d0\uce59", + "community": 1, + "community_name": "\uc778\uc99d / RBAC", + "norm_label": "\u1109\u1165\u11af\u1100\u1168 \u110b\u116f\u11ab\u110e\u1175\u11a8" + }, + { + "label": "\ud14c\uc774\ube14 \uad00\uacc4 (\ud575\uc2ec \ud750\ub984)", + "file_type": "document", + "source_file": "concepts/db_schema/overview.md", + "source_location": "L56", + "_origin": "ast", + "id": "concepts_db_schema_overview_\ud14c\uc774\ube14_\uad00\uacc4_\ud575\uc2ec_\ud750\ub984", + "community": 1, + "community_name": "\uc778\uc99d / RBAC", + "norm_label": "\u1110\u1166\u110b\u1175\u1107\u1173\u11af \u1100\u116a\u11ab\u1100\u1168 (\u1112\u1162\u11a8\u1109\u1175\u11b7 \u1112\u1173\u1105\u1173\u11b7)" + }, + { + "label": "projects.md", + "file_type": "document", + "source_file": "concepts/db_schema/projects.md", + "source_location": "L1", + "_origin": "ast", + "id": "concepts_db_schema_projects", + "community": 45, + "community_name": "DB: \ud504\ub85c\uc81d\ud2b8 \uad00\ub9ac \ud14c\uc774\ube14", + "norm_label": "projects.md" + }, + { + "label": "DB: \ud504\ub85c\uc81d\ud2b8 \uad00\ub9ac \ud14c\uc774\ube14", + "file_type": "document", + "source_file": "concepts/db_schema/projects.md", + "source_location": "L9", + "_origin": "ast", + "id": "concepts_db_schema_projects_db_\ud504\ub85c\uc81d\ud2b8_\uad00\ub9ac_\ud14c\uc774\ube14", + "community": 45, + "community_name": "DB: \ud504\ub85c\uc81d\ud2b8 \uad00\ub9ac \ud14c\uc774\ube14", + "norm_label": "db: \u1111\u1173\u1105\u1169\u110c\u1166\u11a8\u1110\u1173 \u1100\u116a\u11ab\u1105\u1175 \u1110\u1166\u110b\u1175\u1107\u1173\u11af" + }, + { + "label": "projects (\ud504\ub85c\uc81d\ud2b8)", + "file_type": "document", + "source_file": "concepts/db_schema/projects.md", + "source_location": "L13", + "_origin": "ast", + "id": "concepts_db_schema_projects_projects_\ud504\ub85c\uc81d\ud2b8", + "community": 45, + "community_name": "DB: \ud504\ub85c\uc81d\ud2b8 \uad00\ub9ac \ud14c\uc774\ube14", + "norm_label": "projects (\u1111\u1173\u1105\u1169\u110c\u1166\u11a8\u1110\u1173)" + }, + { + "label": "project_versions (\ud504\ub85c\uc81d\ud2b8 \ubc84\uc804 \uc2a4\ub0c5\uc0f7)", + "file_type": "document", + "source_file": "concepts/db_schema/projects.md", + "source_location": "L30", + "_origin": "ast", + "id": "concepts_db_schema_projects_project_versions_\ud504\ub85c\uc81d\ud2b8_\ubc84\uc804_\uc2a4\ub0c5\uc0f7", + "community": 45, + "community_name": "DB: \ud504\ub85c\uc81d\ud2b8 \uad00\ub9ac \ud14c\uc774\ube14", + "norm_label": "project_versions (\u1111\u1173\u1105\u1169\u110c\u1166\u11a8\u1110\u1173 \u1107\u1165\u110c\u1165\u11ab \u1109\u1173\u1102\u1162\u11b8\u1109\u1163\u11ba)" + }, + { + "label": "project_automations (\ud504\ub85c\uc81d\ud2b8 \uc790\ub3d9\ud654 \uc815\ucc45)", + "file_type": "document", + "source_file": "concepts/db_schema/projects.md", + "source_location": "L40", + "_origin": "ast", + "id": "concepts_db_schema_projects_project_automations_\ud504\ub85c\uc81d\ud2b8_\uc790\ub3d9\ud654_\uc815\ucc45", + "community": 45, + "community_name": "DB: \ud504\ub85c\uc81d\ud2b8 \uad00\ub9ac \ud14c\uc774\ube14", + "norm_label": "project_automations (\u1111\u1173\u1105\u1169\u110c\u1166\u11a8\u1110\u1173 \u110c\u1161\u1103\u1169\u11bc\u1112\u116a \u110c\u1165\u11bc\u110e\u1162\u11a8)" + }, + { + "label": "project_workflow_stages (\ub2e8\uacc4\ubcc4 \uc0c1\uc138 \uc0c1\ud0dc)", + "file_type": "document", + "source_file": "concepts/db_schema/projects.md", + "source_location": "L54", + "_origin": "ast", + "id": "concepts_db_schema_projects_project_workflow_stages_\ub2e8\uacc4\ubcc4_\uc0c1\uc138_\uc0c1\ud0dc", + "community": 45, + "community_name": "DB: \ud504\ub85c\uc81d\ud2b8 \uad00\ub9ac \ud14c\uc774\ube14", + "norm_label": "project_workflow_stages (\u1103\u1161\u11ab\u1100\u1168\u1107\u1167\u11af \u1109\u1161\u11bc\u1109\u1166 \u1109\u1161\u11bc\u1110\u1162)" + }, + { + "label": "route_profile.md", + "file_type": "document", + "source_file": "concepts/db_schema/route_profile.md", + "source_location": "L1", + "_origin": "ast", + "id": "concepts_db_schema_route_profile", + "community": 9, + "community_name": "DB: \uacbd\ub85c/\uc885\ud6a1\ub2e8 \ud14c\uc774\ube14", + "norm_label": "route_profile.md" + }, + { + "label": "DB: \uacbd\ub85c/\uc885\ud6a1\ub2e8 \ud14c\uc774\ube14", + "file_type": "document", + "source_file": "concepts/db_schema/route_profile.md", + "source_location": "L9", + "_origin": "ast", + "id": "concepts_db_schema_route_profile_db_\uacbd\ub85c_\uc885\ud6a1\ub2e8_\ud14c\uc774\ube14", + "community": 9, + "community_name": "DB: \uacbd\ub85c/\uc885\ud6a1\ub2e8 \ud14c\uc774\ube14", + "norm_label": "db: \u1100\u1167\u11bc\u1105\u1169/\u110c\u1169\u11bc\u1112\u116c\u11bc\u1103\u1161\u11ab \u1110\u1166\u110b\u1175\u1107\u1173\u11af" + }, + { + "label": "routes (\ub178\uc120 \uacbd\ub85c)", + "file_type": "document", + "source_file": "concepts/db_schema/route_profile.md", + "source_location": "L13", + "_origin": "ast", + "id": "concepts_db_schema_route_profile_routes_\ub178\uc120_\uacbd\ub85c", + "community": 9, + "community_name": "DB: \uacbd\ub85c/\uc885\ud6a1\ub2e8 \ud14c\uc774\ube14", + "norm_label": "routes (\u1102\u1169\u1109\u1165\u11ab \u1100\u1167\u11bc\u1105\u1169)" + }, + { + "label": "route_points (\uacbd\ub85c \uc88c\ud45c\uc810)", + "file_type": "document", + "source_file": "concepts/db_schema/route_profile.md", + "source_location": "L29", + "_origin": "ast", + "id": "concepts_db_schema_route_profile_route_points_\uacbd\ub85c_\uc88c\ud45c\uc810", + "community": 9, + "community_name": "DB: \uacbd\ub85c/\uc885\ud6a1\ub2e8 \ud14c\uc774\ube14", + "norm_label": "route_points (\u1100\u1167\u11bc\u1105\u1169 \u110c\u116a\u1111\u116d\u110c\u1165\u11b7)" + }, + { + "label": "route_statistics (\ub178\uc120 \ud1b5\uacc4)", + "file_type": "document", + "source_file": "concepts/db_schema/route_profile.md", + "source_location": "L40", + "_origin": "ast", + "id": "concepts_db_schema_route_profile_route_statistics_\ub178\uc120_\ud1b5\uacc4", + "community": 9, + "community_name": "DB: \uacbd\ub85c/\uc885\ud6a1\ub2e8 \ud14c\uc774\ube14", + "norm_label": "route_statistics (\u1102\u1169\u1109\u1165\u11ab \u1110\u1169\u11bc\u1100\u1168)" + }, + { + "label": "longitudinal_sections (\uc885\ub2e8\uba74 \uc124\uacc4)", + "file_type": "document", + "source_file": "concepts/db_schema/route_profile.md", + "source_location": "L51", + "_origin": "ast", + "id": "concepts_db_schema_route_profile_longitudinal_sections_\uc885\ub2e8\uba74_\uc124\uacc4", + "community": 9, + "community_name": "DB: \uacbd\ub85c/\uc885\ud6a1\ub2e8 \ud14c\uc774\ube14", + "norm_label": "longitudinal_sections (\u110c\u1169\u11bc\u1103\u1161\u11ab\u1106\u1167\u11ab \u1109\u1165\u11af\u1100\u1168)" + }, + { + "label": "`data` \uceec\ub7fc \ub0b4 `options` \uc2a4\ub0c5\uc0f7 \uad6c\uc870 (2026-07-19 \ub3c4\uc785)", + "file_type": "document", + "source_file": "concepts/db_schema/route_profile.md", + "source_location": "L63", + "_origin": "ast", + "id": "concepts_db_schema_route_profile_data_\uceec\ub7fc_\ub0b4_options_\uc2a4\ub0c5\uc0f7_\uad6c\uc870_2026_07_19_\ub3c4\uc785", + "community": 9, + "community_name": "DB: \uacbd\ub85c/\uc885\ud6a1\ub2e8 \ud14c\uc774\ube14", + "norm_label": "`data` \u110f\u1165\u11af\u1105\u1165\u11b7 \u1102\u1162 `options` \u1109\u1173\u1102\u1162\u11b8\u1109\u1163\u11ba \u1100\u116e\u110c\u1169 (2026-07-19 \u1103\u1169\u110b\u1175\u11b8)" + }, + { + "label": "`data` \uceec\ub7fc \ub0b4 `profile_alignment` \uad6c\uc870 (2026-07-23 \ub3c4\uc785)", + "file_type": "document", + "source_file": "concepts/db_schema/route_profile.md", + "source_location": "L66", + "_origin": "ast", + "id": "concepts_db_schema_route_profile_data_\uceec\ub7fc_\ub0b4_profile_alignment_\uad6c\uc870_2026_07_23_\ub3c4\uc785", + "community": 9, + "community_name": "DB: \uacbd\ub85c/\uc885\ud6a1\ub2e8 \ud14c\uc774\ube14", + "norm_label": "`data` \u110f\u1165\u11af\u1105\u1165\u11b7 \u1102\u1162 `profile_alignment` \u1100\u116e\u110c\u1169 (2026-07-23 \u1103\u1169\u110b\u1175\u11b8)" + }, + { + "label": "cross_sections (\ud6a1\ub2e8\uba74 \uc124\uacc4)", + "file_type": "document", + "source_file": "concepts/db_schema/route_profile.md", + "source_location": "L70", + "_origin": "ast", + "id": "concepts_db_schema_route_profile_cross_sections_\ud6a1\ub2e8\uba74_\uc124\uacc4", + "community": 9, + "community_name": "DB: \uacbd\ub85c/\uc885\ud6a1\ub2e8 \ud14c\uc774\ube14", + "norm_label": "cross_sections (\u1112\u116c\u11bc\u1103\u1161\u11ab\u1106\u1167\u11ab \u1109\u1165\u11af\u1100\u1168)" + }, + { + "label": "routes.status \ud750\ub984", + "file_type": "document", + "source_file": "concepts/db_schema/route_profile.md", + "source_location": "L82", + "_origin": "ast", + "id": "concepts_db_schema_route_profile_routes_status_\ud750\ub984", + "community": 9, + "community_name": "DB: \uacbd\ub85c/\uc885\ud6a1\ub2e8 \ud14c\uc774\ube14", + "norm_label": "routes.status \u1112\u1173\u1105\u1173\u11b7" + }, + { + "label": "cross_sections.data.structures", + "file_type": "document", + "source_file": "concepts/db_schema/route_profile.md", + "source_location": "L85", + "_origin": "ast", + "id": "concepts_db_schema_route_profile_cross_sections_data_structures", + "community": 9, + "community_name": "DB: \uacbd\ub85c/\uc885\ud6a1\ub2e8 \ud14c\uc774\ube14", + "norm_label": "cross_sections.data.structures" + }, + { + "label": "longitudinal_alignment.md", + "file_type": "document", + "source_file": "concepts/db_schema/route_profile/longitudinal_alignment.md", + "source_location": "L1", + "_origin": "ast", + "id": "concepts_db_schema_route_profile_longitudinal_alignment", + "community": 148, + "community_name": "longitudinal_alignment.md", + "norm_label": "longitudinal_alignment.md" + }, + { + "label": "DB: longitudinal_sections.data.profile_alignment \uad6c\uc870", + "file_type": "document", + "source_file": "concepts/db_schema/route_profile/longitudinal_alignment.md", + "source_location": "L9", + "_origin": "ast", + "id": "concepts_db_schema_route_profile_longitudinal_alignment_db_longitudinal_sections_data_profile_alignment_\uad6c\uc870", + "community": 148, + "community_name": "longitudinal_alignment.md", + "norm_label": "db: longitudinal_sections.data.profile_alignment \u1100\u116e\u110c\u1169" + }, + { + "label": "structure_output.md", + "file_type": "document", + "source_file": "concepts/db_schema/structure_output.md", + "source_location": "L1", + "_origin": "ast", + "id": "concepts_db_schema_structure_output", + "community": 34, + "community_name": "DB: \uad6c\uc870\ubb3c/\uc218\ub7c9/\uc0b0\ucd9c\ubb3c \ud14c\uc774\ube14", + "norm_label": "structure_output.md" + }, + { + "label": "DB: \uad6c\uc870\ubb3c/\uc218\ub7c9/\uc0b0\ucd9c\ubb3c \ud14c\uc774\ube14", + "file_type": "document", + "source_file": "concepts/db_schema/structure_output.md", + "source_location": "L9", + "_origin": "ast", + "id": "concepts_db_schema_structure_output_db_\uad6c\uc870\ubb3c_\uc218\ub7c9_\uc0b0\ucd9c\ubb3c_\ud14c\uc774\ube14", + "community": 34, + "community_name": "DB: \uad6c\uc870\ubb3c/\uc218\ub7c9/\uc0b0\ucd9c\ubb3c \ud14c\uc774\ube14", + "norm_label": "db: \u1100\u116e\u110c\u1169\u1106\u116e\u11af/\u1109\u116e\u1105\u1163\u11bc/\u1109\u1161\u11ab\u110e\u116e\u11af\u1106\u116e\u11af \u1110\u1166\u110b\u1175\u1107\u1173\u11af" + }, + { + "label": "structures (\ubc30\uce58 \uad6c\uc870\ubb3c)", + "file_type": "document", + "source_file": "concepts/db_schema/structure_output.md", + "source_location": "L13", + "_origin": "ast", + "id": "concepts_db_schema_structure_output_structures_\ubc30\uce58_\uad6c\uc870\ubb3c", + "community": 34, + "community_name": "DB: \uad6c\uc870\ubb3c/\uc218\ub7c9/\uc0b0\ucd9c\ubb3c \ud14c\uc774\ube14", + "norm_label": "structures (\u1107\u1162\u110e\u1175 \u1100\u116e\u110c\u1169\u1106\u116e\u11af)" + }, + { + "label": "quantity_items (\uc218\ub7c9 \uc0b0\ucd9c \ud56d\ubaa9)", + "file_type": "document", + "source_file": "concepts/db_schema/structure_output.md", + "source_location": "L29", + "_origin": "ast", + "id": "concepts_db_schema_structure_output_quantity_items_\uc218\ub7c9_\uc0b0\ucd9c_\ud56d\ubaa9", + "community": 34, + "community_name": "DB: \uad6c\uc870\ubb3c/\uc218\ub7c9/\uc0b0\ucd9c\ubb3c \ud14c\uc774\ube14", + "norm_label": "quantity_items (\u1109\u116e\u1105\u1163\u11bc \u1109\u1161\u11ab\u110e\u116e\u11af \u1112\u1161\u11bc\u1106\u1169\u11a8)" + }, + { + "label": "outputs (\ucd5c\uc885 \uacac\uc801/\ub3c4\uba74 \uc0b0\ucd9c \uc138\uc158)", + "file_type": "document", + "source_file": "concepts/db_schema/structure_output.md", + "source_location": "L42", + "_origin": "ast", + "id": "concepts_db_schema_structure_output_outputs_\ucd5c\uc885_\uacac\uc801_\ub3c4\uba74_\uc0b0\ucd9c_\uc138\uc158", + "community": 34, + "community_name": "DB: \uad6c\uc870\ubb3c/\uc218\ub7c9/\uc0b0\ucd9c\ubb3c \ud14c\uc774\ube14", + "norm_label": "outputs (\u110e\u116c\u110c\u1169\u11bc \u1100\u1167\u11ab\u110c\u1165\u11a8/\u1103\u1169\u1106\u1167\u11ab \u1109\u1161\u11ab\u110e\u116e\u11af \u1109\u1166\u1109\u1167\u11ab)" + }, + { + "label": "output_files (\uac1c\ubcc4 \uc0b0\ucd9c \ud30c\uc77c \ub9ac\uc2a4\ud2b8)", + "file_type": "document", + "source_file": "concepts/db_schema/structure_output.md", + "source_location": "L54", + "_origin": "ast", + "id": "concepts_db_schema_structure_output_output_files_\uac1c\ubcc4_\uc0b0\ucd9c_\ud30c\uc77c_\ub9ac\uc2a4\ud2b8", + "community": 34, + "community_name": "DB: \uad6c\uc870\ubb3c/\uc218\ub7c9/\uc0b0\ucd9c\ubb3c \ud14c\uc774\ube14", + "norm_label": "output_files (\u1100\u1162\u1107\u1167\u11af \u1109\u1161\u11ab\u110e\u116e\u11af \u1111\u1161\u110b\u1175\u11af \u1105\u1175\u1109\u1173\u1110\u1173)" + }, + { + "label": "quantity_items \ucd1d\ube44\uc6a9 \uacc4\uc0b0 \uc608", + "file_type": "document", + "source_file": "concepts/db_schema/structure_output.md", + "source_location": "L65", + "_origin": "ast", + "id": "concepts_db_schema_structure_output_quantity_items_\ucd1d\ube44\uc6a9_\uacc4\uc0b0_\uc608", + "community": 34, + "community_name": "DB: \uad6c\uc870\ubb3c/\uc218\ub7c9/\uc0b0\ucd9c\ubb3c \ud14c\uc774\ube14", + "norm_label": "quantity_items \u110e\u1169\u11bc\u1107\u1175\u110b\u116d\u11bc \u1100\u1168\u1109\u1161\u11ab \u110b\u1168" + }, + { + "label": "README.md", + "file_type": "document", + "source_file": "concepts/db_schema/unconfirmed/README.md", + "source_location": "L1", + "_origin": "ast", + "id": "concepts_db_schema_unconfirmed_readme", + "community": 115, + "community_name": "\ubbf8\ud655\uc815 \ud14c\uc774\ube14 \ubcf4\uad00\uc18c (Unconfirmed DB Schemas)", + "norm_label": "readme.md" + }, + { + "label": "\ubbf8\ud655\uc815 \ud14c\uc774\ube14 \ubcf4\uad00\uc18c (Unconfirmed DB Schemas)", + "file_type": "document", + "source_file": "concepts/db_schema/unconfirmed/README.md", + "source_location": "L7", + "_origin": "ast", + "id": "concepts_db_schema_unconfirmed_readme_\ubbf8\ud655\uc815_\ud14c\uc774\ube14_\ubcf4\uad00\uc18c_unconfirmed_db_schemas", + "community": 115, + "community_name": "\ubbf8\ud655\uc815 \ud14c\uc774\ube14 \ubcf4\uad00\uc18c (Unconfirmed DB Schemas)", + "norm_label": "\u1106\u1175\u1112\u116a\u11a8\u110c\u1165\u11bc \u1110\u1166\u110b\u1175\u1107\u1173\u11af \u1107\u1169\u1100\u116a\u11ab\u1109\u1169 (unconfirmed db schemas)" + }, + { + "label": "\uc6b4\uc601 \uaddc\uce59", + "file_type": "document", + "source_file": "concepts/db_schema/unconfirmed/README.md", + "source_location": "L11", + "_origin": "ast", + "id": "concepts_db_schema_unconfirmed_readme_\uc6b4\uc601_\uaddc\uce59", + "community": 115, + "community_name": "\ubbf8\ud655\uc815 \ud14c\uc774\ube14 \ubcf4\uad00\uc18c (Unconfirmed DB Schemas)", + "norm_label": "\u110b\u116e\u11ab\u110b\u1167\u11bc \u1100\u1172\u110e\u1175\u11a8" + }, + { + "label": "users_auth.md", + "file_type": "document", + "source_file": "concepts/db_schema/users_auth.md", + "source_location": "L1", + "_origin": "ast", + "id": "concepts_db_schema_users_auth", + "community": 1, + "community_name": "\uc778\uc99d / RBAC", + "norm_label": "users_auth.md" + }, + { + "label": "DB: \uc0ac\uc6a9\uc790/\uc778\uc99d/\uc870\uc9c1 \ud14c\uc774\ube14", + "file_type": "document", + "source_file": "concepts/db_schema/users_auth.md", + "source_location": "L9", + "_origin": "ast", + "id": "concepts_db_schema_users_auth_db_\uc0ac\uc6a9\uc790_\uc778\uc99d_\uc870\uc9c1_\ud14c\uc774\ube14", + "community": 1, + "community_name": "\uc778\uc99d / RBAC", + "norm_label": "db: \u1109\u1161\u110b\u116d\u11bc\u110c\u1161/\u110b\u1175\u11ab\u110c\u1173\u11bc/\u110c\u1169\u110c\u1175\u11a8 \u1110\u1166\u110b\u1175\u1107\u1173\u11af" + }, + { + "label": "users (\uc0ac\uc6a9\uc790)", + "file_type": "document", + "source_file": "concepts/db_schema/users_auth.md", + "source_location": "L13", + "_origin": "ast", + "id": "concepts_db_schema_users_auth_users_\uc0ac\uc6a9\uc790", + "community": 1, + "community_name": "\uc778\uc99d / RBAC", + "norm_label": "users (\u1109\u1161\u110b\u116d\u11bc\u110c\u1161)" + }, + { + "label": "companies (\ud68c\uc0ac)", + "file_type": "document", + "source_file": "concepts/db_schema/users_auth.md", + "source_location": "L32", + "_origin": "ast", + "id": "concepts_db_schema_users_auth_companies_\ud68c\uc0ac", + "community": 1, + "community_name": "\uc778\uc99d / RBAC", + "norm_label": "companies (\u1112\u116c\u1109\u1161)" + }, + { + "label": "sessions (\uc138\uc158)", + "file_type": "document", + "source_file": "concepts/db_schema/users_auth.md", + "source_location": "L45", + "_origin": "ast", + "id": "concepts_db_schema_users_auth_sessions_\uc138\uc158", + "community": 1, + "community_name": "\uc778\uc99d / RBAC", + "norm_label": "sessions (\u1109\u1166\u1109\u1167\u11ab)" + }, + { + "label": "email_otps (\uc774\uba54\uc77c OTP)", + "file_type": "document", + "source_file": "concepts/db_schema/users_auth.md", + "source_location": "L56", + "_origin": "ast", + "id": "concepts_db_schema_users_auth_email_otps_\uc774\uba54\uc77c_otp", + "community": 1, + "community_name": "\uc778\uc99d / RBAC", + "norm_label": "email_otps (\u110b\u1175\u1106\u1166\u110b\u1175\u11af otp)" + }, + { + "label": "trusted_devices (\uc2e0\ub8b0 \uae30\uae30)", + "file_type": "document", + "source_file": "concepts/db_schema/users_auth.md", + "source_location": "L65", + "_origin": "ast", + "id": "concepts_db_schema_users_auth_trusted_devices_\uc2e0\ub8b0_\uae30\uae30", + "community": 1, + "community_name": "\uc778\uc99d / RBAC", + "norm_label": "trusted_devices (\u1109\u1175\u11ab\u1105\u116c \u1100\u1175\u1100\u1175)" + }, + { + "label": "join_requests (\ud68c\uc0ac \uac00\uc785 \uc2e0\uccad)", + "file_type": "document", + "source_file": "concepts/db_schema/users_auth.md", + "source_location": "L73", + "_origin": "ast", + "id": "concepts_db_schema_users_auth_join_requests_\ud68c\uc0ac_\uac00\uc785_\uc2e0\uccad", + "community": 1, + "community_name": "\uc778\uc99d / RBAC", + "norm_label": "join_requests (\u1112\u116c\u1109\u1161 \u1100\u1161\u110b\u1175\u11b8 \u1109\u1175\u11ab\u110e\u1165\u11bc)" + }, + { + "label": "user_consents (\uc57d\uad00 \ub3d9\uc758)", + "file_type": "document", + "source_file": "concepts/db_schema/users_auth.md", + "source_location": "L84", + "_origin": "ast", + "id": "concepts_db_schema_users_auth_user_consents_\uc57d\uad00_\ub3d9\uc758", + "community": 1, + "community_name": "\uc778\uc99d / RBAC", + "norm_label": "user_consents (\u110b\u1163\u11a8\u1100\u116a\u11ab \u1103\u1169\u11bc\u110b\u1174)" + }, + { + "label": "dependencies.md", + "file_type": "document", + "source_file": "concepts/dependencies.md", + "source_location": "L1", + "_origin": "ast", + "id": "concepts_dependencies", + "community": 2, + "community_name": "A00_Common \u2014 App Shell Framework", + "norm_label": "dependencies.md" + }, + { + "label": "\uc678\ubd80 \ub77c\uc774\ube0c\ub7ec\ub9ac \uc758\uc874\uc131", + "file_type": "document", + "source_file": "concepts/dependencies.md", + "source_location": "L9", + "_origin": "ast", + "id": "concepts_dependencies_\uc678\ubd80_\ub77c\uc774\ube0c\ub7ec\ub9ac_\uc758\uc874\uc131", + "community": 2, + "community_name": "A00_Common \u2014 App Shell Framework", + "norm_label": "\u110b\u116c\u1107\u116e \u1105\u1161\u110b\u1175\u1107\u1173\u1105\u1165\u1105\u1175 \u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "\ubc31\uc5d4\ub4dc (Python 3.12.7)", + "file_type": "document", + "source_file": "concepts/dependencies.md", + "source_location": "L13", + "_origin": "ast", + "id": "concepts_dependencies_\ubc31\uc5d4\ub4dc_python_3_12_7", + "community": 2, + "community_name": "A00_Common \u2014 App Shell Framework", + "norm_label": "\u1107\u1162\u11a8\u110b\u1166\u11ab\u1103\u1173 (python 3.12.7)" + }, + { + "label": "\ud504\ub860\ud2b8\uc5d4\ub4dc (TypeScript/Node.js)", + "file_type": "document", + "source_file": "concepts/dependencies.md", + "source_location": "L31", + "_origin": "ast", + "id": "concepts_dependencies_\ud504\ub860\ud2b8\uc5d4\ub4dc_typescript_node_js", + "community": 2, + "community_name": "A00_Common \u2014 App Shell Framework", + "norm_label": "\u1111\u1173\u1105\u1169\u11ab\u1110\u1173\u110b\u1166\u11ab\u1103\u1173 (typescript/node.js)" + }, + { + "label": "\uc120\uc815 \uc6d0\uce59 (agent.md 3\uc808)", + "file_type": "document", + "source_file": "concepts/dependencies.md", + "source_location": "L40", + "_origin": "ast", + "id": "concepts_dependencies_\uc120\uc815_\uc6d0\uce59_agent_md_3\uc808", + "community": 2, + "community_name": "A00_Common \u2014 App Shell Framework", + "norm_label": "\u1109\u1165\u11ab\u110c\u1165\u11bc \u110b\u116f\u11ab\u110e\u1175\u11a8 (agent.md 3\u110c\u1165\u11af)" + }, + { + "label": "design.md", + "file_type": "document", + "source_file": "concepts/design.md", + "source_location": "L1", + "_origin": "ast", + "id": "concepts_design", + "community": 0, + "community_name": "UI Templates \u2014 Localization & Components", + "norm_label": "design.md" + }, + { + "label": "\ub514\uc790\uc778 \uc2dc\uc2a4\ud15c (Design System)", + "file_type": "document", + "source_file": "concepts/design.md", + "source_location": "L9", + "_origin": "ast", + "id": "concepts_design_\ub514\uc790\uc778_\uc2dc\uc2a4\ud15c_design_system", + "community": 0, + "community_name": "UI Templates \u2014 Localization & Components", + "norm_label": "\u1103\u1175\u110c\u1161\u110b\u1175\u11ab \u1109\u1175\u1109\u1173\u1110\u1166\u11b7 (design system)" + }, + { + "label": "\ube44\uc8fc\uc5bc \ud14c\ub9c8", + "file_type": "document", + "source_file": "concepts/design.md", + "source_location": "L13", + "_origin": "ast", + "id": "concepts_design_\ube44\uc8fc\uc5bc_\ud14c\ub9c8", + "community": 0, + "community_name": "UI Templates \u2014 Localization & Components", + "norm_label": "\u1107\u1175\u110c\u116e\u110b\u1165\u11af \u1110\u1166\u1106\u1161" + }, + { + "label": "\ud575\uc2ec \uc0c9\uc0c1 \ud1a0\ud070 (Colors)", + "file_type": "document", + "source_file": "concepts/design.md", + "source_location": "L18", + "_origin": "ast", + "id": "concepts_design_\ud575\uc2ec_\uc0c9\uc0c1_\ud1a0\ud070_colors", + "community": 0, + "community_name": "UI Templates \u2014 Localization & Components", + "norm_label": "\u1112\u1162\u11a8\u1109\u1175\u11b7 \u1109\u1162\u11a8\u1109\u1161\u11bc \u1110\u1169\u110f\u1173\u11ab (colors)" + }, + { + "label": "\ud0c0\uc774\ud3ec\uadf8\ub798\ud53c (Typography)", + "file_type": "document", + "source_file": "concepts/design.md", + "source_location": "L30", + "_origin": "ast", + "id": "concepts_design_\ud0c0\uc774\ud3ec\uadf8\ub798\ud53c_typography", + "community": 0, + "community_name": "UI Templates \u2014 Localization & Components", + "norm_label": "\u1110\u1161\u110b\u1175\u1111\u1169\u1100\u1173\u1105\u1162\u1111\u1175 (typography)" + }, + { + "label": "\ub808\uc774\uc544\uc6c3 \ubc0f \ub465\uadfc \ud14c\ub450\ub9ac (Radius & Spacing)", + "file_type": "document", + "source_file": "concepts/design.md", + "source_location": "L44", + "_origin": "ast", + "id": "concepts_design_\ub808\uc774\uc544\uc6c3_\ubc0f_\ub465\uadfc_\ud14c\ub450\ub9ac_radius_spacing", + "community": 0, + "community_name": "UI Templates \u2014 Localization & Components", + "norm_label": "\u1105\u1166\u110b\u1175\u110b\u1161\u110b\u116e\u11ba \u1106\u1175\u11be \u1103\u116e\u11bc\u1100\u1173\u11ab \u1110\u1166\u1103\u116e\u1105\u1175 (radius & spacing)" + }, + { + "label": "\uc804\uc5ed \uc2a4\ud06c\ub864\ubc14 \ub514\uc790\uc778 (Scrollbars)", + "file_type": "document", + "source_file": "concepts/design.md", + "source_location": "L51", + "_origin": "ast", + "id": "concepts_design_\uc804\uc5ed_\uc2a4\ud06c\ub864\ubc14_\ub514\uc790\uc778_scrollbars", + "community": 0, + "community_name": "UI Templates \u2014 Localization & Components", + "norm_label": "\u110c\u1165\u11ab\u110b\u1167\u11a8 \u1109\u1173\u110f\u1173\u1105\u1169\u11af\u1107\u1161 \u1103\u1175\u110c\u1161\u110b\u1175\u11ab (scrollbars)" + }, + { + "label": "design_data_lifecycle.md", + "file_type": "document", + "source_file": "concepts/design_data_lifecycle.md", + "source_location": "L1", + "_origin": "ast", + "id": "concepts_design_data_lifecycle", + "community": 3, + "community_name": "2026-09-04 \uc644\ub8cc \ud56d\ubaa9", + "norm_label": "design_data_lifecycle.md" + }, + { + "label": "\uc124\uacc4 \ub370\uc774\ud130 \uc0dd\uba85\uc8fc\uae30", + "file_type": "document", + "source_file": "concepts/design_data_lifecycle.md", + "source_location": "L9", + "_origin": "ast", + "id": "concepts_design_data_lifecycle_\uc124\uacc4_\ub370\uc774\ud130_\uc0dd\uba85\uc8fc\uae30", + "community": 3, + "community_name": "2026-09-04 \uc644\ub8cc \ud56d\ubaa9", + "norm_label": "\u1109\u1165\u11af\u1100\u1168 \u1103\u1166\u110b\u1175\u1110\u1165 \u1109\u1162\u11bc\u1106\u1167\u11bc\u110c\u116e\u1100\u1175" + }, + { + "label": "\uc815\ubcf8 \uc138 \ubc8c", + "file_type": "document", + "source_file": "concepts/design_data_lifecycle.md", + "source_location": "L11", + "_origin": "ast", + "id": "concepts_design_data_lifecycle_\uc815\ubcf8_\uc138_\ubc8c", + "community": 3, + "community_name": "2026-09-04 \uc644\ub8cc \ud56d\ubaa9", + "norm_label": "\u110c\u1165\u11bc\u1107\u1169\u11ab \u1109\u1166 \u1107\u1165\u11af" + }, + { + "label": "\uacc4\ud68d\ub178\uc120 \uaddc\uce59", + "file_type": "document", + "source_file": "concepts/design_data_lifecycle.md", + "source_location": "L21", + "_origin": "ast", + "id": "concepts_design_data_lifecycle_\uacc4\ud68d\ub178\uc120_\uaddc\uce59", + "community": 3, + "community_name": "2026-09-04 \uc644\ub8cc \ud56d\ubaa9", + "norm_label": "\u1100\u1168\u1112\u116c\u11a8\u1102\u1169\u1109\u1165\u11ab \u1100\u1172\u110e\u1175\u11a8" + }, + { + "label": "\uacc4\uc0b0 \uad6c\ud604 \uc6d0\uce59", + "file_type": "document", + "source_file": "concepts/design_data_lifecycle.md", + "source_location": "L28", + "_origin": "ast", + "id": "concepts_design_data_lifecycle_\uacc4\uc0b0_\uad6c\ud604_\uc6d0\uce59", + "community": 3, + "community_name": "2026-09-04 \uc644\ub8cc \ud56d\ubaa9", + "norm_label": "\u1100\u1168\u1109\u1161\u11ab \u1100\u116e\u1112\u1167\u11ab \u110b\u116f\u11ab\u110e\u1175\u11a8" + }, + { + "label": "drainage_watershed.md", + "file_type": "document", + "source_file": "concepts/drainage_watershed.md", + "source_location": "L1", + "_origin": "ast", + "id": "concepts_drainage_watershed", + "community": 0, + "community_name": "UI Templates \u2014 Localization & Components", + "norm_label": "drainage_watershed.md" + }, + { + "label": "\ubc30\uc218\uc720\uc5ed \ud574\uc11d \ubc0f \uc138\ubd80\uc124\uacc4 (Drainage Watershed)", + "file_type": "document", + "source_file": "concepts/drainage_watershed.md", + "source_location": "L7", + "_origin": "ast", + "id": "concepts_drainage_watershed_\ubc30\uc218\uc720\uc5ed_\ud574\uc11d_\ubc0f_\uc138\ubd80\uc124\uacc4_drainage_watershed", + "community": 0, + "community_name": "UI Templates \u2014 Localization & Components", + "norm_label": "\u1107\u1162\u1109\u116e\u110b\u1172\u110b\u1167\u11a8 \u1112\u1162\u1109\u1165\u11a8 \u1106\u1175\u11be \u1109\u1166\u1107\u116e\u1109\u1165\u11af\u1100\u1168 (drainage watershed)" + }, + { + "label": "1. B04 vs B05 \uc5ed\ud560 \ubd84\ub2f4 \ubc0f \uc77c\uc6d0\ud654", + "file_type": "document", + "source_file": "concepts/drainage_watershed.md", + "source_location": "L13", + "_origin": "ast", + "id": "concepts_drainage_watershed_1_b04_vs_b05_\uc5ed\ud560_\ubd84\ub2f4_\ubc0f_\uc77c\uc6d0\ud654", + "community": 0, + "community_name": "UI Templates \u2014 Localization & Components", + "norm_label": "1. b04 vs b05 \u110b\u1167\u11a8\u1112\u1161\u11af \u1107\u116e\u11ab\u1103\u1161\u11b7 \u1106\u1175\u11be \u110b\u1175\u11af\u110b\u116f\u11ab\u1112\u116a" + }, + { + "label": "2. \uacf5\uc6a9 \ubc30\uc218 \uc5d4\uc9c4 \ubc0f WAMIS \uac15\uc6b0\ub7c9 \uc5f0\ub3d9 (Phase 1~2, 2026-08-13 \uad00\uce21\uc18c \uc804\ud658)", + "file_type": "document", + "source_file": "concepts/drainage_watershed.md", + "source_location": "L22", + "_origin": "ast", + "id": "concepts_drainage_watershed_2_\uacf5\uc6a9_\ubc30\uc218_\uc5d4\uc9c4_\ubc0f_wamis_\uac15\uc6b0\ub7c9_\uc5f0\ub3d9_phase_1_2_2026_08_13_\uad00\uce21\uc18c_\uc804\ud658", + "community": 0, + "community_name": "UI Templates \u2014 Localization & Components", + "norm_label": "2. \u1100\u1169\u11bc\u110b\u116d\u11bc \u1107\u1162\u1109\u116e \u110b\u1166\u11ab\u110c\u1175\u11ab \u1106\u1175\u11be wamis \u1100\u1161\u11bc\u110b\u116e\u1105\u1163\u11bc \u110b\u1167\u11ab\u1103\u1169\u11bc (phase 1~2, 2026-08-13 \u1100\u116a\u11ab\u110e\u1173\u11a8\u1109\u1169 \u110c\u1165\u11ab\u1112\u116a\u11ab)" + }, + { + "label": "3. \uad6c\uc870\ubb3c 3\ub2e8 \uc635\uc158 \uccb4\uacc4 & UI (Phase 3~5)", + "file_type": "document", + "source_file": "concepts/drainage_watershed.md", + "source_location": "L30", + "_origin": "ast", + "id": "concepts_drainage_watershed_3_\uad6c\uc870\ubb3c_3\ub2e8_\uc635\uc158_\uccb4\uacc4_ui_phase_3_5", + "community": 0, + "community_name": "UI Templates \u2014 Localization & Components", + "norm_label": "3. \u1100\u116e\u110c\u1169\u1106\u116e\u11af 3\u1103\u1161\u11ab \u110b\u1169\u11b8\u1109\u1167\u11ab \u110e\u1166\u1100\u1168 & ui (phase 3~5)" + }, + { + "label": "4. \ud574\uc11d \uc54c\uace0\ub9ac\uc998 \u2014 \ub4f1\uace0\uc120 \ud558\uac15 (Contour Descent)", + "file_type": "document", + "source_file": "concepts/drainage_watershed.md", + "source_location": "L36", + "_origin": "ast", + "id": "concepts_drainage_watershed_4_\ud574\uc11d_\uc54c\uace0\ub9ac\uc998_\ub4f1\uace0\uc120_\ud558\uac15_contour_descent", + "community": 0, + "community_name": "UI Templates \u2014 Localization & Components", + "norm_label": "4. \u1112\u1162\u1109\u1165\u11a8 \u110b\u1161\u11af\u1100\u1169\u1105\u1175\u110c\u1173\u11b7 \u2014 \u1103\u1173\u11bc\u1100\u1169\u1109\u1165\u11ab \u1112\u1161\u1100\u1161\u11bc (contour descent)" + }, + { + "label": "5. \uc801\uc0c9/\uccad\uc0c9 \ud310\uc815 \ubc0f \uc720\uc5ed \ud655\uc7a5", + "file_type": "document", + "source_file": "concepts/drainage_watershed.md", + "source_location": "L47", + "_origin": "ast", + "id": "concepts_drainage_watershed_5_\uc801\uc0c9_\uccad\uc0c9_\ud310\uc815_\ubc0f_\uc720\uc5ed_\ud655\uc7a5", + "community": 0, + "community_name": "UI Templates \u2014 Localization & Components", + "norm_label": "5. \u110c\u1165\u11a8\u1109\u1162\u11a8/\u110e\u1165\u11bc\u1109\u1162\u11a8 \u1111\u1161\u11ab\u110c\u1165\u11bc \u1106\u1175\u11be \u110b\u1172\u110b\u1167\u11a8 \u1112\u116a\u11a8\u110c\u1161\u11bc" + }, + { + "label": "6. \ud3c9\uade0 \ud750\ub984 \ud654\uc0b4\ud45c (Flow Arrows) \ubc0f \ud750\ub984\uac15\ub3c4 \ub7a8\ud504", + "file_type": "document", + "source_file": "concepts/drainage_watershed.md", + "source_location": "L56", + "_origin": "ast", + "id": "concepts_drainage_watershed_6_\ud3c9\uade0_\ud750\ub984_\ud654\uc0b4\ud45c_flow_arrows_\ubc0f_\ud750\ub984\uac15\ub3c4_\ub7a8\ud504", + "community": 0, + "community_name": "UI Templates \u2014 Localization & Components", + "norm_label": "6. \u1111\u1167\u11bc\u1100\u1172\u11ab \u1112\u1173\u1105\u1173\u11b7 \u1112\u116a\u1109\u1161\u11af\u1111\u116d (flow arrows) \u1106\u1175\u11be \u1112\u1173\u1105\u1173\u11b7\u1100\u1161\u11bc\u1103\u1169 \u1105\u1162\u11b7\u1111\u1173" + }, + { + "label": "7. \uc601\uad6c\uc800\uc7a5\uc18c \uc0b0\ucd9c\ubb3c \uad6c\uc870", + "file_type": "document", + "source_file": "concepts/drainage_watershed.md", + "source_location": "L60", + "_origin": "ast", + "id": "concepts_drainage_watershed_7_\uc601\uad6c\uc800\uc7a5\uc18c_\uc0b0\ucd9c\ubb3c_\uad6c\uc870", + "community": 0, + "community_name": "UI Templates \u2014 Localization & Components", + "norm_label": "7. \u110b\u1167\u11bc\u1100\u116e\u110c\u1165\u110c\u1161\u11bc\u1109\u1169 \u1109\u1161\u11ab\u110e\u116e\u11af\u1106\u116e\u11af \u1100\u116e\u110c\u1169" + }, + { + "label": "8. B08 \uc218\ub9ac\uc9d1\uc218\uba74\uc801\uc720\uc5ed\ub3c4", + "file_type": "document", + "source_file": "concepts/drainage_watershed.md", + "source_location": "L75", + "_origin": "ast", + "id": "concepts_drainage_watershed_8_b08_\uc218\ub9ac\uc9d1\uc218\uba74\uc801\uc720\uc5ed\ub3c4", + "community": 0, + "community_name": "UI Templates \u2014 Localization & Components", + "norm_label": "8. b08 \u1109\u116e\u1105\u1175\u110c\u1175\u11b8\u1109\u116e\u1106\u1167\u11ab\u110c\u1165\u11a8\u110b\u1172\u110b\u1167\u11a8\u1103\u1169" + }, + { + "label": "las_free_sheet_surface.md", + "file_type": "document", + "source_file": "concepts/las_free_sheet_surface.md", + "source_location": "L1", + "_origin": "ast", + "id": "concepts_las_free_sheet_surface", + "community": 0, + "community_name": "UI Templates \u2014 Localization & Components", + "norm_label": "las_free_sheet_surface.md" + }, + { + "label": "LAS \uc5c6\ub294 \ub3c4\uc5fd\ub4f1\uace0\uc120 \uc11c\ud53c\uc2a4", + "file_type": "document", + "source_file": "concepts/las_free_sheet_surface.md", + "source_location": "L9", + "_origin": "ast", + "id": "concepts_las_free_sheet_surface_las_\uc5c6\ub294_\ub3c4\uc5fd\ub4f1\uace0\uc120_\uc11c\ud53c\uc2a4", + "community": 0, + "community_name": "UI Templates \u2014 Localization & Components", + "norm_label": "las \u110b\u1165\u11b9\u1102\u1173\u11ab \u1103\u1169\u110b\u1167\u11b8\u1103\u1173\u11bc\u1100\u1169\u1109\u1165\u11ab \u1109\u1165\u1111\u1175\u1109\u1173" + }, + { + "label": "\uacc4\uc57d\uacfc \ud655\uc815\uac12", + "file_type": "document", + "source_file": "concepts/las_free_sheet_surface.md", + "source_location": "L11", + "_origin": "ast", + "id": "concepts_las_free_sheet_surface_\uacc4\uc57d\uacfc_\ud655\uc815\uac12", + "community": 0, + "community_name": "UI Templates \u2014 Localization & Components", + "norm_label": "\u1100\u1168\u110b\u1163\u11a8\u1100\u116a \u1112\u116a\u11a8\u110c\u1165\u11bc\u1100\u1161\u11b9" + }, + { + "label": "\ud750\ub984", + "file_type": "document", + "source_file": "concepts/las_free_sheet_surface.md", + "source_location": "L22", + "_origin": "ast", + "id": "concepts_las_free_sheet_surface_\ud750\ub984", + "community": 0, + "community_name": "UI Templates \u2014 Localization & Components", + "norm_label": "\u1112\u1173\u1105\u1173\u11b7" + }, + { + "label": "E2E \uacb0\uacfc", + "file_type": "document", + "source_file": "concepts/las_free_sheet_surface.md", + "source_location": "L33", + "_origin": "ast", + "id": "concepts_las_free_sheet_surface_e2e_\uacb0\uacfc", + "community": 0, + "community_name": "UI Templates \u2014 Localization & Components", + "norm_label": "e2e \u1100\u1167\u11af\u1100\u116a" + }, + { + "label": "\ubbf8\uacb0", + "file_type": "document", + "source_file": "concepts/las_free_sheet_surface.md", + "source_location": "L40", + "_origin": "ast", + "id": "concepts_las_free_sheet_surface_\ubbf8\uacb0", + "community": 0, + "community_name": "UI Templates \u2014 Localization & Components", + "norm_label": "\u1106\u1175\u1100\u1167\u11af" + }, + { + "label": "law_source_quality.md", + "file_type": "document", + "source_file": "concepts/law_source_quality.md", + "source_location": "L1", + "_origin": "ast", + "id": "concepts_law_source_quality", + "community": 46, + "community_name": "\uc784\ub3c4\uae30\uc220\uad50\ubcf8 \uc6d0\ubb38 md \ucd94\ucd9c \ud488\uc9c8 \uacb0\ud568", + "norm_label": "law_source_quality.md" + }, + { + "label": "\uc784\ub3c4\uae30\uc220\uad50\ubcf8 \uc6d0\ubb38 md \ucd94\ucd9c \ud488\uc9c8 \uacb0\ud568", + "file_type": "document", + "source_file": "concepts/law_source_quality.md", + "source_location": "L9", + "_origin": "ast", + "id": "concepts_law_source_quality_\uc784\ub3c4\uae30\uc220\uad50\ubcf8_\uc6d0\ubb38_md_\ucd94\ucd9c_\ud488\uc9c8_\uacb0\ud568", + "community": 46, + "community_name": "\uc784\ub3c4\uae30\uc220\uad50\ubcf8 \uc6d0\ubb38 md \ucd94\ucd9c \ud488\uc9c8 \uacb0\ud568", + "norm_label": "\u110b\u1175\u11b7\u1103\u1169\u1100\u1175\u1109\u116e\u11af\u1100\u116d\u1107\u1169\u11ab \u110b\u116f\u11ab\u1106\u116e\u11ab md \u110e\u116e\u110e\u116e\u11af \u1111\u116e\u11b7\u110c\u1175\u11af \u1100\u1167\u11af\u1112\u1161\u11b7" + }, + { + "label": "\ud655\uc778 \ubc94\uc704", + "file_type": "document", + "source_file": "concepts/law_source_quality.md", + "source_location": "L13", + "_origin": "ast", + "id": "concepts_law_source_quality_\ud655\uc778_\ubc94\uc704", + "community": 46, + "community_name": "\uc784\ub3c4\uae30\uc220\uad50\ubcf8 \uc6d0\ubb38 md \ucd94\ucd9c \ud488\uc9c8 \uacb0\ud568", + "norm_label": "\u1112\u116a\u11a8\u110b\u1175\u11ab \u1107\u1165\u11b7\u110b\u1171" + }, + { + "label": "\uacb0\ud568 \uc720\ud615 (\uc608\uc2dc = \uc704 \ud30c\uc77c \uae30\uc900 \uc904\ubc88\ud638)", + "file_type": "document", + "source_file": "concepts/law_source_quality.md", + "source_location": "L16", + "_origin": "ast", + "id": "concepts_law_source_quality_\uacb0\ud568_\uc720\ud615_\uc608\uc2dc_\uc704_\ud30c\uc77c_\uae30\uc900_\uc904\ubc88\ud638", + "community": 46, + "community_name": "\uc784\ub3c4\uae30\uc220\uad50\ubcf8 \uc6d0\ubb38 md \ucd94\ucd9c \ud488\uc9c8 \uacb0\ud568", + "norm_label": "\u1100\u1167\u11af\u1112\u1161\u11b7 \u110b\u1172\u1112\u1167\u11bc (\u110b\u1168\u1109\u1175 = \u110b\u1171 \u1111\u1161\u110b\u1175\u11af \u1100\u1175\u110c\u116e\u11ab \u110c\u116e\u11af\u1107\u1165\u11ab\u1112\u1169)" + }, + { + "label": "\uc6d0\uc778 \ucd94\uc815", + "file_type": "document", + "source_file": "concepts/law_source_quality.md", + "source_location": "L34", + "_origin": "ast", + "id": "concepts_law_source_quality_\uc6d0\uc778_\ucd94\uc815", + "community": 46, + "community_name": "\uc784\ub3c4\uae30\uc220\uad50\ubcf8 \uc6d0\ubb38 md \ucd94\ucd9c \ud488\uc9c8 \uacb0\ud568", + "norm_label": "\u110b\u116f\u11ab\u110b\u1175\u11ab \u110e\u116e\u110c\u1165\u11bc" + }, + { + "label": "\uc870\uce58 \uc0c1\ud0dc", + "file_type": "document", + "source_file": "concepts/law_source_quality.md", + "source_location": "L37", + "_origin": "ast", + "id": "concepts_law_source_quality_\uc870\uce58_\uc0c1\ud0dc", + "community": 46, + "community_name": "\uc784\ub3c4\uae30\uc220\uad50\ubcf8 \uc6d0\ubb38 md \ucd94\ucd9c \ud488\uc9c8 \uacb0\ud568", + "norm_label": "\u110c\u1169\u110e\u1175 \u1109\u1161\u11bc\u1110\u1162" + }, + { + "label": "mass_haul_diagram.md", + "file_type": "document", + "source_file": "concepts/mass_haul_diagram.md", + "source_location": "L1", + "_origin": "ast", + "id": "concepts_mass_haul_diagram", + "community": 26, + "community_name": "\uc720\ud1a0\uace1\uc120 (Mass Haul Diagram) \uacc4\uc0b0 \uba85\uc138", + "norm_label": "mass_haul_diagram.md" + }, + { + "label": "\uc720\ud1a0\uace1\uc120 (Mass Haul Diagram) \uacc4\uc0b0 \uba85\uc138", + "file_type": "document", + "source_file": "concepts/mass_haul_diagram.md", + "source_location": "L9", + "_origin": "ast", + "id": "concepts_mass_haul_diagram_\uc720\ud1a0\uace1\uc120_mass_haul_diagram_\uacc4\uc0b0_\uba85\uc138", + "community": 26, + "community_name": "\uc720\ud1a0\uace1\uc120 (Mass Haul Diagram) \uacc4\uc0b0 \uba85\uc138", + "norm_label": "\u110b\u1172\u1110\u1169\u1100\u1169\u11a8\u1109\u1165\u11ab (mass haul diagram) \u1100\u1168\u1109\u1161\u11ab \u1106\u1167\u11bc\u1109\u1166" + }, + { + "label": "1. \uac1c\uc694 \ubc0f \ubd84\uc11d \ubaa9\uc801", + "file_type": "document", + "source_file": "concepts/mass_haul_diagram.md", + "source_location": "L11", + "_origin": "ast", + "id": "concepts_mass_haul_diagram_1_\uac1c\uc694_\ubc0f_\ubd84\uc11d_\ubaa9\uc801", + "community": 26, + "community_name": "\uc720\ud1a0\uace1\uc120 (Mass Haul Diagram) \uacc4\uc0b0 \uba85\uc138", + "norm_label": "1. \u1100\u1162\u110b\u116d \u1106\u1175\u11be \u1107\u116e\u11ab\u1109\u1165\u11a8 \u1106\u1169\u11a8\u110c\u1165\u11a8" + }, + { + "label": "2. \uc8fc\uc694 \uacc4\uc0b0 \uc218\uc2dd \ubc0f \uc6d0\ub9ac (\uc2e4\ubb34 \uad00\ub840 \ubc18\uc601)", + "file_type": "document", + "source_file": "concepts/mass_haul_diagram.md", + "source_location": "L18", + "_origin": "ast", + "id": "concepts_mass_haul_diagram_2_\uc8fc\uc694_\uacc4\uc0b0_\uc218\uc2dd_\ubc0f_\uc6d0\ub9ac_\uc2e4\ubb34_\uad00\ub840_\ubc18\uc601", + "community": 26, + "community_name": "\uc720\ud1a0\uace1\uc120 (Mass Haul Diagram) \uacc4\uc0b0 \uba85\uc138", + "norm_label": "2. \u110c\u116e\u110b\u116d \u1100\u1168\u1109\u1161\u11ab \u1109\u116e\u1109\u1175\u11a8 \u1106\u1175\u11be \u110b\u116f\u11ab\u1105\u1175 (\u1109\u1175\u11af\u1106\u116e \u1100\u116a\u11ab\u1105\u1168 \u1107\u1161\u11ab\u110b\u1167\u11bc)" + }, + { + "label": "3. \uc9c0\ubc18\uc720\ud615\ubcc4 \ud1a0\ub7c9\ud658\uc0b0\uacc4\uc218 \uae30\ubcf8\uac12 (`config_system.py`)", + "file_type": "document", + "source_file": "concepts/mass_haul_diagram.md", + "source_location": "L34", + "_origin": "ast", + "id": "concepts_mass_haul_diagram_3_\uc9c0\ubc18\uc720\ud615\ubcc4_\ud1a0\ub7c9\ud658\uc0b0\uacc4\uc218_\uae30\ubcf8\uac12_config_system_py", + "community": 26, + "community_name": "\uc720\ud1a0\uace1\uc120 (Mass Haul Diagram) \uacc4\uc0b0 \uba85\uc138", + "norm_label": "3. \u110c\u1175\u1107\u1161\u11ab\u110b\u1172\u1112\u1167\u11bc\u1107\u1167\u11af \u1110\u1169\u1105\u1163\u11bc\u1112\u116a\u11ab\u1109\u1161\u11ab\u1100\u1168\u1109\u116e \u1100\u1175\u1107\u1169\u11ab\u1100\u1161\u11b9 (`config_system.py`)" + }, + { + "label": "4. \ud1a0\uacf5 \uc6b4\ubc18\uc7a5\ube44 \uc120\uc815\uac70\ub9ac \ubc0f \ubd84\ubc30 \uae30\uc900 (`config_system.py`)", + "file_type": "document", + "source_file": "concepts/mass_haul_diagram.md", + "source_location": "L43", + "_origin": "ast", + "id": "concepts_mass_haul_diagram_4_\ud1a0\uacf5_\uc6b4\ubc18\uc7a5\ube44_\uc120\uc815\uac70\ub9ac_\ubc0f_\ubd84\ubc30_\uae30\uc900_config_system_py", + "community": 26, + "community_name": "\uc720\ud1a0\uace1\uc120 (Mass Haul Diagram) \uacc4\uc0b0 \uba85\uc138", + "norm_label": "4. \u1110\u1169\u1100\u1169\u11bc \u110b\u116e\u11ab\u1107\u1161\u11ab\u110c\u1161\u11bc\u1107\u1175 \u1109\u1165\u11ab\u110c\u1165\u11bc\u1100\u1165\u1105\u1175 \u1106\u1175\u11be \u1107\u116e\u11ab\u1107\u1162 \u1100\u1175\u110c\u116e\u11ab (`config_system.py`)" + }, + { + "label": "5. \uc720\ud1a0\uace1\uc120 \uace1\uc120 \uc0ac\uc591 (B06 \uad6c\ud604 v2)", + "file_type": "document", + "source_file": "concepts/mass_haul_diagram.md", + "source_location": "L50", + "_origin": "ast", + "id": "concepts_mass_haul_diagram_5_\uc720\ud1a0\uace1\uc120_\uace1\uc120_\uc0ac\uc591_b06_\uad6c\ud604_v2", + "community": 26, + "community_name": "\uc720\ud1a0\uace1\uc120 (Mass Haul Diagram) \uacc4\uc0b0 \uba85\uc138", + "norm_label": "5. \u110b\u1172\u1110\u1169\u1100\u1169\u11a8\u1109\u1165\u11ab \u1100\u1169\u11a8\u1109\u1165\u11ab \u1109\u1161\u110b\u1163\u11bc (b06 \u1100\u116e\u1112\u1167\u11ab v2)" + }, + { + "label": "6. \uc6f9\uc571 \uc5f0\ub3d9 \ubc0f \uc2dc\uac01\ud654 \uba85\uc138 (2026-08-02 \ud655\uc815)", + "file_type": "document", + "source_file": "concepts/mass_haul_diagram.md", + "source_location": "L58", + "_origin": "ast", + "id": "concepts_mass_haul_diagram_6_\uc6f9\uc571_\uc5f0\ub3d9_\ubc0f_\uc2dc\uac01\ud654_\uba85\uc138_2026_08_02_\ud655\uc815", + "community": 26, + "community_name": "\uc720\ud1a0\uace1\uc120 (Mass Haul Diagram) \uacc4\uc0b0 \uba85\uc138", + "norm_label": "6. \u110b\u1170\u11b8\u110b\u1162\u11b8 \u110b\u1167\u11ab\u1103\u1169\u11bc \u1106\u1175\u11be \u1109\u1175\u1100\u1161\u11a8\u1112\u116a \u1106\u1167\u11bc\u1109\u1166 (2026-08-02 \u1112\u116a\u11a8\u110c\u1165\u11bc)" + }, + { + "label": "multi_environment_safety.md", + "file_type": "document", + "source_file": "concepts/multi_environment_safety.md", + "source_location": "L1", + "_origin": "ast", + "id": "concepts_multi_environment_safety", + "community": 3, + "community_name": "2026-09-04 \uc644\ub8cc \ud56d\ubaa9", + "norm_label": "multi_environment_safety.md" + }, + { + "label": "\ub2e4\uc911 \ud658\uacbd \uc800\uc7a5\uc18c\u00b7\uacf5\uc6a9 DB \uc548\uc804", + "file_type": "document", + "source_file": "concepts/multi_environment_safety.md", + "source_location": "L9", + "_origin": "ast", + "id": "concepts_multi_environment_safety_\ub2e4\uc911_\ud658\uacbd_\uc800\uc7a5\uc18c_\uacf5\uc6a9_db_\uc548\uc804", + "community": 3, + "community_name": "2026-09-04 \uc644\ub8cc \ud56d\ubaa9", + "norm_label": "\u1103\u1161\u110c\u116e\u11bc \u1112\u116a\u11ab\u1100\u1167\u11bc \u110c\u1165\u110c\u1161\u11bc\u1109\u1169\u00b7\u1100\u1169\u11bc\u110b\u116d\u11bc db \u110b\u1161\u11ab\u110c\u1165\u11ab" + }, + { + "label": "\ud655\uc778\ub41c \uc704\ud5d8", + "file_type": "document", + "source_file": "concepts/multi_environment_safety.md", + "source_location": "L11", + "_origin": "ast", + "id": "concepts_multi_environment_safety_\ud655\uc778\ub41c_\uc704\ud5d8", + "community": 3, + "community_name": "2026-09-04 \uc644\ub8cc \ud56d\ubaa9", + "norm_label": "\u1112\u116a\u11a8\u110b\u1175\u11ab\u1103\u116c\u11ab \u110b\u1171\u1112\u1165\u11b7" + }, + { + "label": "\uc6b4\uc601 \uaddc\uce59", + "file_type": "document", + "source_file": "concepts/multi_environment_safety.md", + "source_location": "L18", + "_origin": "ast", + "id": "concepts_multi_environment_safety_\uc6b4\uc601_\uaddc\uce59", + "community": 3, + "community_name": "2026-09-04 \uc644\ub8cc \ud56d\ubaa9", + "norm_label": "\u110b\u116e\u11ab\u110b\u1167\u11bc \u1100\u1172\u110e\u1175\u11a8" + }, + { + "label": "\uc5ec\uc12f \uc6cc\ud06c\ud2b8\ub9ac \uc6b4\uc601 \ud655\uc815\ud310", + "file_type": "document", + "source_file": "concepts/multi_environment_safety.md", + "source_location": "L29", + "_origin": "ast", + "id": "concepts_multi_environment_safety_\uc5ec\uc12f_\uc6cc\ud06c\ud2b8\ub9ac_\uc6b4\uc601_\ud655\uc815\ud310", + "community": 3, + "community_name": "2026-09-04 \uc644\ub8cc \ud56d\ubaa9", + "norm_label": "\u110b\u1167\u1109\u1165\u11ba \u110b\u116f\u110f\u1173\u1110\u1173\u1105\u1175 \u110b\u116e\u11ab\u110b\u1167\u11bc \u1112\u116a\u11a8\u110c\u1165\u11bc\u1111\u1161\u11ab" + }, + { + "label": "\uc644\ub8cc \ud310\uc815", + "file_type": "document", + "source_file": "concepts/multi_environment_safety.md", + "source_location": "L43", + "_origin": "ast", + "id": "concepts_multi_environment_safety_\uc644\ub8cc_\ud310\uc815", + "community": 3, + "community_name": "2026-09-04 \uc644\ub8cc \ud56d\ubaa9", + "norm_label": "\u110b\u116a\u11ab\u1105\u116d \u1111\u1161\u11ab\u110c\u1165\u11bc" + }, + { + "label": "\uc7ac\uacc4\uc0b0 \uc601\ud5a5", + "file_type": "document", + "source_file": "concepts/multi_environment_safety.md", + "source_location": "L49", + "_origin": "ast", + "id": "concepts_multi_environment_safety_\uc7ac\uacc4\uc0b0_\uc601\ud5a5", + "community": 3, + "community_name": "2026-09-04 \uc644\ub8cc \ud56d\ubaa9", + "norm_label": "\u110c\u1162\u1100\u1168\u1109\u1161\u11ab \u110b\u1167\u11bc\u1112\u1163\u11bc" + }, + { + "label": "quantity_cost_contract.md", + "file_type": "document", + "source_file": "concepts/quantity_cost_contract.md", + "source_location": "L1", + "_origin": "ast", + "id": "concepts_quantity_cost_contract", + "community": 46, + "community_name": "\uc784\ub3c4\uae30\uc220\uad50\ubcf8 \uc6d0\ubb38 md \ucd94\ucd9c \ud488\uc9c8 \uacb0\ud568", + "norm_label": "quantity_cost_contract.md" + }, + { + "label": "B08 \uc218\ub7c9 \u2194 B09 \uc6d0\uac00 \uacc4\uc57d", + "file_type": "document", + "source_file": "concepts/quantity_cost_contract.md", + "source_location": "L9", + "_origin": "ast", + "id": "concepts_quantity_cost_contract_b08_\uc218\ub7c9_b09_\uc6d0\uac00_\uacc4\uc57d", + "community": 46, + "community_name": "\uc784\ub3c4\uae30\uc220\uad50\ubcf8 \uc6d0\ubb38 md \ucd94\ucd9c \ud488\uc9c8 \uacb0\ud568", + "norm_label": "b08 \u1109\u116e\u1105\u1163\u11bc \u2194 b09 \u110b\u116f\u11ab\u1100\u1161 \u1100\u1168\u110b\u1163\u11a8" + }, + { + "label": "\ucc45\uc784 \uacbd\uacc4", + "file_type": "document", + "source_file": "concepts/quantity_cost_contract.md", + "source_location": "L11", + "_origin": "ast", + "id": "concepts_quantity_cost_contract_\ucc45\uc784_\uacbd\uacc4", + "community": 46, + "community_name": "\uc784\ub3c4\uae30\uc220\uad50\ubcf8 \uc6d0\ubb38 md \ucd94\ucd9c \ud488\uc9c8 \uacb0\ud568", + "norm_label": "\u110e\u1162\u11a8\u110b\u1175\u11b7 \u1100\u1167\u11bc\u1100\u1168" + }, + { + "label": "\uc800\uc7a5\u00b7\uc778\uacc4 \uaddc\uce59", + "file_type": "document", + "source_file": "concepts/quantity_cost_contract.md", + "source_location": "L21", + "_origin": "ast", + "id": "concepts_quantity_cost_contract_\uc800\uc7a5_\uc778\uacc4_\uaddc\uce59", + "community": 46, + "community_name": "\uc784\ub3c4\uae30\uc220\uad50\ubcf8 \uc6d0\ubb38 md \ucd94\ucd9c \ud488\uc9c8 \uacb0\ud568", + "norm_label": "\u110c\u1165\u110c\u1161\u11bc\u00b7\u110b\u1175\u11ab\u1100\u1168 \u1100\u1172\u110e\u1175\u11a8" + }, + { + "label": "\uae08\uc9c0 \uaddc\uce59", + "file_type": "document", + "source_file": "concepts/quantity_cost_contract.md", + "source_location": "L32", + "_origin": "ast", + "id": "concepts_quantity_cost_contract_\uae08\uc9c0_\uaddc\uce59", + "community": 46, + "community_name": "\uc784\ub3c4\uae30\uc220\uad50\ubcf8 \uc6d0\ubb38 md \ucd94\ucd9c \ud488\uc9c8 \uacb0\ud568", + "norm_label": "\u1100\u1173\u11b7\u110c\u1175 \u1100\u1172\u110e\u1175\u11a8" + }, + { + "label": "schema_common.md", + "file_type": "document", + "source_file": "concepts/schema_common.md", + "source_location": "L1", + "_origin": "ast", + "id": "concepts_schema_common", + "community": 3, + "community_name": "2026-09-04 \uc644\ub8cc \ud56d\ubaa9", + "norm_label": "schema_common.md" + }, + { + "label": "\uacf5\ud1b5 \uc2a4\ud0a4\ub9c8 (Pydantic \uc694\uccad/\uc751\ub2f5 \uaddc\uce59)", + "file_type": "document", + "source_file": "concepts/schema_common.md", + "source_location": "L9", + "_origin": "ast", + "id": "concepts_schema_common_\uacf5\ud1b5_\uc2a4\ud0a4\ub9c8_pydantic_\uc694\uccad_\uc751\ub2f5_\uaddc\uce59", + "community": 3, + "community_name": "2026-09-04 \uc644\ub8cc \ud56d\ubaa9", + "norm_label": "\u1100\u1169\u11bc\u1110\u1169\u11bc \u1109\u1173\u110f\u1175\u1106\u1161 (pydantic \u110b\u116d\u110e\u1165\u11bc/\u110b\u1173\u11bc\u1103\u1161\u11b8 \u1100\u1172\u110e\u1175\u11a8)" + }, + { + "label": "\uac80\uc99d \uc6d0\uce59 (backend.md 4\uc808)", + "file_type": "document", + "source_file": "concepts/schema_common.md", + "source_location": "L11", + "_origin": "ast", + "id": "concepts_schema_common_\uac80\uc99d_\uc6d0\uce59_backend_md_4\uc808", + "community": 3, + "community_name": "2026-09-04 \uc644\ub8cc \ud56d\ubaa9", + "norm_label": "\u1100\u1165\u11b7\u110c\u1173\u11bc \u110b\u116f\u11ab\u110e\u1175\u11a8 (backend.md 4\u110c\u1165\u11af)" + }, + { + "label": "\uba85\uba85 \uaddc\uce59", + "file_type": "document", + "source_file": "concepts/schema_common.md", + "source_location": "L16", + "_origin": "ast", + "id": "concepts_schema_common_\uba85\uba85_\uaddc\uce59", + "community": 3, + "community_name": "2026-09-04 \uc644\ub8cc \ud56d\ubaa9", + "norm_label": "\u1106\u1167\u11bc\u1106\u1167\u11bc \u1100\u1172\u110e\u1175\u11a8" + }, + { + "label": "standard_drawing_cost_inputs.md", + "file_type": "document", + "source_file": "concepts/standard_drawing_cost_inputs.md", + "source_location": "L1", + "_origin": "ast", + "id": "concepts_standard_drawing_cost_inputs", + "community": 46, + "community_name": "\uc784\ub3c4\uae30\uc220\uad50\ubcf8 \uc6d0\ubb38 md \ucd94\ucd9c \ud488\uc9c8 \uacb0\ud568", + "norm_label": "standard_drawing_cost_inputs.md" + }, + { + "label": "\ud45c\uc900\ub3c4\u00b7\uc218\ub7c9\u00b7\uc6d0\uac00 \uc785\ub825\uc758 \ubbf8\uacb0 \uacbd\uacc4", + "file_type": "document", + "source_file": "concepts/standard_drawing_cost_inputs.md", + "source_location": "L9", + "_origin": "ast", + "id": "concepts_standard_drawing_cost_inputs_\ud45c\uc900\ub3c4_\uc218\ub7c9_\uc6d0\uac00_\uc785\ub825\uc758_\ubbf8\uacb0_\uacbd\uacc4", + "community": 46, + "community_name": "\uc784\ub3c4\uae30\uc220\uad50\ubcf8 \uc6d0\ubb38 md \ucd94\ucd9c \ud488\uc9c8 \uacb0\ud568", + "norm_label": "\u1111\u116d\u110c\u116e\u11ab\u1103\u1169\u00b7\u1109\u116e\u1105\u1163\u11bc\u00b7\u110b\u116f\u11ab\u1100\u1161 \u110b\u1175\u11b8\u1105\u1167\u11a8\u110b\u1174 \u1106\u1175\u1100\u1167\u11af \u1100\u1167\u11bc\u1100\u1168" + }, + { + "label": "\ud655\uc778\ub41c \ubd84\ub958", + "file_type": "document", + "source_file": "concepts/standard_drawing_cost_inputs.md", + "source_location": "L11", + "_origin": "ast", + "id": "concepts_standard_drawing_cost_inputs_\ud655\uc778\ub41c_\ubd84\ub958", + "community": 46, + "community_name": "\uc784\ub3c4\uae30\uc220\uad50\ubcf8 \uc6d0\ubb38 md \ucd94\ucd9c \ud488\uc9c8 \uacb0\ud568", + "norm_label": "\u1112\u116a\u11a8\u110b\u1175\u11ab\u1103\u116c\u11ab \u1107\u116e\u11ab\u1105\u1172" + }, + { + "label": "\uc7ac\uc870\uc0ac\ub85c \ubc14\ub010 \ud310\uc815", + "file_type": "document", + "source_file": "concepts/standard_drawing_cost_inputs.md", + "source_location": "L20", + "_origin": "ast", + "id": "concepts_standard_drawing_cost_inputs_\uc7ac\uc870\uc0ac\ub85c_\ubc14\ub010_\ud310\uc815", + "community": 46, + "community_name": "\uc784\ub3c4\uae30\uc220\uad50\ubcf8 \uc6d0\ubb38 md \ucd94\ucd9c \ud488\uc9c8 \uacb0\ud568", + "norm_label": "\u110c\u1162\u110c\u1169\u1109\u1161\u1105\u1169 \u1107\u1161\u1101\u1171\u11ab \u1111\u1161\u11ab\u110c\u1165\u11bc" + }, + { + "label": "\uc0ac\uc6a9\uc790\u00b7\uc790\ub8cc \ub300\uae30", + "file_type": "document", + "source_file": "concepts/standard_drawing_cost_inputs.md", + "source_location": "L29", + "_origin": "ast", + "id": "concepts_standard_drawing_cost_inputs_\uc0ac\uc6a9\uc790_\uc790\ub8cc_\ub300\uae30", + "community": 46, + "community_name": "\uc784\ub3c4\uae30\uc220\uad50\ubcf8 \uc6d0\ubb38 md \ucd94\ucd9c \ud488\uc9c8 \uacb0\ud568", + "norm_label": "\u1109\u1161\u110b\u116d\u11bc\u110c\u1161\u00b7\u110c\u1161\u1105\u116d \u1103\u1162\u1100\u1175" + }, + { + "label": "standard_quantity_open_2026-09-09.md", + "file_type": "document", + "source_file": "concepts/standard_quantity_open_2026-09-09.md", + "source_location": "L1", + "_origin": "ast", + "id": "concepts_standard_quantity_open_2026_09_09", + "community": 46, + "community_name": "\uc784\ub3c4\uae30\uc220\uad50\ubcf8 \uc6d0\ubb38 md \ucd94\ucd9c \ud488\uc9c8 \uacb0\ud568", + "norm_label": "standard_quantity_open_2026-09-09.md" + }, + { + "label": "2026-09-09 \ud45c\uc900\ub3c4\u00b7\uc218\ub7c9 \ubbf8\uacb0 \uadfc\uac70", + "file_type": "document", + "source_file": "concepts/standard_quantity_open_2026-09-09.md", + "source_location": "L9", + "_origin": "ast", + "id": "concepts_standard_quantity_open_2026_09_09_2026_09_09_\ud45c\uc900\ub3c4_\uc218\ub7c9_\ubbf8\uacb0_\uadfc\uac70", + "community": 46, + "community_name": "\uc784\ub3c4\uae30\uc220\uad50\ubcf8 \uc6d0\ubb38 md \ucd94\ucd9c \ud488\uc9c8 \uacb0\ud568", + "norm_label": "2026-09-09 \u1111\u116d\u110c\u116e\u11ab\u1103\u1169\u00b7\u1109\u116e\u1105\u1163\u11bc \u1106\u1175\u1100\u1167\u11af \u1100\u1173\u11ab\u1100\u1165" + }, + { + "label": "\uc801\uc6a9 \uc6d0\uce59", + "file_type": "document", + "source_file": "concepts/standard_quantity_open_2026-09-09.md", + "source_location": "L11", + "_origin": "ast", + "id": "concepts_standard_quantity_open_2026_09_09_\uc801\uc6a9_\uc6d0\uce59", + "community": 46, + "community_name": "\uc784\ub3c4\uae30\uc220\uad50\ubcf8 \uc6d0\ubb38 md \ucd94\ucd9c \ud488\uc9c8 \uacb0\ud568", + "norm_label": "\u110c\u1165\u11a8\u110b\u116d\u11bc \u110b\u116f\u11ab\u110e\u1175\u11a8" + }, + { + "label": "\uc8fc\uc694 \ubbf8\uacb0", + "file_type": "document", + "source_file": "concepts/standard_quantity_open_2026-09-09.md", + "source_location": "L17", + "_origin": "ast", + "id": "concepts_standard_quantity_open_2026_09_09_\uc8fc\uc694_\ubbf8\uacb0", + "community": 46, + "community_name": "\uc784\ub3c4\uae30\uc220\uad50\ubcf8 \uc6d0\ubb38 md \ucd94\ucd9c \ud488\uc9c8 \uacb0\ud568", + "norm_label": "\u110c\u116e\u110b\u116d \u1106\u1175\u1100\u1167\u11af" + }, + { + "label": "\uc5f0\uacb0", + "file_type": "document", + "source_file": "concepts/standard_quantity_open_2026-09-09.md", + "source_location": "L29", + "_origin": "ast", + "id": "concepts_standard_quantity_open_2026_09_09_\uc5f0\uacb0", + "community": 46, + "community_name": "\uc784\ub3c4\uae30\uc220\uad50\ubcf8 \uc6d0\ubb38 md \ucd94\ucd9c \ud488\uc9c8 \uacb0\ud568", + "norm_label": "\u110b\u1167\u11ab\u1100\u1167\u11af" + }, + { + "label": "storage_paths.md", + "file_type": "document", + "source_file": "concepts/storage_paths.md", + "source_location": "L1", + "_origin": "ast", + "id": "concepts_storage_paths", + "community": 1, + "community_name": "\uc778\uc99d / RBAC", + "norm_label": "storage_paths.md" + }, + { + "label": "\uc800\uc7a5 \uacbd\ub85c \uaddc\uce59 (Workflow-based Folder Structure)", + "file_type": "document", + "source_file": "concepts/storage_paths.md", + "source_location": "L9", + "_origin": "ast", + "id": "concepts_storage_paths_\uc800\uc7a5_\uacbd\ub85c_\uaddc\uce59_workflow_based_folder_structure", + "community": 1, + "community_name": "\uc778\uc99d / RBAC", + "norm_label": "\u110c\u1165\u110c\u1161\u11bc \u1100\u1167\u11bc\u1105\u1169 \u1100\u1172\u110e\u1175\u11a8 (workflow-based folder structure)" + }, + { + "label": "\uacbd\ub85c \ud328\ud134", + "file_type": "document", + "source_file": "concepts/storage_paths.md", + "source_location": "L11", + "_origin": "ast", + "id": "concepts_storage_paths_\uacbd\ub85c_\ud328\ud134", + "community": 1, + "community_name": "\uc778\uc99d / RBAC", + "norm_label": "\u1100\u1167\u11bc\u1105\u1169 \u1111\u1162\u1110\u1165\u11ab" + }, + { + "label": "\uc6d0\uce59 (backend.md 3\uc808)", + "file_type": "document", + "source_file": "concepts/storage_paths.md", + "source_location": "L29", + "_origin": "ast", + "id": "concepts_storage_paths_\uc6d0\uce59_backend_md_3\uc808", + "community": 1, + "community_name": "\uc778\uc99d / RBAC", + "norm_label": "\u110b\u116f\u11ab\u110e\u1175\u11a8 (backend.md 3\u110c\u1165\u11af)" + }, + { + "label": "DB \uceec\ub7fc \u2194 \uc2e4\uc81c \uacbd\ub85c \ub9e4\ud551", + "file_type": "document", + "source_file": "concepts/storage_paths.md", + "source_location": "L36", + "_origin": "ast", + "id": "concepts_storage_paths_db_\uceec\ub7fc_\uc2e4\uc81c_\uacbd\ub85c_\ub9e4\ud551", + "community": 1, + "community_name": "\uc778\uc99d / RBAC", + "norm_label": "db \u110f\u1165\u11af\u1105\u1165\u11b7 \u2194 \u1109\u1175\u11af\u110c\u1166 \u1100\u1167\u11bc\u1105\u1169 \u1106\u1162\u1111\u1175\u11bc" + }, + { + "label": "\ud30c\uc77c\uba85 \uaddc\uce59 (structure.md 1\uc808)", + "file_type": "document", + "source_file": "concepts/storage_paths.md", + "source_location": "L39", + "_origin": "ast", + "id": "concepts_storage_paths_\ud30c\uc77c\uba85_\uaddc\uce59_structure_md_1\uc808", + "community": 1, + "community_name": "\uc778\uc99d / RBAC", + "norm_label": "\u1111\u1161\u110b\u1175\u11af\u1106\u1167\u11bc \u1100\u1172\u110e\u1175\u11a8 (structure.md 1\u110c\u1165\u11af)" + }, + { + "label": "\ucf54\ub4dc \uac10\uc0ac \uc8fc\uc758\uc0ac\ud56d", + "file_type": "document", + "source_file": "concepts/storage_paths.md", + "source_location": "L44", + "_origin": "ast", + "id": "concepts_storage_paths_\ucf54\ub4dc_\uac10\uc0ac_\uc8fc\uc758\uc0ac\ud56d", + "community": 1, + "community_name": "\uc778\uc99d / RBAC", + "norm_label": "\u110f\u1169\u1103\u1173 \u1100\u1161\u11b7\u1109\u1161 \u110c\u116e\u110b\u1174\u1109\u1161\u1112\u1161\u11bc" + }, + { + "label": "temp_upload.md", + "file_type": "document", + "source_file": "concepts/temp_upload.md", + "source_location": "L1", + "_origin": "ast", + "id": "concepts_temp_upload", + "community": 59, + "community_name": "Temp Upload (\ud504\ub85c\uc81d\ud2b8 \uc0dd\uc131 \uc804 \uc784\uc2dc \ubcf4\uad00\ud568)", + "norm_label": "temp_upload.md" + }, + { + "label": "Temp Upload (\ud504\ub85c\uc81d\ud2b8 \uc0dd\uc131 \uc804 \uc784\uc2dc \ubcf4\uad00\ud568)", + "file_type": "document", + "source_file": "concepts/temp_upload.md", + "source_location": "L10", + "_origin": "ast", + "id": "concepts_temp_upload_temp_upload_\ud504\ub85c\uc81d\ud2b8_\uc0dd\uc131_\uc804_\uc784\uc2dc_\ubcf4\uad00\ud568", + "community": 59, + "community_name": "Temp Upload (\ud504\ub85c\uc81d\ud2b8 \uc0dd\uc131 \uc804 \uc784\uc2dc \ubcf4\uad00\ud568)", + "norm_label": "temp upload (\u1111\u1173\u1105\u1169\u110c\u1166\u11a8\u1110\u1173 \u1109\u1162\u11bc\u1109\u1165\u11bc \u110c\u1165\u11ab \u110b\u1175\u11b7\u1109\u1175 \u1107\u1169\u1100\u116a\u11ab\u1112\u1161\u11b7)" + }, + { + "label": "\uc8fc\uc694 \uac1c\ub150 \ubc0f \uc2a4\ud399", + "file_type": "document", + "source_file": "concepts/temp_upload.md", + "source_location": "L14", + "_origin": "ast", + "id": "concepts_temp_upload_\uc8fc\uc694_\uac1c\ub150_\ubc0f_\uc2a4\ud399", + "community": 59, + "community_name": "Temp Upload (\ud504\ub85c\uc81d\ud2b8 \uc0dd\uc131 \uc804 \uc784\uc2dc \ubcf4\uad00\ud568)", + "norm_label": "\u110c\u116e\u110b\u116d \u1100\u1162\u1102\u1167\u11b7 \u1106\u1175\u11be \u1109\u1173\u1111\u1166\u11a8" + }, + { + "label": "\uc8fc\uc694 \uad6c\uc131 \uc694\uc18c", + "file_type": "document", + "source_file": "concepts/temp_upload.md", + "source_location": "L19", + "_origin": "ast", + "id": "concepts_temp_upload_\uc8fc\uc694_\uad6c\uc131_\uc694\uc18c", + "community": 59, + "community_name": "Temp Upload (\ud504\ub85c\uc81d\ud2b8 \uc0dd\uc131 \uc804 \uc784\uc2dc \ubcf4\uad00\ud568)", + "norm_label": "\u110c\u116e\u110b\u116d \u1100\u116e\u1109\u1165\u11bc \u110b\u116d\u1109\u1169" + }, + { + "label": "\uc0ac\uc6a9\ucc98", + "file_type": "document", + "source_file": "concepts/temp_upload.md", + "source_location": "L30", + "_origin": "ast", + "id": "concepts_temp_upload_\uc0ac\uc6a9\ucc98", + "community": 59, + "community_name": "Temp Upload (\ud504\ub85c\uc81d\ud2b8 \uc0dd\uc131 \uc804 \uc784\uc2dc \ubcf4\uad00\ud568)", + "norm_label": "\u1109\u1161\u110b\u116d\u11bc\u110e\u1165" + }, + { + "label": "ui_templates.md", + "file_type": "document", + "source_file": "concepts/ui_templates.md", + "source_location": "L1", + "_origin": "ast", + "id": "concepts_ui_templates", + "community": 0, + "community_name": "UI Templates \u2014 Localization & Components", + "norm_label": "ui_templates.md" + }, + { + "label": "UI Templates \u2014 Localization & Components", + "file_type": "document", + "source_file": "concepts/ui_templates.md", + "source_location": "L8", + "_origin": "ast", + "id": "concepts_ui_templates_ui_templates_localization_components", + "community": 0, + "community_name": "UI Templates \u2014 Localization & Components", + "norm_label": "ui templates \u2014 localization & components" + }, + { + "label": "ui_template_locale.ts (\ub2e4\uad6d\uc5b4 \uad00\ub9ac)", + "file_type": "document", + "source_file": "concepts/ui_templates.md", + "source_location": "L12", + "_origin": "ast", + "id": "concepts_ui_templates_ui_template_locale_ts_\ub2e4\uad6d\uc5b4_\uad00\ub9ac", + "community": 0, + "community_name": "UI Templates \u2014 Localization & Components", + "norm_label": "ui_template_locale.ts (\u1103\u1161\u1100\u116e\u11a8\u110b\u1165 \u1100\u116a\u11ab\u1105\u1175)" + }, + { + "label": "ui_template_resizer.ts (\ud328\ub110 \ub9ac\uc0ac\uc774\uc800 \ud15c\ud50c\ub9bf)", + "file_type": "document", + "source_file": "concepts/ui_templates.md", + "source_location": "L24", + "_origin": "ast", + "id": "concepts_ui_templates_ui_template_resizer_ts_\ud328\ub110_\ub9ac\uc0ac\uc774\uc800_\ud15c\ud50c\ub9bf", + "community": 0, + "community_name": "UI Templates \u2014 Localization & Components", + "norm_label": "ui_template_resizer.ts (\u1111\u1162\u1102\u1165\u11af \u1105\u1175\u1109\u1161\u110b\u1175\u110c\u1165 \u1110\u1166\u11b7\u1111\u1173\u11af\u1105\u1175\u11ba)" + }, + { + "label": "ui_template_palette.ts (\uc9c0\ub3c4 \ud314\ub808\ud2b8 \uce90\uc2f1 \uc720\ud2f8)", + "file_type": "document", + "source_file": "concepts/ui_templates.md", + "source_location": "L31", + "_origin": "ast", + "id": "concepts_ui_templates_ui_template_palette_ts_\uc9c0\ub3c4_\ud314\ub808\ud2b8_\uce90\uc2f1_\uc720\ud2f8", + "community": 0, + "community_name": "UI Templates \u2014 Localization & Components", + "norm_label": "ui_template_palette.ts (\u110c\u1175\u1103\u1169 \u1111\u1161\u11af\u1105\u1166\u1110\u1173 \u110f\u1162\u1109\u1175\u11bc \u110b\u1172\u1110\u1175\u11af)" + }, + { + "label": "ui_template_general_blocks.ts (\uc77c\ubc18\uc5c5\ubb34 \uacf5\uc6a9 \ube14\ub85d)", + "file_type": "document", + "source_file": "concepts/ui_templates.md", + "source_location": "L38", + "_origin": "ast", + "id": "concepts_ui_templates_ui_template_general_blocks_ts_\uc77c\ubc18\uc5c5\ubb34_\uacf5\uc6a9_\ube14\ub85d", + "community": 0, + "community_name": "UI Templates \u2014 Localization & Components", + "norm_label": "ui_template_general_blocks.ts (\u110b\u1175\u11af\u1107\u1161\u11ab\u110b\u1165\u11b8\u1106\u116e \u1100\u1169\u11bc\u110b\u116d\u11bc \u1107\u1173\u11af\u1105\u1169\u11a8)" + }, + { + "label": "ui_template_general_layout.ts (\uc77c\ubc18\uc5c5\ubb34 \ub808\uc774\uc544\uc6c3)", + "file_type": "document", + "source_file": "concepts/ui_templates.md", + "source_location": "L48", + "_origin": "ast", + "id": "concepts_ui_templates_ui_template_general_layout_ts_\uc77c\ubc18\uc5c5\ubb34_\ub808\uc774\uc544\uc6c3", + "community": 0, + "community_name": "UI Templates \u2014 Localization & Components", + "norm_label": "ui_template_general_layout.ts (\u110b\u1175\u11af\u1107\u1161\u11ab\u110b\u1165\u11b8\u1106\u116e \u1105\u1166\u110b\u1175\u110b\u1161\u110b\u116e\u11ba)" + }, + { + "label": "ui_template_elements.ts (\uacf5\ud1b5 \uc5d8\ub9ac\uba3c\ud2b8 \ud15c\ud50c\ub9bf)", + "file_type": "document", + "source_file": "concepts/ui_templates.md", + "source_location": "L55", + "_origin": "ast", + "id": "concepts_ui_templates_ui_template_elements_ts_\uacf5\ud1b5_\uc5d8\ub9ac\uba3c\ud2b8_\ud15c\ud50c\ub9bf", + "community": 0, + "community_name": "UI Templates \u2014 Localization & Components", + "norm_label": "ui_template_elements.ts (\u1100\u1169\u11bc\u1110\u1169\u11bc \u110b\u1166\u11af\u1105\u1175\u1106\u1165\u11ab\u1110\u1173 \u1110\u1166\u11b7\u1111\u1173\u11af\u1105\u1175\u11ba)" + }, + { + "label": "ui_template_overlay.ts (\uc624\ubc84\ub808\uc774 \ucef4\ud3ec\ub10c\ud2b8)", + "file_type": "document", + "source_file": "concepts/ui_templates.md", + "source_location": "L62", + "_origin": "ast", + "id": "concepts_ui_templates_ui_template_overlay_ts_\uc624\ubc84\ub808\uc774_\ucef4\ud3ec\ub10c\ud2b8", + "community": 0, + "community_name": "UI Templates \u2014 Localization & Components", + "norm_label": "ui_template_overlay.ts (\u110b\u1169\u1107\u1165\u1105\u1166\u110b\u1175 \u110f\u1165\u11b7\u1111\u1169\u1102\u1165\u11ab\u1110\u1173)" + }, + { + "label": "ui_template_workflow_layout.ts (\uc5d4\uc9c0\ub2c8\uc5b4\ub9c1 \ub808\uc774\uc544\uc6c3)", + "file_type": "document", + "source_file": "concepts/ui_templates.md", + "source_location": "L72", + "_origin": "ast", + "id": "concepts_ui_templates_ui_template_workflow_layout_ts_\uc5d4\uc9c0\ub2c8\uc5b4\ub9c1_\ub808\uc774\uc544\uc6c3", + "community": 0, + "community_name": "UI Templates \u2014 Localization & Components", + "norm_label": "ui_template_workflow_layout.ts (\u110b\u1166\u11ab\u110c\u1175\u1102\u1175\u110b\u1165\u1105\u1175\u11bc \u1105\u1166\u110b\u1175\u110b\u1161\u110b\u116e\u11ba)" + }, + { + "label": "theme.css (\uc2a4\ud0c0\uc77c \ubcc0\uc218)", + "file_type": "document", + "source_file": "concepts/ui_templates.md", + "source_location": "L79", + "_origin": "ast", + "id": "concepts_ui_templates_theme_css_\uc2a4\ud0c0\uc77c_\ubcc0\uc218", + "community": 0, + "community_name": "UI Templates \u2014 Localization & Components", + "norm_label": "theme.css (\u1109\u1173\u1110\u1161\u110b\u1175\u11af \u1107\u1167\u11ab\u1109\u116e)" + }, + { + "label": "\uc81c\uc57d (backend.md \u00a71)", + "file_type": "document", + "source_file": "concepts/ui_templates.md", + "source_location": "L90", + "_origin": "ast", + "id": "concepts_ui_templates_\uc81c\uc57d_backend_md_1", + "community": 0, + "community_name": "UI Templates \u2014 Localization & Components", + "norm_label": "\u110c\u1166\u110b\u1163\u11a8 (backend.md \u00a71)" + }, + { + "label": "\ub0a8\uc740 \ud30c\uc77c \ud55c\uacc4", + "file_type": "document", + "source_file": "concepts/ui_templates.md", + "source_location": "L95", + "_origin": "ast", + "id": "concepts_ui_templates_\ub0a8\uc740_\ud30c\uc77c_\ud55c\uacc4", + "community": 0, + "community_name": "UI Templates \u2014 Localization & Components", + "norm_label": "\u1102\u1161\u11b7\u110b\u1173\u11ab \u1111\u1161\u110b\u1175\u11af \u1112\u1161\u11ab\u1100\u1168" + }, + { + "label": "workflow_state.md", + "file_type": "document", + "source_file": "concepts/workflow_state.md", + "source_location": "L1", + "_origin": "ast", + "id": "concepts_workflow_state", + "community": 3, + "community_name": "2026-09-04 \uc644\ub8cc \ud56d\ubaa9", + "norm_label": "workflow_state.md" + }, + { + "label": "Workflow \uc0c1\ud0dc \uad00\ub9ac", + "file_type": "document", + "source_file": "concepts/workflow_state.md", + "source_location": "L9", + "_origin": "ast", + "id": "concepts_workflow_state_workflow_\uc0c1\ud0dc_\uad00\ub9ac", + "community": 3, + "community_name": "2026-09-04 \uc644\ub8cc \ud56d\ubaa9", + "norm_label": "workflow \u1109\u1161\u11bc\u1110\u1162 \u1100\u116a\u11ab\u1105\u1175" + }, + { + "label": "SSOT: `project_workflow_stages` \ud14c\uc774\ube14 (\uc2e4 DB \ud655\uc778)", + "file_type": "document", + "source_file": "concepts/workflow_state.md", + "source_location": "L13", + "_origin": "ast", + "id": "concepts_workflow_state_ssot_project_workflow_stages_\ud14c\uc774\ube14_\uc2e4_db_\ud655\uc778", + "community": 3, + "community_name": "2026-09-04 \uc644\ub8cc \ud56d\ubaa9", + "norm_label": "ssot: `project_workflow_stages` \u1110\u1166\u110b\u1175\u1107\u1173\u11af (\u1109\u1175\u11af db \u1112\u116a\u11a8\u110b\u1175\u11ab)" + }, + { + "label": "R1 \uc6cc\ud06c\ud50c\ub85c\uc6b0 \ub2e8\uacc4 \uc7ac\ud3b8 (2026-08-08 \ubc18\uc601)", + "file_type": "document", + "source_file": "concepts/workflow_state.md", + "source_location": "L27", + "_origin": "ast", + "id": "concepts_workflow_state_r1_\uc6cc\ud06c\ud50c\ub85c\uc6b0_\ub2e8\uacc4_\uc7ac\ud3b8_2026_08_08_\ubc18\uc601", + "community": 3, + "community_name": "2026-09-04 \uc644\ub8cc \ud56d\ubaa9", + "norm_label": "r1 \u110b\u116f\u110f\u1173\u1111\u1173\u11af\u1105\u1169\u110b\u116e \u1103\u1161\u11ab\u1100\u1168 \u110c\u1162\u1111\u1167\u11ab (2026-08-08 \u1107\u1161\u11ab\u110b\u1167\u11bc)" + }, + { + "label": "\ubc31\uadf8\ub77c\uc6b4\ub4dc \uc790\ub3d9 \uacc4\uc0b0 \uccb4\uc778 \ubc0f \uc0ac\uc6a9\uc790 \uc124\uc815 \uc774\uc6d4", + "file_type": "document", + "source_file": "concepts/workflow_state.md", + "source_location": "L35", + "_origin": "ast", + "id": "concepts_workflow_state_\ubc31\uadf8\ub77c\uc6b4\ub4dc_\uc790\ub3d9_\uacc4\uc0b0_\uccb4\uc778_\ubc0f_\uc0ac\uc6a9\uc790_\uc124\uc815_\uc774\uc6d4", + "community": 3, + "community_name": "2026-09-04 \uc644\ub8cc \ud56d\ubaa9", + "norm_label": "\u1107\u1162\u11a8\u1100\u1173\u1105\u1161\u110b\u116e\u11ab\u1103\u1173 \u110c\u1161\u1103\u1169\u11bc \u1100\u1168\u1109\u1161\u11ab \u110e\u1166\u110b\u1175\u11ab \u1106\u1175\u11be \u1109\u1161\u110b\u116d\u11bc\u110c\u1161 \u1109\u1165\u11af\u110c\u1165\u11bc \u110b\u1175\u110b\u116f\u11af" + }, + { + "label": "\uacf5\ud1b5 \uc720\ud2f8 `common_util/common_util_workflow_state.py`", + "file_type": "document", + "source_file": "concepts/workflow_state.md", + "source_location": "L40", + "_origin": "ast", + "id": "concepts_workflow_state_\uacf5\ud1b5_\uc720\ud2f8_common_util_common_util_workflow_state_py", + "community": 3, + "community_name": "2026-09-04 \uc644\ub8cc \ud56d\ubaa9", + "norm_label": "\u1100\u1169\u11bc\u1110\u1169\u11bc \u110b\u1172\u1110\u1175\u11af `common_util/common_util_workflow_state.py`" + }, + { + "label": "\ubb34\ud6a8\ud654\uc758 \uc2e4\uc81c \ubc94\uc704", + "file_type": "document", + "source_file": "concepts/workflow_state.md", + "source_location": "L51", + "_origin": "ast", + "id": "concepts_workflow_state_\ubb34\ud6a8\ud654\uc758_\uc2e4\uc81c_\ubc94\uc704", + "community": 3, + "community_name": "2026-09-04 \uc644\ub8cc \ud56d\ubaa9", + "norm_label": "\u1106\u116e\u1112\u116d\u1112\u116a\u110b\u1174 \u1109\u1175\u11af\u110c\u1166 \u1107\u1165\u11b7\u110b\u1171" + }, + { + "label": "\uc870\ud68c API", + "file_type": "document", + "source_file": "concepts/workflow_state.md", + "source_location": "L60", + "_origin": "ast", + "id": "concepts_workflow_state_\uc870\ud68c_api", + "community": 3, + "community_name": "2026-09-04 \uc644\ub8cc \ud56d\ubaa9", + "norm_label": "\u110c\u1169\u1112\u116c api" + }, + { + "label": "\ud504\ub860\ud2b8\uc5d4\ub4dc \uac8c\uc774\ud305 \ubc0f \uc2a4\ud15d\ubc14 \uc5f0\ub3d9", + "file_type": "document", + "source_file": "concepts/workflow_state.md", + "source_location": "L63", + "_origin": "ast", + "id": "concepts_workflow_state_\ud504\ub860\ud2b8\uc5d4\ub4dc_\uac8c\uc774\ud305_\ubc0f_\uc2a4\ud15d\ubc14_\uc5f0\ub3d9", + "community": 3, + "community_name": "2026-09-04 \uc644\ub8cc \ud56d\ubaa9", + "norm_label": "\u1111\u1173\u1105\u1169\u11ab\u1110\u1173\u110b\u1166\u11ab\u1103\u1173 \u1100\u1166\u110b\u1175\u1110\u1175\u11bc \u1106\u1175\u11be \u1109\u1173\u1110\u1166\u11b8\u1107\u1161 \u110b\u1167\u11ab\u1103\u1169\u11bc" + }, + { + "label": "query_20260821_070423_\ubc30\uc218\uad00_\ub9e4\uc124\uc2dc_\uac01\ub3c4\uc758_\uc81c\uc57d\uc870\uac74\uc774_\uc788\ub294\uc9c0_\ud655\uc778\ud574\uc918__\uc784\ub3c4\uc5d0\uc11c.md", + "file_type": "document", + "source_file": "graphify-out/memory/query_20260821_070423_\ubc30\uc218\uad00_\ub9e4\uc124\uc2dc_\uac01\ub3c4\uc758_\uc81c\uc57d\uc870\uac74\uc774_\uc788\ub294\uc9c0_\ud655\uc778\ud574\uc918__\uc784\ub3c4\uc5d0\uc11c.md", + "source_location": "L1", + "_origin": "ast", + "id": "graphify_out_memory_query_20260821_070423_\ubc30\uc218\uad00_\ub9e4\uc124\uc2dc_\uac01\ub3c4\uc758_\uc81c\uc57d\uc870\uac74\uc774_\uc788\ub294\uc9c0_\ud655\uc778\ud574\uc918_\uc784\ub3c4\uc5d0\uc11c", + "community": 60, + "community_name": "Q: \ubc30\uc218\uad00 \ub9e4\uc124\uc2dc \uac01\ub3c4\uc758 \uc81c\uc57d\uc870\uac74\uc774 \uc788\ub294\uc9c0 \ud655\uc778\ud574\uc918. \uc784\ub3c4\uc5d0\uc11c", + "norm_label": "query_20260821_070423_\u1107\u1162\u1109\u116e\u1100\u116a\u11ab_\u1106\u1162\u1109\u1165\u11af\u1109\u1175_\u1100\u1161\u11a8\u1103\u1169\u110b\u1174_\u110c\u1166\u110b\u1163\u11a8\u110c\u1169\u1100\u1165\u11ab\u110b\u1175_\u110b\u1175\u11bb\u1102\u1173\u11ab\u110c\u1175_\u1112\u116a\u11a8\u110b\u1175\u11ab\u1112\u1162\u110c\u116f__\u110b\u1175\u11b7\u1103\u1169\u110b\u1166\u1109\u1165.md" + }, + { + "label": "Q: \ubc30\uc218\uad00 \ub9e4\uc124\uc2dc \uac01\ub3c4\uc758 \uc81c\uc57d\uc870\uac74\uc774 \uc788\ub294\uc9c0 \ud655\uc778\ud574\uc918. \uc784\ub3c4\uc5d0\uc11c", + "file_type": "document", + "source_file": "graphify-out/memory/query_20260821_070423_\ubc30\uc218\uad00_\ub9e4\uc124\uc2dc_\uac01\ub3c4\uc758_\uc81c\uc57d\uc870\uac74\uc774_\uc788\ub294\uc9c0_\ud655\uc778\ud574\uc918__\uc784\ub3c4\uc5d0\uc11c.md", + "source_location": "L10", + "_origin": "ast", + "id": "graphify_out_memory_query_20260821_070423_\ubc30\uc218\uad00_\ub9e4\uc124\uc2dc_\uac01\ub3c4\uc758_\uc81c\uc57d\uc870\uac74\uc774_\uc788\ub294\uc9c0_\ud655\uc778\ud574\uc918_\uc784\ub3c4\uc5d0\uc11c_q_\ubc30\uc218\uad00_\ub9e4\uc124\uc2dc_\uac01\ub3c4\uc758_\uc81c\uc57d\uc870\uac74\uc774_\uc788\ub294\uc9c0_\ud655\uc778\ud574\uc918_\uc784\ub3c4\uc5d0\uc11c", + "community": 60, + "community_name": "Q: \ubc30\uc218\uad00 \ub9e4\uc124\uc2dc \uac01\ub3c4\uc758 \uc81c\uc57d\uc870\uac74\uc774 \uc788\ub294\uc9c0 \ud655\uc778\ud574\uc918. \uc784\ub3c4\uc5d0\uc11c", + "norm_label": "q: \u1107\u1162\u1109\u116e\u1100\u116a\u11ab \u1106\u1162\u1109\u1165\u11af\u1109\u1175 \u1100\u1161\u11a8\u1103\u1169\u110b\u1174 \u110c\u1166\u110b\u1163\u11a8\u110c\u1169\u1100\u1165\u11ab\u110b\u1175 \u110b\u1175\u11bb\u1102\u1173\u11ab\u110c\u1175 \u1112\u116a\u11a8\u110b\u1175\u11ab\u1112\u1162\u110c\u116f. \u110b\u1175\u11b7\u1103\u1169\u110b\u1166\u1109\u1165" + }, + { + "label": "Answer", + "file_type": "document", + "source_file": "graphify-out/memory/query_20260821_070423_\ubc30\uc218\uad00_\ub9e4\uc124\uc2dc_\uac01\ub3c4\uc758_\uc81c\uc57d\uc870\uac74\uc774_\uc788\ub294\uc9c0_\ud655\uc778\ud574\uc918__\uc784\ub3c4\uc5d0\uc11c.md", + "source_location": "L12", + "_origin": "ast", + "id": "graphify_out_memory_query_20260821_070423_\ubc30\uc218\uad00_\ub9e4\uc124\uc2dc_\uac01\ub3c4\uc758_\uc81c\uc57d\uc870\uac74\uc774_\uc788\ub294\uc9c0_\ud655\uc778\ud574\uc918_\uc784\ub3c4\uc5d0\uc11c_answer", + "community": 60, + "community_name": "Q: \ubc30\uc218\uad00 \ub9e4\uc124\uc2dc \uac01\ub3c4\uc758 \uc81c\uc57d\uc870\uac74\uc774 \uc788\ub294\uc9c0 \ud655\uc778\ud574\uc918. \uc784\ub3c4\uc5d0\uc11c", + "norm_label": "answer" + }, + { + "label": "Outcome", + "file_type": "document", + "source_file": "graphify-out/memory/query_20260821_070423_\ubc30\uc218\uad00_\ub9e4\uc124\uc2dc_\uac01\ub3c4\uc758_\uc81c\uc57d\uc870\uac74\uc774_\uc788\ub294\uc9c0_\ud655\uc778\ud574\uc918__\uc784\ub3c4\uc5d0\uc11c.md", + "source_location": "L16", + "_origin": "ast", + "id": "graphify_out_memory_query_20260821_070423_\ubc30\uc218\uad00_\ub9e4\uc124\uc2dc_\uac01\ub3c4\uc758_\uc81c\uc57d\uc870\uac74\uc774_\uc788\ub294\uc9c0_\ud655\uc778\ud574\uc918_\uc784\ub3c4\uc5d0\uc11c_outcome", + "community": 60, + "community_name": "Q: \ubc30\uc218\uad00 \ub9e4\uc124\uc2dc \uac01\ub3c4\uc758 \uc81c\uc57d\uc870\uac74\uc774 \uc788\ub294\uc9c0 \ud655\uc778\ud574\uc918. \uc784\ub3c4\uc5d0\uc11c", + "norm_label": "outcome" + }, + { + "label": "Source Nodes", + "file_type": "document", + "source_file": "graphify-out/memory/query_20260821_070423_\ubc30\uc218\uad00_\ub9e4\uc124\uc2dc_\uac01\ub3c4\uc758_\uc81c\uc57d\uc870\uac74\uc774_\uc788\ub294\uc9c0_\ud655\uc778\ud574\uc918__\uc784\ub3c4\uc5d0\uc11c.md", + "source_location": "L20", + "_origin": "ast", + "id": "graphify_out_memory_query_20260821_070423_\ubc30\uc218\uad00_\ub9e4\uc124\uc2dc_\uac01\ub3c4\uc758_\uc81c\uc57d\uc870\uac74\uc774_\uc788\ub294\uc9c0_\ud655\uc778\ud574\uc918_\uc784\ub3c4\uc5d0\uc11c_source_nodes", + "community": 60, + "community_name": "Q: \ubc30\uc218\uad00 \ub9e4\uc124\uc2dc \uac01\ub3c4\uc758 \uc81c\uc57d\uc870\uac74\uc774 \uc788\ub294\uc9c0 \ud655\uc778\ud574\uc918. \uc784\ub3c4\uc5d0\uc11c", + "norm_label": "source nodes" + }, + { + "label": "query_20260821_101018_\uc784\ub3c4_\uae30\uc220\uc815\ubcf4db\uc5d0\uc11c_\uc9d1\uc218\uc815\uc758_\ud615\ud0dc\uc815\ubcf4\ub294_\uc5b4\ub5a4\uac8c_\uc788\ub294\uc9c0_\ud655\uc778\ud574\uc918.md", + "file_type": "document", + "source_file": "graphify-out/memory/query_20260821_101018_\uc784\ub3c4_\uae30\uc220\uc815\ubcf4db\uc5d0\uc11c_\uc9d1\uc218\uc815\uc758_\ud615\ud0dc\uc815\ubcf4\ub294_\uc5b4\ub5a4\uac8c_\uc788\ub294\uc9c0_\ud655\uc778\ud574\uc918.md", + "source_location": "L1", + "_origin": "ast", + "id": "graphify_out_memory_query_20260821_101018_\uc784\ub3c4_\uae30\uc220\uc815\ubcf4db\uc5d0\uc11c_\uc9d1\uc218\uc815\uc758_\ud615\ud0dc\uc815\ubcf4\ub294_\uc5b4\ub5a4\uac8c_\uc788\ub294\uc9c0_\ud655\uc778\ud574\uc918", + "community": 61, + "community_name": "Q: \uc784\ub3c4 \uae30\uc220\uc815\ubcf4DB\uc5d0\uc11c \uc9d1\uc218\uc815\uc758 \ud615\ud0dc\uc815\ubcf4\ub294 \uc5b4\ub5a4\uac8c \uc788\ub294\uc9c0 \ud655\uc778\ud574\uc918.", + "norm_label": "query_20260821_101018_\u110b\u1175\u11b7\u1103\u1169_\u1100\u1175\u1109\u116e\u11af\u110c\u1165\u11bc\u1107\u1169db\u110b\u1166\u1109\u1165_\u110c\u1175\u11b8\u1109\u116e\u110c\u1165\u11bc\u110b\u1174_\u1112\u1167\u11bc\u1110\u1162\u110c\u1165\u11bc\u1107\u1169\u1102\u1173\u11ab_\u110b\u1165\u1104\u1165\u11ab\u1100\u1166_\u110b\u1175\u11bb\u1102\u1173\u11ab\u110c\u1175_\u1112\u116a\u11a8\u110b\u1175\u11ab\u1112\u1162\u110c\u116f.md" + }, + { + "label": "Q: \uc784\ub3c4 \uae30\uc220\uc815\ubcf4DB\uc5d0\uc11c \uc9d1\uc218\uc815\uc758 \ud615\ud0dc\uc815\ubcf4\ub294 \uc5b4\ub5a4\uac8c \uc788\ub294\uc9c0 \ud655\uc778\ud574\uc918.", + "file_type": "document", + "source_file": "graphify-out/memory/query_20260821_101018_\uc784\ub3c4_\uae30\uc220\uc815\ubcf4db\uc5d0\uc11c_\uc9d1\uc218\uc815\uc758_\ud615\ud0dc\uc815\ubcf4\ub294_\uc5b4\ub5a4\uac8c_\uc788\ub294\uc9c0_\ud655\uc778\ud574\uc918.md", + "source_location": "L10", + "_origin": "ast", + "id": "graphify_out_memory_query_20260821_101018_\uc784\ub3c4_\uae30\uc220\uc815\ubcf4db\uc5d0\uc11c_\uc9d1\uc218\uc815\uc758_\ud615\ud0dc\uc815\ubcf4\ub294_\uc5b4\ub5a4\uac8c_\uc788\ub294\uc9c0_\ud655\uc778\ud574\uc918_q_\uc784\ub3c4_\uae30\uc220\uc815\ubcf4db\uc5d0\uc11c_\uc9d1\uc218\uc815\uc758_\ud615\ud0dc\uc815\ubcf4\ub294_\uc5b4\ub5a4\uac8c_\uc788\ub294\uc9c0_\ud655\uc778\ud574\uc918", + "community": 61, + "community_name": "Q: \uc784\ub3c4 \uae30\uc220\uc815\ubcf4DB\uc5d0\uc11c \uc9d1\uc218\uc815\uc758 \ud615\ud0dc\uc815\ubcf4\ub294 \uc5b4\ub5a4\uac8c \uc788\ub294\uc9c0 \ud655\uc778\ud574\uc918.", + "norm_label": "q: \u110b\u1175\u11b7\u1103\u1169 \u1100\u1175\u1109\u116e\u11af\u110c\u1165\u11bc\u1107\u1169db\u110b\u1166\u1109\u1165 \u110c\u1175\u11b8\u1109\u116e\u110c\u1165\u11bc\u110b\u1174 \u1112\u1167\u11bc\u1110\u1162\u110c\u1165\u11bc\u1107\u1169\u1102\u1173\u11ab \u110b\u1165\u1104\u1165\u11ab\u1100\u1166 \u110b\u1175\u11bb\u1102\u1173\u11ab\u110c\u1175 \u1112\u116a\u11a8\u110b\u1175\u11ab\u1112\u1162\u110c\u116f." + }, + { + "label": "Answer", + "file_type": "document", + "source_file": "graphify-out/memory/query_20260821_101018_\uc784\ub3c4_\uae30\uc220\uc815\ubcf4db\uc5d0\uc11c_\uc9d1\uc218\uc815\uc758_\ud615\ud0dc\uc815\ubcf4\ub294_\uc5b4\ub5a4\uac8c_\uc788\ub294\uc9c0_\ud655\uc778\ud574\uc918.md", + "source_location": "L12", + "_origin": "ast", + "id": "graphify_out_memory_query_20260821_101018_\uc784\ub3c4_\uae30\uc220\uc815\ubcf4db\uc5d0\uc11c_\uc9d1\uc218\uc815\uc758_\ud615\ud0dc\uc815\ubcf4\ub294_\uc5b4\ub5a4\uac8c_\uc788\ub294\uc9c0_\ud655\uc778\ud574\uc918_answer", + "community": 61, + "community_name": "Q: \uc784\ub3c4 \uae30\uc220\uc815\ubcf4DB\uc5d0\uc11c \uc9d1\uc218\uc815\uc758 \ud615\ud0dc\uc815\ubcf4\ub294 \uc5b4\ub5a4\uac8c \uc788\ub294\uc9c0 \ud655\uc778\ud574\uc918.", + "norm_label": "answer" + }, + { + "label": "Outcome", + "file_type": "document", + "source_file": "graphify-out/memory/query_20260821_101018_\uc784\ub3c4_\uae30\uc220\uc815\ubcf4db\uc5d0\uc11c_\uc9d1\uc218\uc815\uc758_\ud615\ud0dc\uc815\ubcf4\ub294_\uc5b4\ub5a4\uac8c_\uc788\ub294\uc9c0_\ud655\uc778\ud574\uc918.md", + "source_location": "L16", + "_origin": "ast", + "id": "graphify_out_memory_query_20260821_101018_\uc784\ub3c4_\uae30\uc220\uc815\ubcf4db\uc5d0\uc11c_\uc9d1\uc218\uc815\uc758_\ud615\ud0dc\uc815\ubcf4\ub294_\uc5b4\ub5a4\uac8c_\uc788\ub294\uc9c0_\ud655\uc778\ud574\uc918_outcome", + "community": 61, + "community_name": "Q: \uc784\ub3c4 \uae30\uc220\uc815\ubcf4DB\uc5d0\uc11c \uc9d1\uc218\uc815\uc758 \ud615\ud0dc\uc815\ubcf4\ub294 \uc5b4\ub5a4\uac8c \uc788\ub294\uc9c0 \ud655\uc778\ud574\uc918.", + "norm_label": "outcome" + }, + { + "label": "Source Nodes", + "file_type": "document", + "source_file": "graphify-out/memory/query_20260821_101018_\uc784\ub3c4_\uae30\uc220\uc815\ubcf4db\uc5d0\uc11c_\uc9d1\uc218\uc815\uc758_\ud615\ud0dc\uc815\ubcf4\ub294_\uc5b4\ub5a4\uac8c_\uc788\ub294\uc9c0_\ud655\uc778\ud574\uc918.md", + "source_location": "L20", + "_origin": "ast", + "id": "graphify_out_memory_query_20260821_101018_\uc784\ub3c4_\uae30\uc220\uc815\ubcf4db\uc5d0\uc11c_\uc9d1\uc218\uc815\uc758_\ud615\ud0dc\uc815\ubcf4\ub294_\uc5b4\ub5a4\uac8c_\uc788\ub294\uc9c0_\ud655\uc778\ud574\uc918_source_nodes", + "community": 61, + "community_name": "Q: \uc784\ub3c4 \uae30\uc220\uc815\ubcf4DB\uc5d0\uc11c \uc9d1\uc218\uc815\uc758 \ud615\ud0dc\uc815\ubcf4\ub294 \uc5b4\ub5a4\uac8c \uc788\ub294\uc9c0 \ud655\uc778\ud574\uc918.", + "norm_label": "source nodes" + }, + { + "label": "index.md", + "file_type": "document", + "source_file": "index.md", + "source_location": "L1", + "_origin": "ast", + "id": "index", + "community": 33, + "community_name": "\ud604\uc7ac \uad6c\ud604 \ud604\ud669 \u2014 \uc18c\uc2a4 \uc77d\uae30 \uac10\uc0ac", + "norm_label": "index.md" + }, + { + "label": "Wiki Index", + "file_type": "document", + "source_file": "index.md", + "source_location": "L7", + "_origin": "ast", + "id": "index_wiki_index", + "community": 33, + "community_name": "\ud604\uc7ac \uad6c\ud604 \ud604\ud669 \u2014 \uc18c\uc2a4 \uc77d\uae30 \uac10\uc0ac", + "norm_label": "wiki index" + }, + { + "label": "\uc6b0\uc120 \uc9c4\uc785\uc810", + "file_type": "document", + "source_file": "index.md", + "source_location": "L11", + "_origin": "ast", + "id": "index_\uc6b0\uc120_\uc9c4\uc785\uc810", + "community": 33, + "community_name": "\ud604\uc7ac \uad6c\ud604 \ud604\ud669 \u2014 \uc18c\uc2a4 \uc77d\uae30 \uac10\uc0ac", + "norm_label": "\u110b\u116e\u1109\u1165\u11ab \u110c\u1175\u11ab\u110b\u1175\u11b8\u110c\u1165\u11b7" + }, + { + "label": "\ub85c\uadf8\uc778 \ud6c4 \uae30\ub2a5", + "file_type": "document", + "source_file": "index.md", + "source_location": "L20", + "_origin": "ast", + "id": "index_\ub85c\uadf8\uc778_\ud6c4_\uae30\ub2a5", + "community": 33, + "community_name": "\ud604\uc7ac \uad6c\ud604 \ud604\ud669 \u2014 \uc18c\uc2a4 \uc77d\uae30 \uac10\uc0ac", + "norm_label": "\u1105\u1169\u1100\u1173\u110b\u1175\u11ab \u1112\u116e \u1100\u1175\u1102\u1173\u11bc" + }, + { + "label": "\ub85c\uadf8\uc778 \uc804\u00b7\uad00\ub9ac", + "file_type": "document", + "source_file": "index.md", + "source_location": "L43", + "_origin": "ast", + "id": "index_\ub85c\uadf8\uc778_\uc804_\uad00\ub9ac", + "community": 33, + "community_name": "\ud604\uc7ac \uad6c\ud604 \ud604\ud669 \u2014 \uc18c\uc2a4 \uc77d\uae30 \uac10\uc0ac", + "norm_label": "\u1105\u1169\u1100\u1173\u110b\u1175\u11ab \u110c\u1165\u11ab\u00b7\u1100\u116a\u11ab\u1105\u1175" + }, + { + "label": "\uacf5\ud1b5 \uac1c\ub150", + "file_type": "document", + "source_file": "index.md", + "source_location": "L51", + "_origin": "ast", + "id": "index_\uacf5\ud1b5_\uac1c\ub150", + "community": 33, + "community_name": "\ud604\uc7ac \uad6c\ud604 \ud604\ud669 \u2014 \uc18c\uc2a4 \uc77d\uae30 \uac10\uc0ac", + "norm_label": "\u1100\u1169\u11bc\u1110\u1169\u11bc \u1100\u1162\u1102\u1167\u11b7" + }, + { + "label": "\ud604\uc7ac \uc8fc\uc758\uc0ac\ud56d", + "file_type": "document", + "source_file": "index.md", + "source_location": "L75", + "_origin": "ast", + "id": "index_\ud604\uc7ac_\uc8fc\uc758\uc0ac\ud56d", + "community": 33, + "community_name": "\ud604\uc7ac \uad6c\ud604 \ud604\ud669 \u2014 \uc18c\uc2a4 \uc77d\uae30 \uac10\uc0ac", + "norm_label": "\u1112\u1167\u11ab\u110c\u1162 \u110c\u116e\u110b\u1174\u1109\u1161\u1112\u1161\u11bc" + }, + { + "label": "A00_Common.md", + "file_type": "document", + "source_file": "pages/A00_Common/A00_Common.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_a00_common_a00_common", + "community": 94, + "community_name": "A00_Common \u2014 \uacf5\ud1b5 \ud504\ub808\uc784\uc6cc\ud06c & \uc720\ud2f8", + "norm_label": "a00_common.md" + }, + { + "label": "A00_Common \u2014 \uacf5\ud1b5 \ud504\ub808\uc784\uc6cc\ud06c & \uc720\ud2f8", + "file_type": "document", + "source_file": "pages/A00_Common/A00_Common.md", + "source_location": "L9", + "_origin": "ast", + "id": "pages_a00_common_a00_common_a00_common_\uacf5\ud1b5_\ud504\ub808\uc784\uc6cc\ud06c_\uc720\ud2f8", + "community": 94, + "community_name": "A00_Common \u2014 \uacf5\ud1b5 \ud504\ub808\uc784\uc6cc\ud06c & \uc720\ud2f8", + "norm_label": "a00_common \u2014 \u1100\u1169\u11bc\u1110\u1169\u11bc \u1111\u1173\u1105\u1166\u110b\u1175\u11b7\u110b\u116f\u110f\u1173 & \u110b\u1172\u1110\u1175\u11af" + }, + { + "label": "\ud83d\udcc2 \uc138\ubd84\ud654 \ub9c8\ud06c\ub2e4\uc6b4 \ubb38\uc11c \ubaa9\ub85d", + "file_type": "document", + "source_file": "pages/A00_Common/A00_Common.md", + "source_location": "L13", + "_origin": "ast", + "id": "pages_a00_common_a00_common_\uc138\ubd84\ud654_\ub9c8\ud06c\ub2e4\uc6b4_\ubb38\uc11c_\ubaa9\ub85d", + "community": 94, + "community_name": "A00_Common \u2014 \uacf5\ud1b5 \ud504\ub808\uc784\uc6cc\ud06c & \uc720\ud2f8", + "norm_label": "\ud83d\udcc2 \u1109\u1166\u1107\u116e\u11ab\u1112\u116a \u1106\u1161\u110f\u1173\u1103\u1161\u110b\u116e\u11ab \u1106\u116e\u11ab\u1109\u1165 \u1106\u1169\u11a8\u1105\u1169\u11a8" + }, + { + "label": "\ud83d\udccb \uac1c\uc694", + "file_type": "document", + "source_file": "pages/A00_Common/A00_Common.md", + "source_location": "L22", + "_origin": "ast", + "id": "pages_a00_common_a00_common_\uac1c\uc694", + "community": 94, + "community_name": "A00_Common \u2014 \uacf5\ud1b5 \ud504\ub808\uc784\uc6cc\ud06c & \uc720\ud2f8", + "norm_label": "\ud83d\udccb \u1100\u1162\u110b\u116d" + }, + { + "label": "A00_Common_AppShell.md", + "file_type": "document", + "source_file": "pages/A00_Common/frontend/A00_Common_AppShell.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_a00_common_frontend_a00_common_appshell", + "community": 95, + "community_name": "app_shell.ts", + "norm_label": "a00_common_appshell.md" + }, + { + "label": "app_shell.ts", + "file_type": "document", + "source_file": "pages/A00_Common/frontend/A00_Common_AppShell.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_a00_common_frontend_a00_common_appshell_app_shell_ts", + "community": 95, + "community_name": "app_shell.ts", + "norm_label": "app_shell.ts" + }, + { + "label": "\ud83d\udee0\ufe0f \uc8fc\uc694 \ud568\uc218 \ubaa9\ub85d", + "file_type": "document", + "source_file": "pages/A00_Common/frontend/A00_Common_AppShell.md", + "source_location": "L14", + "_origin": "ast", + "id": "pages_a00_common_frontend_a00_common_appshell_\uc8fc\uc694_\ud568\uc218_\ubaa9\ub85d", + "community": 95, + "community_name": "app_shell.ts", + "norm_label": "\ud83d\udee0\ufe0f \u110c\u116e\u110b\u116d \u1112\u1161\u11b7\u1109\u116e \u1106\u1169\u11a8\u1105\u1169\u11a8" + }, + { + "label": "\ud83d\udd17 \uc5f0\uad00 \uac1c\ub150 \ubc0f \uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/A00_Common/frontend/A00_Common_AppShell.md", + "source_location": "L21", + "_origin": "ast", + "id": "pages_a00_common_frontend_a00_common_appshell_\uc5f0\uad00_\uac1c\ub150_\ubc0f_\uc758\uc874\uc131", + "community": 95, + "community_name": "app_shell.ts", + "norm_label": "\ud83d\udd17 \u110b\u1167\u11ab\u1100\u116a\u11ab \u1100\u1162\u1102\u1167\u11b7 \u1106\u1175\u11be \u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "A00_Common_Router.md", + "file_type": "document", + "source_file": "pages/A00_Common/frontend/A00_Common_Router.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_a00_common_frontend_a00_common_router", + "community": 96, + "community_name": "router.ts", + "norm_label": "a00_common_router.md" + }, + { + "label": "router.ts", + "file_type": "document", + "source_file": "pages/A00_Common/frontend/A00_Common_Router.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_a00_common_frontend_a00_common_router_router_ts", + "community": 96, + "community_name": "router.ts", + "norm_label": "router.ts" + }, + { + "label": "\ud83d\udee0\ufe0f \uc8fc\uc694 \ud568\uc218 \ubaa9\ub85d", + "file_type": "document", + "source_file": "pages/A00_Common/frontend/A00_Common_Router.md", + "source_location": "L14", + "_origin": "ast", + "id": "pages_a00_common_frontend_a00_common_router_\uc8fc\uc694_\ud568\uc218_\ubaa9\ub85d", + "community": 96, + "community_name": "router.ts", + "norm_label": "\ud83d\udee0\ufe0f \u110c\u116e\u110b\u116d \u1112\u1161\u11b7\u1109\u116e \u1106\u1169\u11a8\u1105\u1169\u11a8" + }, + { + "label": "\ud83d\udd17 \uc5f0\uad00 \uac1c\ub150 \ubc0f \uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/A00_Common/frontend/A00_Common_Router.md", + "source_location": "L21", + "_origin": "ast", + "id": "pages_a00_common_frontend_a00_common_router_\uc5f0\uad00_\uac1c\ub150_\ubc0f_\uc758\uc874\uc131", + "community": 96, + "community_name": "router.ts", + "norm_label": "\ud83d\udd17 \u110b\u1167\u11ab\u1100\u116a\u11ab \u1100\u1162\u1102\u1167\u11b7 \u1106\u1175\u11be \u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "A01_components.md", + "file_type": "document", + "source_file": "pages/A01_Home/A01_components.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_a01_home_a01_components", + "community": 47, + "community_name": "A01_Home \u2014 \uc138\ubd80 \uad6c\ud604", + "norm_label": "a01_components.md" + }, + { + "label": "A01_Home \u2014 \uc138\ubd80 \uad6c\ud604", + "file_type": "document", + "source_file": "pages/A01_Home/A01_components.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_a01_home_a01_components_a01_home_\uc138\ubd80_\uad6c\ud604", + "community": 47, + "community_name": "A01_Home \u2014 \uc138\ubd80 \uad6c\ud604", + "norm_label": "a01_home \u2014 \u1109\u1166\u1107\u116e \u1100\u116e\u1112\u1167\u11ab" + }, + { + "label": "\uc2a4\ud0c0\uc77c", + "file_type": "document", + "source_file": "pages/A01_Home/A01_components.md", + "source_location": "L12", + "_origin": "ast", + "id": "pages_a01_home_a01_components_\uc2a4\ud0c0\uc77c", + "community": 47, + "community_name": "A01_Home \u2014 \uc138\ubd80 \uad6c\ud604", + "norm_label": "\u1109\u1173\u1110\u1161\u110b\u1175\u11af" + }, + { + "label": "\uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/A01_Home/A01_components.md", + "source_location": "L20", + "_origin": "ast", + "id": "pages_a01_home_a01_components_\uc758\uc874\uc131", + "community": 47, + "community_name": "A01_Home \u2014 \uc138\ubd80 \uad6c\ud604", + "norm_label": "\u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "\ub370\uc774\ud130 \ud750\ub984", + "file_type": "document", + "source_file": "pages/A01_Home/A01_components.md", + "source_location": "L27", + "_origin": "ast", + "id": "pages_a01_home_a01_components_\ub370\uc774\ud130_\ud750\ub984", + "community": 47, + "community_name": "A01_Home \u2014 \uc138\ubd80 \uad6c\ud604", + "norm_label": "\u1103\u1166\u110b\u1175\u1110\u1165 \u1112\u1173\u1105\u1173\u11b7" + }, + { + "label": "\ubbf8\ud574\uacb0", + "file_type": "document", + "source_file": "pages/A01_Home/A01_components.md", + "source_location": "L34", + "_origin": "ast", + "id": "pages_a01_home_a01_components_\ubbf8\ud574\uacb0", + "community": 47, + "community_name": "A01_Home \u2014 \uc138\ubd80 \uad6c\ud604", + "norm_label": "\u1106\u1175\u1112\u1162\u1100\u1167\u11af" + }, + { + "label": "A01_frontend.md", + "file_type": "document", + "source_file": "pages/A01_Home/A01_frontend.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_a01_home_a01_frontend", + "community": 14, + "community_name": "A01_Home \u2014 Frontend", + "norm_label": "a01_frontend.md" + }, + { + "label": "A01_Home \u2014 Frontend", + "file_type": "document", + "source_file": "pages/A01_Home/A01_frontend.md", + "source_location": "L8", + "_origin": "ast", + "id": "pages_a01_home_a01_frontend_a01_home_frontend", + "community": 14, + "community_name": "A01_Home \u2014 Frontend", + "norm_label": "a01_home \u2014 frontend" + }, + { + "label": "\ud30c\uc77c \uad6c\uc870", + "file_type": "document", + "source_file": "pages/A01_Home/A01_frontend.md", + "source_location": "L14", + "_origin": "ast", + "id": "pages_a01_home_a01_frontend_\ud30c\uc77c_\uad6c\uc870", + "community": 14, + "community_name": "A01_Home \u2014 Frontend", + "norm_label": "\u1111\u1161\u110b\u1175\u11af \u1100\u116e\u110c\u1169" + }, + { + "label": "\ucef4\ud3ec\ub10c\ud2b8", + "file_type": "document", + "source_file": "pages/A01_Home/A01_frontend.md", + "source_location": "L21", + "_origin": "ast", + "id": "pages_a01_home_a01_frontend_\ucef4\ud3ec\ub10c\ud2b8", + "community": 14, + "community_name": "A01_Home \u2014 Frontend", + "norm_label": "\u110f\u1165\u11b7\u1111\u1169\u1102\u1165\u11ab\u1110\u1173" + }, + { + "label": "Hero \uc139\uc158", + "file_type": "document", + "source_file": "pages/A01_Home/A01_frontend.md", + "source_location": "L23", + "_origin": "ast", + "id": "pages_a01_home_a01_frontend_hero_\uc139\uc158", + "community": 14, + "community_name": "A01_Home \u2014 Frontend", + "norm_label": "hero \u1109\u1166\u11a8\u1109\u1167\u11ab" + }, + { + "label": "\ucd5c\uc2e0 \uc18c\uc2dd \uc139\uc158", + "file_type": "document", + "source_file": "pages/A01_Home/A01_frontend.md", + "source_location": "L28", + "_origin": "ast", + "id": "pages_a01_home_a01_frontend_\ucd5c\uc2e0_\uc18c\uc2dd_\uc139\uc158", + "community": 14, + "community_name": "A01_Home \u2014 Frontend", + "norm_label": "\u110e\u116c\u1109\u1175\u11ab \u1109\u1169\u1109\u1175\u11a8 \u1109\u1166\u11a8\u1109\u1167\u11ab" + }, + { + "label": "\uc8fc\uc694 \uae30\ub2a5 \uc139\uc158", + "file_type": "document", + "source_file": "pages/A01_Home/A01_frontend.md", + "source_location": "L33", + "_origin": "ast", + "id": "pages_a01_home_a01_frontend_\uc8fc\uc694_\uae30\ub2a5_\uc139\uc158", + "community": 14, + "community_name": "A01_Home \u2014 Frontend", + "norm_label": "\u110c\u116e\u110b\u116d \u1100\u1175\u1102\u1173\u11bc \u1109\u1166\u11a8\u1109\u1167\u11ab" + }, + { + "label": "\uc774\ubca4\ud2b8 \ud578\ub4e4\ub7ec", + "file_type": "document", + "source_file": "pages/A01_Home/A01_frontend.md", + "source_location": "L38", + "_origin": "ast", + "id": "pages_a01_home_a01_frontend_\uc774\ubca4\ud2b8_\ud578\ub4e4\ub7ec", + "community": 14, + "community_name": "A01_Home \u2014 Frontend", + "norm_label": "\u110b\u1175\u1107\u1166\u11ab\u1110\u1173 \u1112\u1162\u11ab\u1103\u1173\u11af\u1105\u1165" + }, + { + "label": "\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", + "file_type": "document", + "source_file": "pages/A01_Home/A01_frontend.md", + "source_location": "L45", + "_origin": "ast", + "id": "pages_a01_home_a01_frontend_\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", + "community": 14, + "community_name": "A01_Home \u2014 Frontend", + "norm_label": "\u1105\u1169\u110f\u1165\u11af\u1105\u1161\u110b\u1175\u110c\u1166\u110b\u1175\u1109\u1167\u11ab" + }, + { + "label": "\uc138\ubd80 \uad6c\ud604", + "file_type": "document", + "source_file": "pages/A01_Home/A01_frontend.md", + "source_location": "L60", + "_origin": "ast", + "id": "pages_a01_home_a01_frontend_\uc138\ubd80_\uad6c\ud604", + "community": 14, + "community_name": "A01_Home \u2014 Frontend", + "norm_label": "\u1109\u1166\u1107\u116e \u1100\u116e\u1112\u1167\u11ab" + }, + { + "label": "A01_Home_UI_Page.md", + "file_type": "document", + "source_file": "pages/A01_Home/frontend/A01_Home_UI_Page.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_a01_home_frontend_a01_home_ui_page", + "community": 116, + "community_name": "A01_Home_UI_Page.md", + "norm_label": "a01_home_ui_page.md" + }, + { + "label": "A01_Home_UI_Page.ts", + "file_type": "document", + "source_file": "pages/A01_Home/frontend/A01_Home_UI_Page.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_a01_home_frontend_a01_home_ui_page_a01_home_ui_page_ts", + "community": 116, + "community_name": "A01_Home_UI_Page.md", + "norm_label": "a01_home_ui_page.ts" + }, + { + "label": "\ud83d\udee0\ufe0f \uc8fc\uc694 \ud568\uc218 \ubc0f \uc778\ud130\ud398\uc774\uc2a4 \ubaa9\ub85d", + "file_type": "document", + "source_file": "pages/A01_Home/frontend/A01_Home_UI_Page.md", + "source_location": "L14", + "_origin": "ast", + "id": "pages_a01_home_frontend_a01_home_ui_page_\uc8fc\uc694_\ud568\uc218_\ubc0f_\uc778\ud130\ud398\uc774\uc2a4_\ubaa9\ub85d", + "community": 116, + "community_name": "A01_Home_UI_Page.md", + "norm_label": "\ud83d\udee0\ufe0f \u110c\u116e\u110b\u116d \u1112\u1161\u11b7\u1109\u116e \u1106\u1175\u11be \u110b\u1175\u11ab\u1110\u1165\u1111\u1166\u110b\u1175\u1109\u1173 \u1106\u1169\u11a8\u1105\u1169\u11a8" + }, + { + "label": "\ud83d\udd17 \uc5f0\uad00 \uac1c\ub150 \ubc0f \uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/A01_Home/frontend/A01_Home_UI_Page.md", + "source_location": "L27", + "_origin": "ast", + "id": "pages_a01_home_frontend_a01_home_ui_page_\uc5f0\uad00_\uac1c\ub150_\ubc0f_\uc758\uc874\uc131", + "community": 116, + "community_name": "A01_Home_UI_Page.md", + "norm_label": "\ud83d\udd17 \u110b\u1167\u11ab\u1100\u116a\u11ab \u1100\u1162\u1102\u1167\u11b7 \u1106\u1175\u11be \u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "A02_components.md", + "file_type": "document", + "source_file": "pages/A02_ProgDetail/A02_components.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_a02_progdetail_a02_components", + "community": 48, + "community_name": "A02_ProgDetail \u2014 \uc138\ubd80 \uad6c\ud604", + "norm_label": "a02_components.md" + }, + { + "label": "A02_ProgDetail \u2014 \uc138\ubd80 \uad6c\ud604", + "file_type": "document", + "source_file": "pages/A02_ProgDetail/A02_components.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_a02_progdetail_a02_components_a02_progdetail_\uc138\ubd80_\uad6c\ud604", + "community": 48, + "community_name": "A02_ProgDetail \u2014 \uc138\ubd80 \uad6c\ud604", + "norm_label": "a02_progdetail \u2014 \u1109\u1166\u1107\u116e \u1100\u116e\u1112\u1167\u11ab" + }, + { + "label": "\uc2a4\ud0c0\uc77c (CSS)", + "file_type": "document", + "source_file": "pages/A02_ProgDetail/A02_components.md", + "source_location": "L12", + "_origin": "ast", + "id": "pages_a02_progdetail_a02_components_\uc2a4\ud0c0\uc77c_css", + "community": 48, + "community_name": "A02_ProgDetail \u2014 \uc138\ubd80 \uad6c\ud604", + "norm_label": "\u1109\u1173\u1110\u1161\u110b\u1175\u11af (css)" + }, + { + "label": "\uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/A02_ProgDetail/A02_components.md", + "source_location": "L21", + "_origin": "ast", + "id": "pages_a02_progdetail_a02_components_\uc758\uc874\uc131", + "community": 48, + "community_name": "A02_ProgDetail \u2014 \uc138\ubd80 \uad6c\ud604", + "norm_label": "\u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "\ub370\uc774\ud130 \ud750\ub984", + "file_type": "document", + "source_file": "pages/A02_ProgDetail/A02_components.md", + "source_location": "L29", + "_origin": "ast", + "id": "pages_a02_progdetail_a02_components_\ub370\uc774\ud130_\ud750\ub984", + "community": 48, + "community_name": "A02_ProgDetail \u2014 \uc138\ubd80 \uad6c\ud604", + "norm_label": "\u1103\u1166\u110b\u1175\u1110\u1165 \u1112\u1173\u1105\u1173\u11b7" + }, + { + "label": "\ubbf8\ud574\uacb0 / \ud2b9\uc774\uc0ac\ud56d", + "file_type": "document", + "source_file": "pages/A02_ProgDetail/A02_components.md", + "source_location": "L35", + "_origin": "ast", + "id": "pages_a02_progdetail_a02_components_\ubbf8\ud574\uacb0_\ud2b9\uc774\uc0ac\ud56d", + "community": 48, + "community_name": "A02_ProgDetail \u2014 \uc138\ubd80 \uad6c\ud604", + "norm_label": "\u1106\u1175\u1112\u1162\u1100\u1167\u11af / \u1110\u1173\u11a8\u110b\u1175\u1109\u1161\u1112\u1161\u11bc" + }, + { + "label": "A02_frontend.md", + "file_type": "document", + "source_file": "pages/A02_ProgDetail/A02_frontend.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_a02_progdetail_a02_frontend", + "community": 49, + "community_name": "A02_ProgDetail \u2014 Frontend", + "norm_label": "a02_frontend.md" + }, + { + "label": "A02_ProgDetail \u2014 Frontend", + "file_type": "document", + "source_file": "pages/A02_ProgDetail/A02_frontend.md", + "source_location": "L8", + "_origin": "ast", + "id": "pages_a02_progdetail_a02_frontend_a02_progdetail_frontend", + "community": 49, + "community_name": "A02_ProgDetail \u2014 Frontend", + "norm_label": "a02_progdetail \u2014 frontend" + }, + { + "label": "\uad6c\uc870", + "file_type": "document", + "source_file": "pages/A02_ProgDetail/A02_frontend.md", + "source_location": "L14", + "_origin": "ast", + "id": "pages_a02_progdetail_a02_frontend_\uad6c\uc870", + "community": 49, + "community_name": "A02_ProgDetail \u2014 Frontend", + "norm_label": "\u1100\u116e\u110c\u1169" + }, + { + "label": "\ucef4\ud3ec\ub10c\ud2b8 \ubd84\uc11d", + "file_type": "document", + "source_file": "pages/A02_ProgDetail/A02_frontend.md", + "source_location": "L19", + "_origin": "ast", + "id": "pages_a02_progdetail_a02_frontend_\ucef4\ud3ec\ub10c\ud2b8_\ubd84\uc11d", + "community": 49, + "community_name": "A02_ProgDetail \u2014 Frontend", + "norm_label": "\u110f\u1165\u11b7\u1111\u1169\u1102\u1165\u11ab\u1110\u1173 \u1107\u116e\u11ab\u1109\u1165\u11a8" + }, + { + "label": "\uc81c\uc57d \uc900\uc218", + "file_type": "document", + "source_file": "pages/A02_ProgDetail/A02_frontend.md", + "source_location": "L27", + "_origin": "ast", + "id": "pages_a02_progdetail_a02_frontend_\uc81c\uc57d_\uc900\uc218", + "community": 49, + "community_name": "A02_ProgDetail \u2014 Frontend", + "norm_label": "\u110c\u1166\u110b\u1163\u11a8 \u110c\u116e\u11ab\u1109\u116e" + }, + { + "label": "\uc138\ubd80 \uad6c\ud604", + "file_type": "document", + "source_file": "pages/A02_ProgDetail/A02_frontend.md", + "source_location": "L34", + "_origin": "ast", + "id": "pages_a02_progdetail_a02_frontend_\uc138\ubd80_\uad6c\ud604", + "community": 49, + "community_name": "A02_ProgDetail \u2014 Frontend", + "norm_label": "\u1109\u1166\u1107\u116e \u1100\u116e\u1112\u1167\u11ab" + }, + { + "label": "A02_ProgDetail_UI_Page.md", + "file_type": "document", + "source_file": "pages/A02_ProgDetail/frontend/A02_ProgDetail_UI_Page.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_a02_progdetail_frontend_a02_progdetail_ui_page", + "community": 117, + "community_name": "A02_ProgDetail_UI_Page.md", + "norm_label": "a02_progdetail_ui_page.md" + }, + { + "label": "A02_ProgDetail_UI_Page.ts", + "file_type": "document", + "source_file": "pages/A02_ProgDetail/frontend/A02_ProgDetail_UI_Page.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_a02_progdetail_frontend_a02_progdetail_ui_page_a02_progdetail_ui_page_ts", + "community": 117, + "community_name": "A02_ProgDetail_UI_Page.md", + "norm_label": "a02_progdetail_ui_page.ts" + }, + { + "label": "\ud83d\udee0\ufe0f \uc8fc\uc694 \ud568\uc218 \ubaa9\ub85d", + "file_type": "document", + "source_file": "pages/A02_ProgDetail/frontend/A02_ProgDetail_UI_Page.md", + "source_location": "L14", + "_origin": "ast", + "id": "pages_a02_progdetail_frontend_a02_progdetail_ui_page_\uc8fc\uc694_\ud568\uc218_\ubaa9\ub85d", + "community": 117, + "community_name": "A02_ProgDetail_UI_Page.md", + "norm_label": "\ud83d\udee0\ufe0f \u110c\u116e\u110b\u116d \u1112\u1161\u11b7\u1109\u116e \u1106\u1169\u11a8\u1105\u1169\u11a8" + }, + { + "label": "\ud83d\udd17 \uc5f0\uad00 \uac1c\ub150 \ubc0f \uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/A02_ProgDetail/frontend/A02_ProgDetail_UI_Page.md", + "source_location": "L25", + "_origin": "ast", + "id": "pages_a02_progdetail_frontend_a02_progdetail_ui_page_\uc5f0\uad00_\uac1c\ub150_\ubc0f_\uc758\uc874\uc131", + "community": 117, + "community_name": "A02_ProgDetail_UI_Page.md", + "norm_label": "\ud83d\udd17 \u110b\u1167\u11ab\u1100\u116a\u11ab \u1100\u1162\u1102\u1167\u11b7 \u1106\u1175\u11be \u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "A03_frontend.md", + "file_type": "document", + "source_file": "pages/A03_CompDetail/A03_frontend.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_a03_compdetail_a03_frontend", + "community": 24, + "community_name": "A03_CompDetail \u2014 Frontend", + "norm_label": "a03_frontend.md" + }, + { + "label": "A03_CompDetail \u2014 Frontend", + "file_type": "document", + "source_file": "pages/A03_CompDetail/A03_frontend.md", + "source_location": "L8", + "_origin": "ast", + "id": "pages_a03_compdetail_a03_frontend_a03_compdetail_frontend", + "community": 24, + "community_name": "A03_CompDetail \u2014 Frontend", + "norm_label": "a03_compdetail \u2014 frontend" + }, + { + "label": "\ud30c\uc77c \uad6c\uc870", + "file_type": "document", + "source_file": "pages/A03_CompDetail/A03_frontend.md", + "source_location": "L14", + "_origin": "ast", + "id": "pages_a03_compdetail_a03_frontend_\ud30c\uc77c_\uad6c\uc870", + "community": 24, + "community_name": "A03_CompDetail \u2014 Frontend", + "norm_label": "\u1111\u1161\u110b\u1175\u11af \u1100\u116e\u110c\u1169" + }, + { + "label": "\ucef4\ud3ec\ub10c\ud2b8 (\uc139\uc158 \ube4c\ub354)", + "file_type": "document", + "source_file": "pages/A03_CompDetail/A03_frontend.md", + "source_location": "L21", + "_origin": "ast", + "id": "pages_a03_compdetail_a03_frontend_\ucef4\ud3ec\ub10c\ud2b8_\uc139\uc158_\ube4c\ub354", + "community": 24, + "community_name": "A03_CompDetail \u2014 Frontend", + "norm_label": "\u110f\u1165\u11b7\u1111\u1169\u1102\u1165\u11ab\u1110\u1173 (\u1109\u1166\u11a8\u1109\u1167\u11ab \u1107\u1175\u11af\u1103\u1165)" + }, + { + "label": "\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", + "file_type": "document", + "source_file": "pages/A03_CompDetail/A03_frontend.md", + "source_location": "L31", + "_origin": "ast", + "id": "pages_a03_compdetail_a03_frontend_\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", + "community": 24, + "community_name": "A03_CompDetail \u2014 Frontend", + "norm_label": "\u1105\u1169\u110f\u1165\u11af\u1105\u1161\u110b\u1175\u110c\u1166\u110b\u1175\u1109\u1167\u11ab" + }, + { + "label": "\uc2a4\ud0c0\uc77c (CSS)", + "file_type": "document", + "source_file": "pages/A03_CompDetail/A03_frontend.md", + "source_location": "L47", + "_origin": "ast", + "id": "pages_a03_compdetail_a03_frontend_\uc2a4\ud0c0\uc77c_css", + "community": 24, + "community_name": "A03_CompDetail \u2014 Frontend", + "norm_label": "\u1109\u1173\u1110\u1161\u110b\u1175\u11af (css)" + }, + { + "label": "CSS \ud074\ub798\uc2a4 \uad6c\uc870", + "file_type": "document", + "source_file": "pages/A03_CompDetail/A03_frontend.md", + "source_location": "L49", + "_origin": "ast", + "id": "pages_a03_compdetail_a03_frontend_css_\ud074\ub798\uc2a4_\uad6c\uc870", + "community": 24, + "community_name": "A03_CompDetail \u2014 Frontend", + "norm_label": "css \u110f\u1173\u11af\u1105\u1162\u1109\u1173 \u1100\u116e\u110c\u1169" + }, + { + "label": "\ubc18\uc751\ud615", + "file_type": "document", + "source_file": "pages/A03_CompDetail/A03_frontend.md", + "source_location": "L63", + "_origin": "ast", + "id": "pages_a03_compdetail_a03_frontend_\ubc18\uc751\ud615", + "community": 24, + "community_name": "A03_CompDetail \u2014 Frontend", + "norm_label": "\u1107\u1161\u11ab\u110b\u1173\u11bc\u1112\u1167\u11bc" + }, + { + "label": "\uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/A03_CompDetail/A03_frontend.md", + "source_location": "L66", + "_origin": "ast", + "id": "pages_a03_compdetail_a03_frontend_\uc758\uc874\uc131", + "community": 24, + "community_name": "A03_CompDetail \u2014 Frontend", + "norm_label": "\u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "A04_frontend.md", + "file_type": "document", + "source_file": "pages/A04_NewsHistory/A04_frontend.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_a04_newshistory_a04_frontend", + "community": 10, + "community_name": "A04_NewsHistory \u2014 Frontend", + "norm_label": "a04_frontend.md" + }, + { + "label": "A04_NewsHistory \u2014 Frontend", + "file_type": "document", + "source_file": "pages/A04_NewsHistory/A04_frontend.md", + "source_location": "L8", + "_origin": "ast", + "id": "pages_a04_newshistory_a04_frontend_a04_newshistory_frontend", + "community": 10, + "community_name": "A04_NewsHistory \u2014 Frontend", + "norm_label": "a04_newshistory \u2014 frontend" + }, + { + "label": "\ud30c\uc77c \uad6c\uc870", + "file_type": "document", + "source_file": "pages/A04_NewsHistory/A04_frontend.md", + "source_location": "L14", + "_origin": "ast", + "id": "pages_a04_newshistory_a04_frontend_\ud30c\uc77c_\uad6c\uc870", + "community": 10, + "community_name": "A04_NewsHistory \u2014 Frontend", + "norm_label": "\u1111\u1161\u110b\u1175\u11af \u1100\u116e\u110c\u1169" + }, + { + "label": "\ucef4\ud3ec\ub10c\ud2b8 (\uc139\uc158 \ube4c\ub354)", + "file_type": "document", + "source_file": "pages/A04_NewsHistory/A04_frontend.md", + "source_location": "L21", + "_origin": "ast", + "id": "pages_a04_newshistory_a04_frontend_\ucef4\ud3ec\ub10c\ud2b8_\uc139\uc158_\ube4c\ub354", + "community": 10, + "community_name": "A04_NewsHistory \u2014 Frontend", + "norm_label": "\u110f\u1165\u11b7\u1111\u1169\u1102\u1165\u11ab\u1110\u1173 (\u1109\u1166\u11a8\u1109\u1167\u11ab \u1107\u1175\u11af\u1103\u1165)" + }, + { + "label": "Mock \ub370\uc774\ud130 \uad6c\uc870", + "file_type": "document", + "source_file": "pages/A04_NewsHistory/A04_frontend.md", + "source_location": "L32", + "_origin": "ast", + "id": "pages_a04_newshistory_a04_frontend_mock_\ub370\uc774\ud130_\uad6c\uc870", + "community": 10, + "community_name": "A04_NewsHistory \u2014 Frontend", + "norm_label": "mock \u1103\u1166\u110b\u1175\u1110\u1165 \u1100\u116e\u110c\u1169" + }, + { + "label": "\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", + "file_type": "document", + "source_file": "pages/A04_NewsHistory/A04_frontend.md", + "source_location": "L50", + "_origin": "ast", + "id": "pages_a04_newshistory_a04_frontend_\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", + "community": 10, + "community_name": "A04_NewsHistory \u2014 Frontend", + "norm_label": "\u1105\u1169\u110f\u1165\u11af\u1105\u1161\u110b\u1175\u110c\u1166\u110b\u1175\u1109\u1167\u11ab" + }, + { + "label": "\uc2a4\ud0c0\uc77c (CSS)", + "file_type": "document", + "source_file": "pages/A04_NewsHistory/A04_frontend.md", + "source_location": "L62", + "_origin": "ast", + "id": "pages_a04_newshistory_a04_frontend_\uc2a4\ud0c0\uc77c_css", + "community": 10, + "community_name": "A04_NewsHistory \u2014 Frontend", + "norm_label": "\u1109\u1173\u1110\u1161\u110b\u1175\u11af (css)" + }, + { + "label": "CSS \ud074\ub798\uc2a4 \uad6c\uc870", + "file_type": "document", + "source_file": "pages/A04_NewsHistory/A04_frontend.md", + "source_location": "L64", + "_origin": "ast", + "id": "pages_a04_newshistory_a04_frontend_css_\ud074\ub798\uc2a4_\uad6c\uc870", + "community": 10, + "community_name": "A04_NewsHistory \u2014 Frontend", + "norm_label": "css \u110f\u1173\u11af\u1105\u1162\u1109\u1173 \u1100\u116e\u110c\u1169" + }, + { + "label": "\ubc18\uc751\ud615", + "file_type": "document", + "source_file": "pages/A04_NewsHistory/A04_frontend.md", + "source_location": "L77", + "_origin": "ast", + "id": "pages_a04_newshistory_a04_frontend_\ubc18\uc751\ud615", + "community": 10, + "community_name": "A04_NewsHistory \u2014 Frontend", + "norm_label": "\u1107\u1161\u11ab\u110b\u1173\u11bc\u1112\u1167\u11bc" + }, + { + "label": "\uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/A04_NewsHistory/A04_frontend.md", + "source_location": "L80", + "_origin": "ast", + "id": "pages_a04_newshistory_a04_frontend_\uc758\uc874\uc131", + "community": 10, + "community_name": "A04_NewsHistory \u2014 Frontend", + "norm_label": "\u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "\ubbf8\ud574\uacb0 \uc0ac\ud56d", + "file_type": "document", + "source_file": "pages/A04_NewsHistory/A04_frontend.md", + "source_location": "L85", + "_origin": "ast", + "id": "pages_a04_newshistory_a04_frontend_\ubbf8\ud574\uacb0_\uc0ac\ud56d", + "community": 10, + "community_name": "A04_NewsHistory \u2014 Frontend", + "norm_label": "\u1106\u1175\u1112\u1162\u1100\u1167\u11af \u1109\u1161\u1112\u1161\u11bc" + }, + { + "label": "A05_frontend.md", + "file_type": "document", + "source_file": "pages/A05_EduDetail/A05_frontend.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_a05_edudetail_a05_frontend", + "community": 15, + "community_name": "A05_EduDetail \u2014 Frontend", + "norm_label": "a05_frontend.md" + }, + { + "label": "A05_EduDetail \u2014 Frontend", + "file_type": "document", + "source_file": "pages/A05_EduDetail/A05_frontend.md", + "source_location": "L8", + "_origin": "ast", + "id": "pages_a05_edudetail_a05_frontend_a05_edudetail_frontend", + "community": 15, + "community_name": "A05_EduDetail \u2014 Frontend", + "norm_label": "a05_edudetail \u2014 frontend" + }, + { + "label": "\ud30c\uc77c \uad6c\uc870", + "file_type": "document", + "source_file": "pages/A05_EduDetail/A05_frontend.md", + "source_location": "L14", + "_origin": "ast", + "id": "pages_a05_edudetail_a05_frontend_\ud30c\uc77c_\uad6c\uc870", + "community": 15, + "community_name": "A05_EduDetail \u2014 Frontend", + "norm_label": "\u1111\u1161\u110b\u1175\u11af \u1100\u116e\u110c\u1169" + }, + { + "label": "\ucef4\ud3ec\ub10c\ud2b8 (\uc139\uc158 \ube4c\ub354)", + "file_type": "document", + "source_file": "pages/A05_EduDetail/A05_frontend.md", + "source_location": "L21", + "_origin": "ast", + "id": "pages_a05_edudetail_a05_frontend_\ucef4\ud3ec\ub10c\ud2b8_\uc139\uc158_\ube4c\ub354", + "community": 15, + "community_name": "A05_EduDetail \u2014 Frontend", + "norm_label": "\u110f\u1165\u11b7\u1111\u1169\u1102\u1165\u11ab\u1110\u1173 (\u1109\u1166\u11a8\u1109\u1167\u11ab \u1107\u1175\u11af\u1103\u1165)" + }, + { + "label": "\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", + "file_type": "document", + "source_file": "pages/A05_EduDetail/A05_frontend.md", + "source_location": "L30", + "_origin": "ast", + "id": "pages_a05_edudetail_a05_frontend_\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", + "community": 15, + "community_name": "A05_EduDetail \u2014 Frontend", + "norm_label": "\u1105\u1169\u110f\u1165\u11af\u1105\u1161\u110b\u1175\u110c\u1166\u110b\u1175\u1109\u1167\u11ab" + }, + { + "label": "\uc2a4\ud0c0\uc77c (CSS)", + "file_type": "document", + "source_file": "pages/A05_EduDetail/A05_frontend.md", + "source_location": "L43", + "_origin": "ast", + "id": "pages_a05_edudetail_a05_frontend_\uc2a4\ud0c0\uc77c_css", + "community": 15, + "community_name": "A05_EduDetail \u2014 Frontend", + "norm_label": "\u1109\u1173\u1110\u1161\u110b\u1175\u11af (css)" + }, + { + "label": "CSS \ud074\ub798\uc2a4 \uad6c\uc870", + "file_type": "document", + "source_file": "pages/A05_EduDetail/A05_frontend.md", + "source_location": "L45", + "_origin": "ast", + "id": "pages_a05_edudetail_a05_frontend_css_\ud074\ub798\uc2a4_\uad6c\uc870", + "community": 15, + "community_name": "A05_EduDetail \u2014 Frontend", + "norm_label": "css \u110f\u1173\u11af\u1105\u1162\u1109\u1173 \u1100\u116e\u110c\u1169" + }, + { + "label": "\ubc18\uc751\ud615", + "file_type": "document", + "source_file": "pages/A05_EduDetail/A05_frontend.md", + "source_location": "L58", + "_origin": "ast", + "id": "pages_a05_edudetail_a05_frontend_\ubc18\uc751\ud615", + "community": 15, + "community_name": "A05_EduDetail \u2014 Frontend", + "norm_label": "\u1107\u1161\u11ab\u110b\u1173\u11bc\u1112\u1167\u11bc" + }, + { + "label": "\uc774\ubca4\ud2b8 \ud578\ub4e4\ub7ec", + "file_type": "document", + "source_file": "pages/A05_EduDetail/A05_frontend.md", + "source_location": "L61", + "_origin": "ast", + "id": "pages_a05_edudetail_a05_frontend_\uc774\ubca4\ud2b8_\ud578\ub4e4\ub7ec", + "community": 15, + "community_name": "A05_EduDetail \u2014 Frontend", + "norm_label": "\u110b\u1175\u1107\u1166\u11ab\u1110\u1173 \u1112\u1162\u11ab\u1103\u1173\u11af\u1105\u1165" + }, + { + "label": "\uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/A05_EduDetail/A05_frontend.md", + "source_location": "L67", + "_origin": "ast", + "id": "pages_a05_edudetail_a05_frontend_\uc758\uc874\uc131", + "community": 15, + "community_name": "A05_EduDetail \u2014 Frontend", + "norm_label": "\u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "A06_backend.md", + "file_type": "document", + "source_file": "pages/A06_Login/A06_backend.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_a06_login_a06_backend", + "community": 25, + "community_name": "A06_Login \u2014 Backend", + "norm_label": "a06_backend.md" + }, + { + "label": "A06_Login \u2014 Backend", + "file_type": "document", + "source_file": "pages/A06_Login/A06_backend.md", + "source_location": "L9", + "_origin": "ast", + "id": "pages_a06_login_a06_backend_a06_login_backend", + "community": 25, + "community_name": "A06_Login \u2014 Backend", + "norm_label": "a06_login \u2014 backend" + }, + { + "label": "\ud30c\uc77c \uad6c\uc870", + "file_type": "document", + "source_file": "pages/A06_Login/A06_backend.md", + "source_location": "L13", + "_origin": "ast", + "id": "pages_a06_login_a06_backend_\ud30c\uc77c_\uad6c\uc870", + "community": 25, + "community_name": "A06_Login \u2014 Backend", + "norm_label": "\u1111\u1161\u110b\u1175\u11af \u1100\u116e\u110c\u1169" + }, + { + "label": "API \uc5d4\ub4dc\ud3ec\uc778\ud2b8", + "file_type": "document", + "source_file": "pages/A06_Login/A06_backend.md", + "source_location": "L20", + "_origin": "ast", + "id": "pages_a06_login_a06_backend_api_\uc5d4\ub4dc\ud3ec\uc778\ud2b8", + "community": 25, + "community_name": "A06_Login \u2014 Backend", + "norm_label": "api \u110b\u1166\u11ab\u1103\u1173\u1111\u1169\u110b\u1175\u11ab\u1110\u1173" + }, + { + "label": "\ub0b4\ubd80 \ud5ec\ud37c", + "file_type": "document", + "source_file": "pages/A06_Login/A06_backend.md", + "source_location": "L30", + "_origin": "ast", + "id": "pages_a06_login_a06_backend_\ub0b4\ubd80_\ud5ec\ud37c", + "community": 25, + "community_name": "A06_Login \u2014 Backend", + "norm_label": "\u1102\u1162\u1107\u116e \u1112\u1166\u11af\u1111\u1165" + }, + { + "label": "\uc694\uccad \uc2a4\ud0a4\ub9c8 (Pydantic)", + "file_type": "document", + "source_file": "pages/A06_Login/A06_backend.md", + "source_location": "L37", + "_origin": "ast", + "id": "pages_a06_login_a06_backend_\uc694\uccad_\uc2a4\ud0a4\ub9c8_pydantic", + "community": 25, + "community_name": "A06_Login \u2014 Backend", + "norm_label": "\u110b\u116d\u110e\u1165\u11bc \u1109\u1173\u110f\u1175\u1106\u1161 (pydantic)" + }, + { + "label": "\ub85c\uadf8\uc778 \ub85c\uc9c1 \ud750\ub984", + "file_type": "document", + "source_file": "pages/A06_Login/A06_backend.md", + "source_location": "L45", + "_origin": "ast", + "id": "pages_a06_login_a06_backend_\ub85c\uadf8\uc778_\ub85c\uc9c1_\ud750\ub984", + "community": 25, + "community_name": "A06_Login \u2014 Backend", + "norm_label": "\u1105\u1169\u1100\u1173\u110b\u1175\u11ab \u1105\u1169\u110c\u1175\u11a8 \u1112\u1173\u1105\u1173\u11b7" + }, + { + "label": "\ubcf4\uc548 \uc815\ucc45 (\uc2e4 \ucf54\ub4dc \uae30\uc900)", + "file_type": "document", + "source_file": "pages/A06_Login/A06_backend.md", + "source_location": "L54", + "_origin": "ast", + "id": "pages_a06_login_a06_backend_\ubcf4\uc548_\uc815\ucc45_\uc2e4_\ucf54\ub4dc_\uae30\uc900", + "community": 25, + "community_name": "A06_Login \u2014 Backend", + "norm_label": "\u1107\u1169\u110b\u1161\u11ab \u110c\u1165\u11bc\u110e\u1162\u11a8 (\u1109\u1175\u11af \u110f\u1169\u1103\u1173 \u1100\u1175\u110c\u116e\u11ab)" + }, + { + "label": "\uc758\uc874\uc131 (\uacf5\ud1b5 \uc720\ud2f8)", + "file_type": "document", + "source_file": "pages/A06_Login/A06_backend.md", + "source_location": "L61", + "_origin": "ast", + "id": "pages_a06_login_a06_backend_\uc758\uc874\uc131_\uacf5\ud1b5_\uc720\ud2f8", + "community": 25, + "community_name": "A06_Login \u2014 Backend", + "norm_label": "\u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc (\u1100\u1169\u11bc\u1110\u1169\u11bc \u110b\u1172\u1110\u1175\u11af)" + }, + { + "label": "A06_frontend.md", + "file_type": "document", + "source_file": "pages/A06_Login/A06_frontend.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_a06_login_a06_frontend", + "community": 16, + "community_name": "A06_Login \u2014 Frontend", + "norm_label": "a06_frontend.md" + }, + { + "label": "A06_Login \u2014 Frontend", + "file_type": "document", + "source_file": "pages/A06_Login/A06_frontend.md", + "source_location": "L9", + "_origin": "ast", + "id": "pages_a06_login_a06_frontend_a06_login_frontend", + "community": 16, + "community_name": "A06_Login \u2014 Frontend", + "norm_label": "a06_login \u2014 frontend" + }, + { + "label": "\ud30c\uc77c \uad6c\uc870", + "file_type": "document", + "source_file": "pages/A06_Login/A06_frontend.md", + "source_location": "L13", + "_origin": "ast", + "id": "pages_a06_login_a06_frontend_\ud30c\uc77c_\uad6c\uc870", + "community": 16, + "community_name": "A06_Login \u2014 Frontend", + "norm_label": "\u1111\u1161\u110b\u1175\u11af \u1100\u116e\u110c\u1169" + }, + { + "label": "\ucef4\ud3ec\ub10c\ud2b8 / \ud568\uc218", + "file_type": "document", + "source_file": "pages/A06_Login/A06_frontend.md", + "source_location": "L21", + "_origin": "ast", + "id": "pages_a06_login_a06_frontend_\ucef4\ud3ec\ub10c\ud2b8_\ud568\uc218", + "community": 16, + "community_name": "A06_Login \u2014 Frontend", + "norm_label": "\u110f\u1165\u11b7\u1111\u1169\u1102\u1165\u11ab\u1110\u1173 / \u1112\u1161\u11b7\u1109\u116e" + }, + { + "label": "API \ud074\ub77c\uc774\uc5b8\ud2b8 \ud568\uc218", + "file_type": "document", + "source_file": "pages/A06_Login/A06_frontend.md", + "source_location": "L30", + "_origin": "ast", + "id": "pages_a06_login_a06_frontend_api_\ud074\ub77c\uc774\uc5b8\ud2b8_\ud568\uc218", + "community": 16, + "community_name": "A06_Login \u2014 Frontend", + "norm_label": "api \u110f\u1173\u11af\u1105\u1161\u110b\u1175\u110b\u1165\u11ab\u1110\u1173 \u1112\u1161\u11b7\u1109\u116e" + }, + { + "label": "\uc81c\ucd9c \ubc0f OTP \uc81c\uc5b4 \ub85c\uc9c1 (2\ub2e8\uacc4 \ud3fc \uc804\ud658)", + "file_type": "document", + "source_file": "pages/A06_Login/A06_frontend.md", + "source_location": "L43", + "_origin": "ast", + "id": "pages_a06_login_a06_frontend_\uc81c\ucd9c_\ubc0f_otp_\uc81c\uc5b4_\ub85c\uc9c1_2\ub2e8\uacc4_\ud3fc_\uc804\ud658", + "community": 16, + "community_name": "A06_Login \u2014 Frontend", + "norm_label": "\u110c\u1166\u110e\u116e\u11af \u1106\u1175\u11be otp \u110c\u1166\u110b\u1165 \u1105\u1169\u110c\u1175\u11a8 (2\u1103\u1161\u11ab\u1100\u1168 \u1111\u1169\u11b7 \u110c\u1165\u11ab\u1112\u116a\u11ab)" + }, + { + "label": "\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", + "file_type": "document", + "source_file": "pages/A06_Login/A06_frontend.md", + "source_location": "L56", + "_origin": "ast", + "id": "pages_a06_login_a06_frontend_\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", + "community": 16, + "community_name": "A06_Login \u2014 Frontend", + "norm_label": "\u1105\u1169\u110f\u1165\u11af\u1105\u1161\u110b\u1175\u110c\u1166\u110b\u1175\u1109\u1167\u11ab" + }, + { + "label": "\uc2a4\ud0c0\uc77c (CSS)", + "file_type": "document", + "source_file": "pages/A06_Login/A06_frontend.md", + "source_location": "L70", + "_origin": "ast", + "id": "pages_a06_login_a06_frontend_\uc2a4\ud0c0\uc77c_css", + "community": 16, + "community_name": "A06_Login \u2014 Frontend", + "norm_label": "\u1109\u1173\u1110\u1161\u110b\u1175\u11af (css)" + }, + { + "label": "\uc774\ubca4\ud2b8 \ud578\ub4e4\ub7ec", + "file_type": "document", + "source_file": "pages/A06_Login/A06_frontend.md", + "source_location": "L78", + "_origin": "ast", + "id": "pages_a06_login_a06_frontend_\uc774\ubca4\ud2b8_\ud578\ub4e4\ub7ec", + "community": 16, + "community_name": "A06_Login \u2014 Frontend", + "norm_label": "\u110b\u1175\u1107\u1166\u11ab\u1110\u1173 \u1112\u1162\u11ab\u1103\u1173\u11af\u1105\u1165" + }, + { + "label": "\uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/A06_Login/A06_frontend.md", + "source_location": "L87", + "_origin": "ast", + "id": "pages_a06_login_a06_frontend_\uc758\uc874\uc131", + "community": 16, + "community_name": "A06_Login \u2014 Frontend", + "norm_label": "\u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "A06_Login_Router.md", + "file_type": "document", + "source_file": "pages/A06_Login/backend/A06_Login_Router.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_a06_login_backend_a06_login_router", + "community": 118, + "community_name": "A06_Login_Router.md", + "norm_label": "a06_login_router.md" + }, + { + "label": "A06_Login_Router.py", + "file_type": "document", + "source_file": "pages/A06_Login/backend/A06_Login_Router.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_a06_login_backend_a06_login_router_a06_login_router_py", + "community": 118, + "community_name": "A06_Login_Router.md", + "norm_label": "a06_login_router.py" + }, + { + "label": "\ud83d\udee0\ufe0f \ub77c\uc6b0\ud130 API \ubc0f \uc8fc\uc694 \ud5ec\ud37c \ud568\uc218 \ubaa9\ub85d", + "file_type": "document", + "source_file": "pages/A06_Login/backend/A06_Login_Router.md", + "source_location": "L14", + "_origin": "ast", + "id": "pages_a06_login_backend_a06_login_router_\ub77c\uc6b0\ud130_api_\ubc0f_\uc8fc\uc694_\ud5ec\ud37c_\ud568\uc218_\ubaa9\ub85d", + "community": 118, + "community_name": "A06_Login_Router.md", + "norm_label": "\ud83d\udee0\ufe0f \u1105\u1161\u110b\u116e\u1110\u1165 api \u1106\u1175\u11be \u110c\u116e\u110b\u116d \u1112\u1166\u11af\u1111\u1165 \u1112\u1161\u11b7\u1109\u116e \u1106\u1169\u11a8\u1105\u1169\u11a8" + }, + { + "label": "\ud83d\udd17 \uc5f0\uad00 \uac1c\ub150 \ubc0f \uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/A06_Login/backend/A06_Login_Router.md", + "source_location": "L26", + "_origin": "ast", + "id": "pages_a06_login_backend_a06_login_router_\uc5f0\uad00_\uac1c\ub150_\ubc0f_\uc758\uc874\uc131", + "community": 118, + "community_name": "A06_Login_Router.md", + "norm_label": "\ud83d\udd17 \u110b\u1167\u11ab\u1100\u116a\u11ab \u1100\u1162\u1102\u1167\u11b7 \u1106\u1175\u11be \u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "A07_backend.md", + "file_type": "document", + "source_file": "pages/A07_Register/A07_backend.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_a07_register_a07_backend", + "community": 27, + "community_name": "A07_Register \u2014 Backend", + "norm_label": "a07_backend.md" + }, + { + "label": "A07_Register \u2014 Backend", + "file_type": "document", + "source_file": "pages/A07_Register/A07_backend.md", + "source_location": "L9", + "_origin": "ast", + "id": "pages_a07_register_a07_backend_a07_register_backend", + "community": 27, + "community_name": "A07_Register \u2014 Backend", + "norm_label": "a07_register \u2014 backend" + }, + { + "label": "\ud30c\uc77c \uad6c\uc870", + "file_type": "document", + "source_file": "pages/A07_Register/A07_backend.md", + "source_location": "L13", + "_origin": "ast", + "id": "pages_a07_register_a07_backend_\ud30c\uc77c_\uad6c\uc870", + "community": 27, + "community_name": "A07_Register \u2014 Backend", + "norm_label": "\u1111\u1161\u110b\u1175\u11af \u1100\u116e\u110c\u1169" + }, + { + "label": "API \uc5d4\ub4dc\ud3ec\uc778\ud2b8", + "file_type": "document", + "source_file": "pages/A07_Register/A07_backend.md", + "source_location": "L20", + "_origin": "ast", + "id": "pages_a07_register_a07_backend_api_\uc5d4\ub4dc\ud3ec\uc778\ud2b8", + "community": 27, + "community_name": "A07_Register \u2014 Backend", + "norm_label": "api \u110b\u1166\u11ab\u1103\u1173\u1111\u1169\u110b\u1175\u11ab\u1110\u1173" + }, + { + "label": "\uc694\uccad \uc2a4\ud0a4\ub9c8 (Pydantic)", + "file_type": "document", + "source_file": "pages/A07_Register/A07_backend.md", + "source_location": "L28", + "_origin": "ast", + "id": "pages_a07_register_a07_backend_\uc694\uccad_\uc2a4\ud0a4\ub9c8_pydantic", + "community": 27, + "community_name": "A07_Register \u2014 Backend", + "norm_label": "\u110b\u116d\u110e\u1165\u11bc \u1109\u1173\u110f\u1175\u1106\u1161 (pydantic)" + }, + { + "label": "\uac00\uc785 \ub85c\uc9c1 \ud750\ub984", + "file_type": "document", + "source_file": "pages/A07_Register/A07_backend.md", + "source_location": "L37", + "_origin": "ast", + "id": "pages_a07_register_a07_backend_\uac00\uc785_\ub85c\uc9c1_\ud750\ub984", + "community": 27, + "community_name": "A07_Register \u2014 Backend", + "norm_label": "\u1100\u1161\u110b\u1175\u11b8 \u1105\u1169\u110c\u1175\u11a8 \u1112\u1173\u1105\u1173\u11b7" + }, + { + "label": "\uc758\uc874\uc131 (\uacf5\ud1b5 \uc720\ud2f8)", + "file_type": "document", + "source_file": "pages/A07_Register/A07_backend.md", + "source_location": "L50", + "_origin": "ast", + "id": "pages_a07_register_a07_backend_\uc758\uc874\uc131_\uacf5\ud1b5_\uc720\ud2f8", + "community": 27, + "community_name": "A07_Register \u2014 Backend", + "norm_label": "\u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc (\u1100\u1169\u11bc\u1110\u1169\u11bc \u110b\u1172\u1110\u1175\u11af)" + }, + { + "label": "\ucc38\uace0", + "file_type": "document", + "source_file": "pages/A07_Register/A07_backend.md", + "source_location": "L56", + "_origin": "ast", + "id": "pages_a07_register_a07_backend_\ucc38\uace0", + "community": 27, + "community_name": "A07_Register \u2014 Backend", + "norm_label": "\u110e\u1161\u11b7\u1100\u1169" + }, + { + "label": "A07_frontend.md", + "file_type": "document", + "source_file": "pages/A07_Register/A07_frontend.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_a07_register_a07_frontend", + "community": 11, + "community_name": "A07_Register \u2014 Frontend", + "norm_label": "a07_frontend.md" + }, + { + "label": "A07_Register \u2014 Frontend", + "file_type": "document", + "source_file": "pages/A07_Register/A07_frontend.md", + "source_location": "L8", + "_origin": "ast", + "id": "pages_a07_register_a07_frontend_a07_register_frontend", + "community": 11, + "community_name": "A07_Register \u2014 Frontend", + "norm_label": "a07_register \u2014 frontend" + }, + { + "label": "\ud30c\uc77c \uad6c\uc870", + "file_type": "document", + "source_file": "pages/A07_Register/A07_frontend.md", + "source_location": "L12", + "_origin": "ast", + "id": "pages_a07_register_a07_frontend_\ud30c\uc77c_\uad6c\uc870", + "community": 11, + "community_name": "A07_Register \u2014 Frontend", + "norm_label": "\u1111\u1161\u110b\u1175\u11af \u1100\u116e\u110c\u1169" + }, + { + "label": "\ucef4\ud3ec\ub10c\ud2b8 / \ud568\uc218 (UI_Auth_Page \u2014 \uc2e4\uc0ac\uc6a9)", + "file_type": "document", + "source_file": "pages/A07_Register/A07_frontend.md", + "source_location": "L24", + "_origin": "ast", + "id": "pages_a07_register_a07_frontend_\ucef4\ud3ec\ub10c\ud2b8_\ud568\uc218_ui_auth_page_\uc2e4\uc0ac\uc6a9", + "community": 11, + "community_name": "A07_Register \u2014 Frontend", + "norm_label": "\u110f\u1165\u11b7\u1111\u1169\u1102\u1165\u11ab\u1110\u1173 / \u1112\u1161\u11b7\u1109\u116e (ui_auth_page \u2014 \u1109\u1175\u11af\u1109\u1161\u110b\u116d\u11bc)" + }, + { + "label": "API \ud074\ub77c\uc774\uc5b8\ud2b8 \ud568\uc218", + "file_type": "document", + "source_file": "pages/A07_Register/A07_frontend.md", + "source_location": "L33", + "_origin": "ast", + "id": "pages_a07_register_a07_frontend_api_\ud074\ub77c\uc774\uc5b8\ud2b8_\ud568\uc218", + "community": 11, + "community_name": "A07_Register \u2014 Frontend", + "norm_label": "api \u110f\u1173\u11af\u1105\u1161\u110b\u1175\u110b\u1165\u11ab\u1110\u1173 \u1112\u1161\u11b7\u1109\u116e" + }, + { + "label": "\uc81c\ucd9c \ub85c\uc9c1 (2\ub2e8\uacc4 \ud3fc \uc804\ud658)", + "file_type": "document", + "source_file": "pages/A07_Register/A07_frontend.md", + "source_location": "L43", + "_origin": "ast", + "id": "pages_a07_register_a07_frontend_\uc81c\ucd9c_\ub85c\uc9c1_2\ub2e8\uacc4_\ud3fc_\uc804\ud658", + "community": 11, + "community_name": "A07_Register \u2014 Frontend", + "norm_label": "\u110c\u1166\u110e\u116e\u11af \u1105\u1169\u110c\u1175\u11a8 (2\u1103\u1161\u11ab\u1100\u1168 \u1111\u1169\u11b7 \u110c\u1165\u11ab\u1112\u116a\u11ab)" + }, + { + "label": "\uc57d\uad00 \ub3d9\uc758 (\uc544\ucf54\ub514\uc5b8)", + "file_type": "document", + "source_file": "pages/A07_Register/A07_frontend.md", + "source_location": "L50", + "_origin": "ast", + "id": "pages_a07_register_a07_frontend_\uc57d\uad00_\ub3d9\uc758_\uc544\ucf54\ub514\uc5b8", + "community": 11, + "community_name": "A07_Register \u2014 Frontend", + "norm_label": "\u110b\u1163\u11a8\u1100\u116a\u11ab \u1103\u1169\u11bc\u110b\u1174 (\u110b\u1161\u110f\u1169\u1103\u1175\u110b\u1165\u11ab)" + }, + { + "label": "\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", + "file_type": "document", + "source_file": "pages/A07_Register/A07_frontend.md", + "source_location": "L56", + "_origin": "ast", + "id": "pages_a07_register_a07_frontend_\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", + "community": 11, + "community_name": "A07_Register \u2014 Frontend", + "norm_label": "\u1105\u1169\u110f\u1165\u11af\u1105\u1161\u110b\u1175\u110c\u1166\u110b\u1175\u1109\u1167\u11ab" + }, + { + "label": "\uc2a4\ud0c0\uc77c (CSS)", + "file_type": "document", + "source_file": "pages/A07_Register/A07_frontend.md", + "source_location": "L70", + "_origin": "ast", + "id": "pages_a07_register_a07_frontend_\uc2a4\ud0c0\uc77c_css", + "community": 11, + "community_name": "A07_Register \u2014 Frontend", + "norm_label": "\u1109\u1173\u1110\u1161\u110b\u1175\u11af (css)" + }, + { + "label": "\uc774\ubca4\ud2b8 \ud578\ub4e4\ub7ec", + "file_type": "document", + "source_file": "pages/A07_Register/A07_frontend.md", + "source_location": "L77", + "_origin": "ast", + "id": "pages_a07_register_a07_frontend_\uc774\ubca4\ud2b8_\ud578\ub4e4\ub7ec", + "community": 11, + "community_name": "A07_Register \u2014 Frontend", + "norm_label": "\u110b\u1175\u1107\u1166\u11ab\u1110\u1173 \u1112\u1162\u11ab\u1103\u1173\u11af\u1105\u1165" + }, + { + "label": "\uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/A07_Register/A07_frontend.md", + "source_location": "L85", + "_origin": "ast", + "id": "pages_a07_register_a07_frontend_\uc758\uc874\uc131", + "community": 11, + "community_name": "A07_Register \u2014 Frontend", + "norm_label": "\u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "A07_Register_Router.md", + "file_type": "document", + "source_file": "pages/A07_Register/backend/A07_Register_Router.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_a07_register_backend_a07_register_router", + "community": 119, + "community_name": "A07_Register_Router.md", + "norm_label": "a07_register_router.md" + }, + { + "label": "A07_Register_Router.py", + "file_type": "document", + "source_file": "pages/A07_Register/backend/A07_Register_Router.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_a07_register_backend_a07_register_router_a07_register_router_py", + "community": 119, + "community_name": "A07_Register_Router.md", + "norm_label": "a07_register_router.py" + }, + { + "label": "\ud83d\udee0\ufe0f \ub77c\uc6b0\ud130 API \ubc0f \uc8fc\uc694 \ud568\uc218 \ubaa9\ub85d", + "file_type": "document", + "source_file": "pages/A07_Register/backend/A07_Register_Router.md", + "source_location": "L14", + "_origin": "ast", + "id": "pages_a07_register_backend_a07_register_router_\ub77c\uc6b0\ud130_api_\ubc0f_\uc8fc\uc694_\ud568\uc218_\ubaa9\ub85d", + "community": 119, + "community_name": "A07_Register_Router.md", + "norm_label": "\ud83d\udee0\ufe0f \u1105\u1161\u110b\u116e\u1110\u1165 api \u1106\u1175\u11be \u110c\u116e\u110b\u116d \u1112\u1161\u11b7\u1109\u116e \u1106\u1169\u11a8\u1105\u1169\u11a8" + }, + { + "label": "\ud83d\udd17 \uc5f0\uad00 \uac1c\ub150 \ubc0f \uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/A07_Register/backend/A07_Register_Router.md", + "source_location": "L22", + "_origin": "ast", + "id": "pages_a07_register_backend_a07_register_router_\uc5f0\uad00_\uac1c\ub150_\ubc0f_\uc758\uc874\uc131", + "community": 119, + "community_name": "A07_Register_Router.md", + "norm_label": "\ud83d\udd17 \u110b\u1167\u11ab\u1100\u116a\u11ab \u1100\u1162\u1102\u1167\u11b7 \u1106\u1175\u11be \u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "A08_backend.md", + "file_type": "document", + "source_file": "pages/A08_Support/A08_backend.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_a08_support_a08_backend", + "community": 17, + "community_name": "A08_Support \u2014 Backend", + "norm_label": "a08_backend.md" + }, + { + "label": "A08_Support \u2014 Backend", + "file_type": "document", + "source_file": "pages/A08_Support/A08_backend.md", + "source_location": "L9", + "_origin": "ast", + "id": "pages_a08_support_a08_backend_a08_support_backend", + "community": 17, + "community_name": "A08_Support \u2014 Backend", + "norm_label": "a08_support \u2014 backend" + }, + { + "label": "\ud30c\uc77c \uad6c\uc870", + "file_type": "document", + "source_file": "pages/A08_Support/A08_backend.md", + "source_location": "L13", + "_origin": "ast", + "id": "pages_a08_support_a08_backend_\ud30c\uc77c_\uad6c\uc870", + "community": 17, + "community_name": "A08_Support \u2014 Backend", + "norm_label": "\u1111\u1161\u110b\u1175\u11af \u1100\u116e\u110c\u1169" + }, + { + "label": "API \uc5d4\ub4dc\ud3ec\uc778\ud2b8", + "file_type": "document", + "source_file": "pages/A08_Support/A08_backend.md", + "source_location": "L20", + "_origin": "ast", + "id": "pages_a08_support_a08_backend_api_\uc5d4\ub4dc\ud3ec\uc778\ud2b8", + "community": 17, + "community_name": "A08_Support \u2014 Backend", + "norm_label": "api \u110b\u1166\u11ab\u1103\u1173\u1111\u1169\u110b\u1175\u11ab\u1110\u1173" + }, + { + "label": "\ub0b4\ubd80 \ud5ec\ud37c", + "file_type": "document", + "source_file": "pages/A08_Support/A08_backend.md", + "source_location": "L26", + "_origin": "ast", + "id": "pages_a08_support_a08_backend_\ub0b4\ubd80_\ud5ec\ud37c", + "community": 17, + "community_name": "A08_Support \u2014 Backend", + "norm_label": "\u1102\u1162\u1107\u116e \u1112\u1166\u11af\u1111\u1165" + }, + { + "label": "\uc694\uccad \uc2a4\ud0a4\ub9c8 (Pydantic)", + "file_type": "document", + "source_file": "pages/A08_Support/A08_backend.md", + "source_location": "L32", + "_origin": "ast", + "id": "pages_a08_support_a08_backend_\uc694\uccad_\uc2a4\ud0a4\ub9c8_pydantic", + "community": 17, + "community_name": "A08_Support \u2014 Backend", + "norm_label": "\u110b\u116d\u110e\u1165\u11bc \u1109\u1173\u110f\u1175\u1106\u1161 (pydantic)" + }, + { + "label": "\uc811\uc218 \ub85c\uc9c1", + "file_type": "document", + "source_file": "pages/A08_Support/A08_backend.md", + "source_location": "L38", + "_origin": "ast", + "id": "pages_a08_support_a08_backend_\uc811\uc218_\ub85c\uc9c1", + "community": 17, + "community_name": "A08_Support \u2014 Backend", + "norm_label": "\u110c\u1165\u11b8\u1109\u116e \u1105\u1169\u110c\u1175\u11a8" + }, + { + "label": "DB \uc800\uc7a5 \uceec\ub7fc (\uc2e4 \ucf54\ub4dc INSERT \uae30\uc900)", + "file_type": "document", + "source_file": "pages/A08_Support/A08_backend.md", + "source_location": "L45", + "_origin": "ast", + "id": "pages_a08_support_a08_backend_db_\uc800\uc7a5_\uceec\ub7fc_\uc2e4_\ucf54\ub4dc_insert_\uae30\uc900", + "community": 17, + "community_name": "A08_Support \u2014 Backend", + "norm_label": "db \u110c\u1165\u110c\u1161\u11bc \u110f\u1165\u11af\u1105\u1165\u11b7 (\u1109\u1175\u11af \u110f\u1169\u1103\u1173 insert \u1100\u1175\u110c\u116e\u11ab)" + }, + { + "label": "\ud2b9\uc9d5", + "file_type": "document", + "source_file": "pages/A08_Support/A08_backend.md", + "source_location": "L52", + "_origin": "ast", + "id": "pages_a08_support_a08_backend_\ud2b9\uc9d5", + "community": 17, + "community_name": "A08_Support \u2014 Backend", + "norm_label": "\u1110\u1173\u11a8\u110c\u1175\u11bc" + }, + { + "label": "\uc758\uc874\uc131 (\uacf5\ud1b5 \uc720\ud2f8)", + "file_type": "document", + "source_file": "pages/A08_Support/A08_backend.md", + "source_location": "L57", + "_origin": "ast", + "id": "pages_a08_support_a08_backend_\uc758\uc874\uc131_\uacf5\ud1b5_\uc720\ud2f8", + "community": 17, + "community_name": "A08_Support \u2014 Backend", + "norm_label": "\u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc (\u1100\u1169\u11bc\u1110\u1169\u11bc \u110b\u1172\u1110\u1175\u11af)" + }, + { + "label": "A08_frontend.md", + "file_type": "document", + "source_file": "pages/A08_Support/A08_frontend.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_a08_support_a08_frontend", + "community": 12, + "community_name": "A08_Support \u2014 Frontend", + "norm_label": "a08_frontend.md" + }, + { + "label": "A08_Support \u2014 Frontend", + "file_type": "document", + "source_file": "pages/A08_Support/A08_frontend.md", + "source_location": "L8", + "_origin": "ast", + "id": "pages_a08_support_a08_frontend_a08_support_frontend", + "community": 12, + "community_name": "A08_Support \u2014 Frontend", + "norm_label": "a08_support \u2014 frontend" + }, + { + "label": "\ud30c\uc77c \uad6c\uc870", + "file_type": "document", + "source_file": "pages/A08_Support/A08_frontend.md", + "source_location": "L12", + "_origin": "ast", + "id": "pages_a08_support_a08_frontend_\ud30c\uc77c_\uad6c\uc870", + "community": 12, + "community_name": "A08_Support \u2014 Frontend", + "norm_label": "\u1111\u1161\u110b\u1175\u11af \u1100\u116e\u110c\u1169" + }, + { + "label": "\ucef4\ud3ec\ub10c\ud2b8 / \ud568\uc218", + "file_type": "document", + "source_file": "pages/A08_Support/A08_frontend.md", + "source_location": "L19", + "_origin": "ast", + "id": "pages_a08_support_a08_frontend_\ucef4\ud3ec\ub10c\ud2b8_\ud568\uc218", + "community": 12, + "community_name": "A08_Support \u2014 Frontend", + "norm_label": "\u110f\u1165\u11b7\u1111\u1169\u1102\u1165\u11ab\u1110\u1173 / \u1112\u1161\u11b7\u1109\u116e" + }, + { + "label": "\uc81c\ucd9c \ub85c\uc9c1", + "file_type": "document", + "source_file": "pages/A08_Support/A08_frontend.md", + "source_location": "L27", + "_origin": "ast", + "id": "pages_a08_support_a08_frontend_\uc81c\ucd9c_\ub85c\uc9c1", + "community": 12, + "community_name": "A08_Support \u2014 Frontend", + "norm_label": "\u110c\u1166\u110e\u116e\u11af \u1105\u1169\u110c\u1175\u11a8" + }, + { + "label": "\uc138\uc158 \uc790\ub3d9 \ucc44\uc6c0", + "file_type": "document", + "source_file": "pages/A08_Support/A08_frontend.md", + "source_location": "L34", + "_origin": "ast", + "id": "pages_a08_support_a08_frontend_\uc138\uc158_\uc790\ub3d9_\ucc44\uc6c0", + "community": 12, + "community_name": "A08_Support \u2014 Frontend", + "norm_label": "\u1109\u1166\u1109\u1167\u11ab \u110c\u1161\u1103\u1169\u11bc \u110e\u1162\u110b\u116e\u11b7" + }, + { + "label": "\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", + "file_type": "document", + "source_file": "pages/A08_Support/A08_frontend.md", + "source_location": "L39", + "_origin": "ast", + "id": "pages_a08_support_a08_frontend_\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", + "community": 12, + "community_name": "A08_Support \u2014 Frontend", + "norm_label": "\u1105\u1169\u110f\u1165\u11af\u1105\u1161\u110b\u1175\u110c\u1166\u110b\u1175\u1109\u1167\u11ab" + }, + { + "label": "\uc2a4\ud0c0\uc77c (CSS)", + "file_type": "document", + "source_file": "pages/A08_Support/A08_frontend.md", + "source_location": "L51", + "_origin": "ast", + "id": "pages_a08_support_a08_frontend_\uc2a4\ud0c0\uc77c_css", + "community": 12, + "community_name": "A08_Support \u2014 Frontend", + "norm_label": "\u1109\u1173\u1110\u1161\u110b\u1175\u11af (css)" + }, + { + "label": "\uc774\ubca4\ud2b8 \ud578\ub4e4\ub7ec", + "file_type": "document", + "source_file": "pages/A08_Support/A08_frontend.md", + "source_location": "L59", + "_origin": "ast", + "id": "pages_a08_support_a08_frontend_\uc774\ubca4\ud2b8_\ud578\ub4e4\ub7ec", + "community": 12, + "community_name": "A08_Support \u2014 Frontend", + "norm_label": "\u110b\u1175\u1107\u1166\u11ab\u1110\u1173 \u1112\u1162\u11ab\u1103\u1173\u11af\u1105\u1165" + }, + { + "label": "\uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/A08_Support/A08_frontend.md", + "source_location": "L65", + "_origin": "ast", + "id": "pages_a08_support_a08_frontend_\uc758\uc874\uc131", + "community": 12, + "community_name": "A08_Support \u2014 Frontend", + "norm_label": "\u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "\ucc38\uace0", + "file_type": "document", + "source_file": "pages/A08_Support/A08_frontend.md", + "source_location": "L73", + "_origin": "ast", + "id": "pages_a08_support_a08_frontend_\ucc38\uace0", + "community": 12, + "community_name": "A08_Support \u2014 Frontend", + "norm_label": "\u110e\u1161\u11b7\u1100\u1169" + }, + { + "label": "A08_Support_Router.md", + "file_type": "document", + "source_file": "pages/A08_Support/backend/A08_Support_Router.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_a08_support_backend_a08_support_router", + "community": 120, + "community_name": "A08_Support_Router.md", + "norm_label": "a08_support_router.md" + }, + { + "label": "A08_Support_Router.py", + "file_type": "document", + "source_file": "pages/A08_Support/backend/A08_Support_Router.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_a08_support_backend_a08_support_router_a08_support_router_py", + "community": 120, + "community_name": "A08_Support_Router.md", + "norm_label": "a08_support_router.py" + }, + { + "label": "\ud83d\udee0\ufe0f \ub77c\uc6b0\ud130 API \ubc0f \uc8fc\uc694 \ud568\uc218 \ubaa9\ub85d", + "file_type": "document", + "source_file": "pages/A08_Support/backend/A08_Support_Router.md", + "source_location": "L14", + "_origin": "ast", + "id": "pages_a08_support_backend_a08_support_router_\ub77c\uc6b0\ud130_api_\ubc0f_\uc8fc\uc694_\ud568\uc218_\ubaa9\ub85d", + "community": 120, + "community_name": "A08_Support_Router.md", + "norm_label": "\ud83d\udee0\ufe0f \u1105\u1161\u110b\u116e\u1110\u1165 api \u1106\u1175\u11be \u110c\u116e\u110b\u116d \u1112\u1161\u11b7\u1109\u116e \u1106\u1169\u11a8\u1105\u1169\u11a8" + }, + { + "label": "\ud83d\udd17 \uc5f0\uad00 \uac1c\ub150 \ubc0f \uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/A08_Support/backend/A08_Support_Router.md", + "source_location": "L21", + "_origin": "ast", + "id": "pages_a08_support_backend_a08_support_router_\uc5f0\uad00_\uac1c\ub150_\ubc0f_\uc758\uc874\uc131", + "community": 120, + "community_name": "A08_Support_Router.md", + "norm_label": "\ud83d\udd17 \u110b\u1167\u11ab\u1100\u116a\u11ab \u1100\u1162\u1102\u1167\u11b7 \u1106\u1175\u11be \u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "A09_backend.md", + "file_type": "document", + "source_file": "pages/A09_Security/A09_backend.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_a09_security_a09_backend", + "community": 6, + "community_name": "A09_Security \u2014 Backend", + "norm_label": "a09_backend.md" + }, + { + "label": "A09_Security \u2014 Backend", + "file_type": "document", + "source_file": "pages/A09_Security/A09_backend.md", + "source_location": "L8", + "_origin": "ast", + "id": "pages_a09_security_a09_backend_a09_security_backend", + "community": 6, + "community_name": "A09_Security \u2014 Backend", + "norm_label": "a09_security \u2014 backend" + }, + { + "label": "\ud30c\uc77c \uad6c\uc870", + "file_type": "document", + "source_file": "pages/A09_Security/A09_backend.md", + "source_location": "L12", + "_origin": "ast", + "id": "pages_a09_security_a09_backend_\ud30c\uc77c_\uad6c\uc870", + "community": 6, + "community_name": "A09_Security \u2014 Backend", + "norm_label": "\u1111\u1161\u110b\u1175\u11af \u1100\u116e\u110c\u1169" + }, + { + "label": "API \uc5d4\ub4dc\ud3ec\uc778\ud2b8", + "file_type": "document", + "source_file": "pages/A09_Security/A09_backend.md", + "source_location": "L19", + "_origin": "ast", + "id": "pages_a09_security_a09_backend_api_\uc5d4\ub4dc\ud3ec\uc778\ud2b8", + "community": 6, + "community_name": "A09_Security \u2014 Backend", + "norm_label": "api \u110b\u1166\u11ab\u1103\u1173\u1111\u1169\u110b\u1175\u11ab\u1110\u1173" + }, + { + "label": "\ub9c8\uc2a4\ud130(\ud68c\uc0ac \uad00\ub9ac\uc790) \uc804\uc6a9 \u2014 `require_master`", + "file_type": "document", + "source_file": "pages/A09_Security/A09_backend.md", + "source_location": "L21", + "_origin": "ast", + "id": "pages_a09_security_a09_backend_\ub9c8\uc2a4\ud130_\ud68c\uc0ac_\uad00\ub9ac\uc790_\uc804\uc6a9_require_master", + "community": 6, + "community_name": "A09_Security \u2014 Backend", + "norm_label": "\u1106\u1161\u1109\u1173\u1110\u1165(\u1112\u116c\u1109\u1161 \u1100\u116a\u11ab\u1105\u1175\u110c\u1161) \u110c\u1165\u11ab\u110b\u116d\u11bc \u2014 `require_master`" + }, + { + "label": "\uc2dc\uc2a4\ud15c \uad00\ub9ac\uc790 \uc804\uc6a9 \u2014 `require_system_admin`", + "file_type": "document", + "source_file": "pages/A09_Security/A09_backend.md", + "source_location": "L31", + "_origin": "ast", + "id": "pages_a09_security_a09_backend_\uc2dc\uc2a4\ud15c_\uad00\ub9ac\uc790_\uc804\uc6a9_require_system_admin", + "community": 6, + "community_name": "A09_Security \u2014 Backend", + "norm_label": "\u1109\u1175\u1109\u1173\u1110\u1166\u11b7 \u1100\u116a\u11ab\u1105\u1175\u110c\u1161 \u110c\u1165\u11ab\u110b\u116d\u11bc \u2014 `require_system_admin`" + }, + { + "label": "\uc778\uc99d \uc0ac\uc6a9\uc790 \uacf5\ud1b5 \u2014 `verify_session`", + "file_type": "document", + "source_file": "pages/A09_Security/A09_backend.md", + "source_location": "L39", + "_origin": "ast", + "id": "pages_a09_security_a09_backend_\uc778\uc99d_\uc0ac\uc6a9\uc790_\uacf5\ud1b5_verify_session", + "community": 6, + "community_name": "A09_Security \u2014 Backend", + "norm_label": "\u110b\u1175\u11ab\u110c\u1173\u11bc \u1109\u1161\u110b\u116d\u11bc\u110c\u1161 \u1100\u1169\u11bc\u1110\u1169\u11bc \u2014 `verify_session`" + }, + { + "label": "\uc694\uccad \uc2a4\ud0a4\ub9c8 (Pydantic)", + "file_type": "document", + "source_file": "pages/A09_Security/A09_backend.md", + "source_location": "L45", + "_origin": "ast", + "id": "pages_a09_security_a09_backend_\uc694\uccad_\uc2a4\ud0a4\ub9c8_pydantic", + "community": 6, + "community_name": "A09_Security \u2014 Backend", + "norm_label": "\u110b\u116d\u110e\u1165\u11bc \u1109\u1173\u110f\u1175\u1106\u1161 (pydantic)" + }, + { + "label": "DB \uc800\uc7a5 (activity_logs)", + "file_type": "document", + "source_file": "pages/A09_Security/A09_backend.md", + "source_location": "L55", + "_origin": "ast", + "id": "pages_a09_security_a09_backend_db_\uc800\uc7a5_activity_logs", + "community": 6, + "community_name": "A09_Security \u2014 Backend", + "norm_label": "db \u110c\u1165\u110c\u1161\u11bc (activity_logs)" + }, + { + "label": "\uad8c\ud55c \ud5ec\ud37c", + "file_type": "document", + "source_file": "pages/A09_Security/A09_backend.md", + "source_location": "L60", + "_origin": "ast", + "id": "pages_a09_security_a09_backend_\uad8c\ud55c_\ud5ec\ud37c", + "community": 6, + "community_name": "A09_Security \u2014 Backend", + "norm_label": "\u1100\u116f\u11ab\u1112\u1161\u11ab \u1112\u1166\u11af\u1111\u1165" + }, + { + "label": "\uc758\uc874\uc131 (\uacf5\ud1b5 \uc720\ud2f8)", + "file_type": "document", + "source_file": "pages/A09_Security/A09_backend.md", + "source_location": "L67", + "_origin": "ast", + "id": "pages_a09_security_a09_backend_\uc758\uc874\uc131_\uacf5\ud1b5_\uc720\ud2f8", + "community": 6, + "community_name": "A09_Security \u2014 Backend", + "norm_label": "\u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc (\u1100\u1169\u11bc\u1110\u1169\u11bc \u110b\u1172\u1110\u1175\u11af)" + }, + { + "label": "\ucc38\uace0", + "file_type": "document", + "source_file": "pages/A09_Security/A09_backend.md", + "source_location": "L73", + "_origin": "ast", + "id": "pages_a09_security_a09_backend_\ucc38\uace0", + "community": 6, + "community_name": "A09_Security \u2014 Backend", + "norm_label": "\u110e\u1161\u11b7\u1100\u1169" + }, + { + "label": "A09_frontend.md", + "file_type": "document", + "source_file": "pages/A09_Security/A09_frontend.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_a09_security_a09_frontend", + "community": 18, + "community_name": "A09_Security \u2014 Frontend", + "norm_label": "a09_frontend.md" + }, + { + "label": "A09_Security \u2014 Frontend", + "file_type": "document", + "source_file": "pages/A09_Security/A09_frontend.md", + "source_location": "L8", + "_origin": "ast", + "id": "pages_a09_security_a09_frontend_a09_security_frontend", + "community": 18, + "community_name": "A09_Security \u2014 Frontend", + "norm_label": "a09_security \u2014 frontend" + }, + { + "label": "\ud30c\uc77c \uad6c\uc870", + "file_type": "document", + "source_file": "pages/A09_Security/A09_frontend.md", + "source_location": "L12", + "_origin": "ast", + "id": "pages_a09_security_a09_frontend_\ud30c\uc77c_\uad6c\uc870", + "community": 18, + "community_name": "A09_Security \u2014 Frontend", + "norm_label": "\u1111\u1161\u110b\u1175\u11af \u1100\u116e\u110c\u1169" + }, + { + "label": "\ucef4\ud3ec\ub10c\ud2b8 / \ud568\uc218", + "file_type": "document", + "source_file": "pages/A09_Security/A09_frontend.md", + "source_location": "L25", + "_origin": "ast", + "id": "pages_a09_security_a09_frontend_\ucef4\ud3ec\ub10c\ud2b8_\ud568\uc218", + "community": 18, + "community_name": "A09_Security \u2014 Frontend", + "norm_label": "\u110f\u1165\u11b7\u1111\u1169\u1102\u1165\u11ab\u1110\u1173 / \u1112\u1161\u11b7\u1109\u116e" + }, + { + "label": "\uc57d\uad00 \ub370\uc774\ud130 (A09_Security_Terms.ts)", + "file_type": "document", + "source_file": "pages/A09_Security/A09_frontend.md", + "source_location": "L31", + "_origin": "ast", + "id": "pages_a09_security_a09_frontend_\uc57d\uad00_\ub370\uc774\ud130_a09_security_terms_ts", + "community": 18, + "community_name": "A09_Security \u2014 Frontend", + "norm_label": "\u110b\u1163\u11a8\u1100\u116a\u11ab \u1103\u1166\u110b\u1175\u1110\u1165 (a09_security_terms.ts)" + }, + { + "label": "API \ud074\ub77c\uc774\uc5b8\ud2b8 \ud568\uc218 (\u26a0\ufe0f \ubbf8\uc0ac\uc6a9, \uc815\uc758\ub9cc)", + "file_type": "document", + "source_file": "pages/A09_Security/A09_frontend.md", + "source_location": "L40", + "_origin": "ast", + "id": "pages_a09_security_a09_frontend_api_\ud074\ub77c\uc774\uc5b8\ud2b8_\ud568\uc218_\ubbf8\uc0ac\uc6a9_\uc815\uc758\ub9cc", + "community": 18, + "community_name": "A09_Security \u2014 Frontend", + "norm_label": "api \u110f\u1173\u11af\u1105\u1161\u110b\u1175\u110b\u1165\u11ab\u1110\u1173 \u1112\u1161\u11b7\u1109\u116e (\u26a0\ufe0f \u1106\u1175\u1109\u1161\u110b\u116d\u11bc, \u110c\u1165\u11bc\u110b\u1174\u1106\u1161\u11ab)" + }, + { + "label": "\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", + "file_type": "document", + "source_file": "pages/A09_Security/A09_frontend.md", + "source_location": "L53", + "_origin": "ast", + "id": "pages_a09_security_a09_frontend_\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", + "community": 18, + "community_name": "A09_Security \u2014 Frontend", + "norm_label": "\u1105\u1169\u110f\u1165\u11af\u1105\u1161\u110b\u1175\u110c\u1166\u110b\u1175\u1109\u1167\u11ab" + }, + { + "label": "\uc2a4\ud0c0\uc77c (CSS)", + "file_type": "document", + "source_file": "pages/A09_Security/A09_frontend.md", + "source_location": "L64", + "_origin": "ast", + "id": "pages_a09_security_a09_frontend_\uc2a4\ud0c0\uc77c_css", + "community": 18, + "community_name": "A09_Security \u2014 Frontend", + "norm_label": "\u1109\u1173\u1110\u1161\u110b\u1175\u11af (css)" + }, + { + "label": "\u26a0\ufe0f \uc57d\uad00 \ud14d\uc2a4\ud2b8\uc640 \uc2e4 \ucf54\ub4dc \ubd88\uc77c\uce58", + "file_type": "document", + "source_file": "pages/A09_Security/A09_frontend.md", + "source_location": "L69", + "_origin": "ast", + "id": "pages_a09_security_a09_frontend_\uc57d\uad00_\ud14d\uc2a4\ud2b8\uc640_\uc2e4_\ucf54\ub4dc_\ubd88\uc77c\uce58", + "community": 18, + "community_name": "A09_Security \u2014 Frontend", + "norm_label": "\u26a0\ufe0f \u110b\u1163\u11a8\u1100\u116a\u11ab \u1110\u1166\u11a8\u1109\u1173\u1110\u1173\u110b\u116a \u1109\u1175\u11af \u110f\u1169\u1103\u1173 \u1107\u116e\u11af\u110b\u1175\u11af\u110e\u1175" + }, + { + "label": "\uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/A09_Security/A09_frontend.md", + "source_location": "L75", + "_origin": "ast", + "id": "pages_a09_security_a09_frontend_\uc758\uc874\uc131", + "community": 18, + "community_name": "A09_Security \u2014 Frontend", + "norm_label": "\u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "A09_Security_Router.md", + "file_type": "document", + "source_file": "pages/A09_Security/backend/A09_Security_Router.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_a09_security_backend_a09_security_router", + "community": 121, + "community_name": "A09_Security_Router.md", + "norm_label": "a09_security_router.md" + }, + { + "label": "A09_Security_Router.py", + "file_type": "document", + "source_file": "pages/A09_Security/backend/A09_Security_Router.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_a09_security_backend_a09_security_router_a09_security_router_py", + "community": 121, + "community_name": "A09_Security_Router.md", + "norm_label": "a09_security_router.py" + }, + { + "label": "\ud83d\udee0\ufe0f \ub77c\uc6b0\ud130 API \ubc0f \uc8fc\uc694 \ud568\uc218 \ubaa9\ub85d", + "file_type": "document", + "source_file": "pages/A09_Security/backend/A09_Security_Router.md", + "source_location": "L14", + "_origin": "ast", + "id": "pages_a09_security_backend_a09_security_router_\ub77c\uc6b0\ud130_api_\ubc0f_\uc8fc\uc694_\ud568\uc218_\ubaa9\ub85d", + "community": 121, + "community_name": "A09_Security_Router.md", + "norm_label": "\ud83d\udee0\ufe0f \u1105\u1161\u110b\u116e\u1110\u1165 api \u1106\u1175\u11be \u110c\u116e\u110b\u116d \u1112\u1161\u11b7\u1109\u116e \u1106\u1169\u11a8\u1105\u1169\u11a8" + }, + { + "label": "\ud83d\udd17 \uc5f0\uad00 \uac1c\ub150 \ubc0f \uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/A09_Security/backend/A09_Security_Router.md", + "source_location": "L28", + "_origin": "ast", + "id": "pages_a09_security_backend_a09_security_router_\uc5f0\uad00_\uac1c\ub150_\ubc0f_\uc758\uc874\uc131", + "community": 121, + "community_name": "A09_Security_Router.md", + "norm_label": "\ud83d\udd17 \u110b\u1167\u11ab\u1100\u116a\u11ab \u1100\u1162\u1102\u1167\u11b7 \u1106\u1175\u11be \u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "B01_api.md", + "file_type": "document", + "source_file": "pages/B01_Dashboard/B01_api.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b01_dashboard_b01_api", + "community": 50, + "community_name": "B01_Dashboard \u2014 API", + "norm_label": "b01_api.md" + }, + { + "label": "B01_Dashboard \u2014 API", + "file_type": "document", + "source_file": "pages/B01_Dashboard/B01_api.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b01_dashboard_b01_api_b01_dashboard_api", + "community": 50, + "community_name": "B01_Dashboard \u2014 API", + "norm_label": "b01_dashboard \u2014 api" + }, + { + "label": "\uc0ac\uc6a9\uc790\u00b7\ud68c\uc0ac", + "file_type": "document", + "source_file": "pages/B01_Dashboard/B01_api.md", + "source_location": "L16", + "_origin": "ast", + "id": "pages_b01_dashboard_b01_api_\uc0ac\uc6a9\uc790_\ud68c\uc0ac", + "community": 50, + "community_name": "B01_Dashboard \u2014 API", + "norm_label": "\u1109\u1161\u110b\u116d\u11bc\u110c\u1161\u00b7\u1112\u116c\u1109\u1161" + }, + { + "label": "\ud68c\uc0ac \uad00\ub9ac\uc790", + "file_type": "document", + "source_file": "pages/B01_Dashboard/B01_api.md", + "source_location": "L27", + "_origin": "ast", + "id": "pages_b01_dashboard_b01_api_\ud68c\uc0ac_\uad00\ub9ac\uc790", + "community": 50, + "community_name": "B01_Dashboard \u2014 API", + "norm_label": "\u1112\u116c\u1109\u1161 \u1100\u116a\u11ab\u1105\u1175\u110c\u1161" + }, + { + "label": "\ud504\ub85c\uc81d\ud2b8\u00b7\uc790\ub3d9\ud654", + "file_type": "document", + "source_file": "pages/B01_Dashboard/B01_api.md", + "source_location": "L37", + "_origin": "ast", + "id": "pages_b01_dashboard_b01_api_\ud504\ub85c\uc81d\ud2b8_\uc790\ub3d9\ud654", + "community": 50, + "community_name": "B01_Dashboard \u2014 API", + "norm_label": "\u1111\u1173\u1105\u1169\u110c\u1166\u11a8\u1110\u1173\u00b7\u110c\u1161\u1103\u1169\u11bc\u1112\u116a" + }, + { + "label": "\uc2dc\uc2a4\ud15c \uad00\ub9ac\uc790", + "file_type": "document", + "source_file": "pages/B01_Dashboard/B01_api.md", + "source_location": "L48", + "_origin": "ast", + "id": "pages_b01_dashboard_b01_api_\uc2dc\uc2a4\ud15c_\uad00\ub9ac\uc790", + "community": 50, + "community_name": "B01_Dashboard \u2014 API", + "norm_label": "\u1109\u1175\u1109\u1173\u1110\u1166\u11b7 \u1100\u116a\u11ab\u1105\u1175\u110c\u1161" + }, + { + "label": "B01_backend.md", + "file_type": "document", + "source_file": "pages/B01_Dashboard/B01_backend.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b01_dashboard_b01_backend", + "community": 35, + "community_name": "B01_Dashboard \u2014 Backend", + "norm_label": "b01_backend.md" + }, + { + "label": "B01_Dashboard \u2014 Backend", + "file_type": "document", + "source_file": "pages/B01_Dashboard/B01_backend.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b01_dashboard_b01_backend_b01_dashboard_backend", + "community": 35, + "community_name": "B01_Dashboard \u2014 Backend", + "norm_label": "b01_dashboard \u2014 backend" + }, + { + "label": "\uc138\ubd84\ud654 \ubc31\uc5d4\ub4dc \uc704\ud0a4 \uba85\uc138", + "file_type": "document", + "source_file": "pages/B01_Dashboard/B01_backend.md", + "source_location": "L12", + "_origin": "ast", + "id": "pages_b01_dashboard_b01_backend_\uc138\ubd84\ud654_\ubc31\uc5d4\ub4dc_\uc704\ud0a4_\uba85\uc138", + "community": 35, + "community_name": "B01_Dashboard \u2014 Backend", + "norm_label": "\u1109\u1166\u1107\u116e\u11ab\u1112\u116a \u1107\u1162\u11a8\u110b\u1166\u11ab\u1103\u1173 \u110b\u1171\u110f\u1175 \u1106\u1167\u11bc\u1109\u1166" + }, + { + "label": "\ub77c\uc6b0\ud130 \uad8c\ud55c \ud5ec\ud37c", + "file_type": "document", + "source_file": "pages/B01_Dashboard/B01_backend.md", + "source_location": "L18", + "_origin": "ast", + "id": "pages_b01_dashboard_b01_backend_\ub77c\uc6b0\ud130_\uad8c\ud55c_\ud5ec\ud37c", + "community": 35, + "community_name": "B01_Dashboard \u2014 Backend", + "norm_label": "\u1105\u1161\u110b\u116e\u1110\u1165 \u1100\u116f\u11ab\u1112\u1161\u11ab \u1112\u1166\u11af\u1111\u1165" + }, + { + "label": "\uc800\uc7a5\uc18c \ubc0f \uc0ad\uc81c \ud568\uc218", + "file_type": "document", + "source_file": "pages/B01_Dashboard/B01_backend.md", + "source_location": "L30", + "_origin": "ast", + "id": "pages_b01_dashboard_b01_backend_\uc800\uc7a5\uc18c_\ubc0f_\uc0ad\uc81c_\ud568\uc218", + "community": 35, + "community_name": "B01_Dashboard \u2014 Backend", + "norm_label": "\u110c\u1165\u110c\u1161\u11bc\u1109\u1169 \u1106\u1175\u11be \u1109\u1161\u11a8\u110c\u1166 \u1112\u1161\u11b7\u1109\u116e" + }, + { + "label": "\uc694\uccad \uc2a4\ud0a4\ub9c8", + "file_type": "document", + "source_file": "pages/B01_Dashboard/B01_backend.md", + "source_location": "L51", + "_origin": "ast", + "id": "pages_b01_dashboard_b01_backend_\uc694\uccad_\uc2a4\ud0a4\ub9c8", + "community": 35, + "community_name": "B01_Dashboard \u2014 Backend", + "norm_label": "\u110b\u116d\u110e\u1165\u11bc \u1109\u1173\u110f\u1175\u1106\u1161" + }, + { + "label": "\uae30\uc220\ubd80\ucc44", + "file_type": "document", + "source_file": "pages/B01_Dashboard/B01_backend.md", + "source_location": "L61", + "_origin": "ast", + "id": "pages_b01_dashboard_b01_backend_\uae30\uc220\ubd80\ucc44", + "community": 35, + "community_name": "B01_Dashboard \u2014 Backend", + "norm_label": "\u1100\u1175\u1109\u116e\u11af\u1107\u116e\u110e\u1162" + }, + { + "label": "B01_db.md", + "file_type": "document", + "source_file": "pages/B01_Dashboard/B01_db.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b01_dashboard_b01_db", + "community": 122, + "community_name": "B01_Dashboard \u2014 DB \uc0ac\uc6a9 \uad00\uacc4", + "norm_label": "b01_db.md" + }, + { + "label": "B01_Dashboard \u2014 DB \uc0ac\uc6a9 \uad00\uacc4", + "file_type": "document", + "source_file": "pages/B01_Dashboard/B01_db.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b01_dashboard_b01_db_b01_dashboard_db_\uc0ac\uc6a9_\uad00\uacc4", + "community": 122, + "community_name": "B01_Dashboard \u2014 DB \uc0ac\uc6a9 \uad00\uacc4", + "norm_label": "b01_dashboard \u2014 db \u1109\u1161\u110b\u116d\u11bc \u1100\u116a\u11ab\u1100\u1168" + }, + { + "label": "\ud2b8\ub79c\uc7ad\uc158 \uacbd\uacc4", + "file_type": "document", + "source_file": "pages/B01_Dashboard/B01_db.md", + "source_location": "L25", + "_origin": "ast", + "id": "pages_b01_dashboard_b01_db_\ud2b8\ub79c\uc7ad\uc158_\uacbd\uacc4", + "community": 122, + "community_name": "B01_Dashboard \u2014 DB \uc0ac\uc6a9 \uad00\uacc4", + "norm_label": "\u1110\u1173\u1105\u1162\u11ab\u110c\u1162\u11a8\u1109\u1167\u11ab \u1100\u1167\u11bc\u1100\u1168" + }, + { + "label": "B01_dependencies.md", + "file_type": "document", + "source_file": "pages/B01_Dashboard/B01_dependencies.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b01_dashboard_b01_dependencies", + "community": 123, + "community_name": "B01_Dashboard \u2014 Dependencies", + "norm_label": "b01_dependencies.md" + }, + { + "label": "B01_Dashboard \u2014 Dependencies", + "file_type": "document", + "source_file": "pages/B01_Dashboard/B01_dependencies.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b01_dashboard_b01_dependencies_b01_dashboard_dependencies", + "community": 123, + "community_name": "B01_Dashboard \u2014 Dependencies", + "norm_label": "b01_dashboard \u2014 dependencies" + }, + { + "label": "\ud504\ub85c\uc81d\ud2b8 \uacf5\ud1b5 \ubaa8\ub4c8", + "file_type": "document", + "source_file": "pages/B01_Dashboard/B01_dependencies.md", + "source_location": "L23", + "_origin": "ast", + "id": "pages_b01_dashboard_b01_dependencies_\ud504\ub85c\uc81d\ud2b8_\uacf5\ud1b5_\ubaa8\ub4c8", + "community": 123, + "community_name": "B01_Dashboard \u2014 Dependencies", + "norm_label": "\u1111\u1173\u1105\u1169\u110c\u1166\u11a8\u1110\u1173 \u1100\u1169\u11bc\u1110\u1169\u11bc \u1106\u1169\u1103\u1172\u11af" + }, + { + "label": "B01_frontend.md", + "file_type": "document", + "source_file": "pages/B01_Dashboard/B01_frontend.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b01_dashboard_b01_frontend", + "community": 36, + "community_name": "B01_Dashboard \u2014 Frontend", + "norm_label": "b01_frontend.md" + }, + { + "label": "B01_Dashboard \u2014 Frontend", + "file_type": "document", + "source_file": "pages/B01_Dashboard/B01_frontend.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b01_dashboard_b01_frontend_b01_dashboard_frontend", + "community": 36, + "community_name": "B01_Dashboard \u2014 Frontend", + "norm_label": "b01_dashboard \u2014 frontend" + }, + { + "label": "\ud30c\uc77c\uacfc \uc9c4\uc785\uc810", + "file_type": "document", + "source_file": "pages/B01_Dashboard/B01_frontend.md", + "source_location": "L12", + "_origin": "ast", + "id": "pages_b01_dashboard_b01_frontend_\ud30c\uc77c\uacfc_\uc9c4\uc785\uc810", + "community": 36, + "community_name": "B01_Dashboard \u2014 Frontend", + "norm_label": "\u1111\u1161\u110b\u1175\u11af\u1100\u116a \u110c\u1175\u11ab\u110b\u1175\u11b8\u110c\u1165\u11b7" + }, + { + "label": "\ubd84\ud560\ub41c UI \ucef4\ud3ec\ub10c\ud2b8 \ud30c\uc77c", + "file_type": "document", + "source_file": "pages/B01_Dashboard/B01_frontend.md", + "source_location": "L20", + "_origin": "ast", + "id": "pages_b01_dashboard_b01_frontend_\ubd84\ud560\ub41c_ui_\ucef4\ud3ec\ub10c\ud2b8_\ud30c\uc77c", + "community": 36, + "community_name": "B01_Dashboard \u2014 Frontend", + "norm_label": "\u1107\u116e\u11ab\u1112\u1161\u11af\u1103\u116c\u11ab ui \u110f\u1165\u11b7\u1111\u1169\u1102\u1165\u11ab\u1110\u1173 \u1111\u1161\u110b\u1175\u11af" + }, + { + "label": "UI \uad8c\ud55c \ud5ec\ud37c", + "file_type": "document", + "source_file": "pages/B01_Dashboard/B01_frontend.md", + "source_location": "L33", + "_origin": "ast", + "id": "pages_b01_dashboard_b01_frontend_ui_\uad8c\ud55c_\ud5ec\ud37c", + "community": 36, + "community_name": "B01_Dashboard \u2014 Frontend", + "norm_label": "ui \u1100\u116f\u11ab\u1112\u1161\u11ab \u1112\u1166\u11af\u1111\u1165" + }, + { + "label": "\ubaa8\ub2ec", + "file_type": "document", + "source_file": "pages/B01_Dashboard/B01_frontend.md", + "source_location": "L45", + "_origin": "ast", + "id": "pages_b01_dashboard_b01_frontend_\ubaa8\ub2ec", + "community": 36, + "community_name": "B01_Dashboard \u2014 Frontend", + "norm_label": "\u1106\u1169\u1103\u1161\u11af" + }, + { + "label": "\uacf5\uc720 \uc790\uc6d0 \uc5f0\uacb0", + "file_type": "document", + "source_file": "pages/B01_Dashboard/B01_frontend.md", + "source_location": "L59", + "_origin": "ast", + "id": "pages_b01_dashboard_b01_frontend_\uacf5\uc720_\uc790\uc6d0_\uc5f0\uacb0", + "community": 36, + "community_name": "B01_Dashboard \u2014 Frontend", + "norm_label": "\u1100\u1169\u11bc\u110b\u1172 \u110c\u1161\u110b\u116f\u11ab \u110b\u1167\u11ab\u1100\u1167\u11af" + }, + { + "label": "B01_Dashboard_Router.md", + "file_type": "document", + "source_file": "pages/B01_Dashboard/backend/B01_Dashboard_Router.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b01_dashboard_backend_b01_dashboard_router", + "community": 124, + "community_name": "B01_Dashboard_Router.md", + "norm_label": "b01_dashboard_router.md" + }, + { + "label": "B01_Dashboard_Router.py", + "file_type": "document", + "source_file": "pages/B01_Dashboard/backend/B01_Dashboard_Router.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b01_dashboard_backend_b01_dashboard_router_b01_dashboard_router_py", + "community": 124, + "community_name": "B01_Dashboard_Router.md", + "norm_label": "b01_dashboard_router.py" + }, + { + "label": "\ud83d\udee0\ufe0f \ub77c\uc6b0\ud130 API \ubc0f \uc8fc\uc694 \ud568\uc218 \ubaa9\ub85d", + "file_type": "document", + "source_file": "pages/B01_Dashboard/backend/B01_Dashboard_Router.md", + "source_location": "L14", + "_origin": "ast", + "id": "pages_b01_dashboard_backend_b01_dashboard_router_\ub77c\uc6b0\ud130_api_\ubc0f_\uc8fc\uc694_\ud568\uc218_\ubaa9\ub85d", + "community": 124, + "community_name": "B01_Dashboard_Router.md", + "norm_label": "\ud83d\udee0\ufe0f \u1105\u1161\u110b\u116e\u1110\u1165 api \u1106\u1175\u11be \u110c\u116e\u110b\u116d \u1112\u1161\u11b7\u1109\u116e \u1106\u1169\u11a8\u1105\u1169\u11a8" + }, + { + "label": "\ud83d\udd17 \uc5f0\uad00 \uac1c\ub150 \ubc0f \uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/B01_Dashboard/backend/B01_Dashboard_Router.md", + "source_location": "L26", + "_origin": "ast", + "id": "pages_b01_dashboard_backend_b01_dashboard_router_\uc5f0\uad00_\uac1c\ub150_\ubc0f_\uc758\uc874\uc131", + "community": 124, + "community_name": "B01_Dashboard_Router.md", + "norm_label": "\ud83d\udd17 \u110b\u1167\u11ab\u1100\u116a\u11ab \u1100\u1162\u1102\u1167\u11b7 \u1106\u1175\u11be \u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "B01_Dashboard_UI_Page.md", + "file_type": "document", + "source_file": "pages/B01_Dashboard/frontend/B01_Dashboard_UI_Page.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b01_dashboard_frontend_b01_dashboard_ui_page", + "community": 125, + "community_name": "B01_Dashboard_UI_Page.md", + "norm_label": "b01_dashboard_ui_page.md" + }, + { + "label": "B01_Dashboard_UI_Page.ts", + "file_type": "document", + "source_file": "pages/B01_Dashboard/frontend/B01_Dashboard_UI_Page.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b01_dashboard_frontend_b01_dashboard_ui_page_b01_dashboard_ui_page_ts", + "community": 125, + "community_name": "B01_Dashboard_UI_Page.md", + "norm_label": "b01_dashboard_ui_page.ts" + }, + { + "label": "\ud83d\udee0\ufe0f \uc8fc\uc694 \ud568\uc218 \ubaa9\ub85d", + "file_type": "document", + "source_file": "pages/B01_Dashboard/frontend/B01_Dashboard_UI_Page.md", + "source_location": "L14", + "_origin": "ast", + "id": "pages_b01_dashboard_frontend_b01_dashboard_ui_page_\uc8fc\uc694_\ud568\uc218_\ubaa9\ub85d", + "community": 125, + "community_name": "B01_Dashboard_UI_Page.md", + "norm_label": "\ud83d\udee0\ufe0f \u110c\u116e\u110b\u116d \u1112\u1161\u11b7\u1109\u116e \u1106\u1169\u11a8\u1105\u1169\u11a8" + }, + { + "label": "\ud83d\udd17 \uc5f0\uad00 \uac1c\ub150 \ubc0f \uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/B01_Dashboard/frontend/B01_Dashboard_UI_Page.md", + "source_location": "L20", + "_origin": "ast", + "id": "pages_b01_dashboard_frontend_b01_dashboard_ui_page_\uc5f0\uad00_\uac1c\ub150_\ubc0f_\uc758\uc874\uc131", + "community": 125, + "community_name": "B01_Dashboard_UI_Page.md", + "norm_label": "\ud83d\udd17 \u110b\u1167\u11ab\u1100\u116a\u11ab \u1100\u1162\u1102\u1167\u11b7 \u1106\u1175\u11be \u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "B02_backend.md", + "file_type": "document", + "source_file": "pages/B02_ProjRegister/B02_backend.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b02_projregister_b02_backend", + "community": 19, + "community_name": "B02_ProjRegister \u2014 Backend", + "norm_label": "b02_backend.md" + }, + { + "label": "B02_ProjRegister \u2014 Backend", + "file_type": "document", + "source_file": "pages/B02_ProjRegister/B02_backend.md", + "source_location": "L8", + "_origin": "ast", + "id": "pages_b02_projregister_b02_backend_b02_projregister_backend", + "community": 19, + "community_name": "B02_ProjRegister \u2014 Backend", + "norm_label": "b02_projregister \u2014 backend" + }, + { + "label": "\ud30c\uc77c \uad6c\uc870", + "file_type": "document", + "source_file": "pages/B02_ProjRegister/B02_backend.md", + "source_location": "L14", + "_origin": "ast", + "id": "pages_b02_projregister_b02_backend_\ud30c\uc77c_\uad6c\uc870", + "community": 19, + "community_name": "B02_ProjRegister \u2014 Backend", + "norm_label": "\u1111\u1161\u110b\u1175\u11af \u1100\u116e\u110c\u1169" + }, + { + "label": "API \uc5d4\ub4dc\ud3ec\uc778\ud2b8", + "file_type": "document", + "source_file": "pages/B02_ProjRegister/B02_backend.md", + "source_location": "L22", + "_origin": "ast", + "id": "pages_b02_projregister_b02_backend_api_\uc5d4\ub4dc\ud3ec\uc778\ud2b8", + "community": 19, + "community_name": "B02_ProjRegister \u2014 Backend", + "norm_label": "api \u110b\u1166\u11ab\u1103\u1173\u1111\u1169\u110b\u1175\u11ab\u1110\u1173" + }, + { + "label": "\ud568\uc218", + "file_type": "document", + "source_file": "pages/B02_ProjRegister/B02_backend.md", + "source_location": "L28", + "_origin": "ast", + "id": "pages_b02_projregister_b02_backend_\ud568\uc218", + "community": 19, + "community_name": "B02_ProjRegister \u2014 Backend", + "norm_label": "\u1112\u1161\u11b7\u1109\u116e" + }, + { + "label": "\uc694\uccad/\uc751\ub2f5 \uc2a4\ud0a4\ub9c8 (Pydantic)", + "file_type": "document", + "source_file": "pages/B02_ProjRegister/B02_backend.md", + "source_location": "L38", + "_origin": "ast", + "id": "pages_b02_projregister_b02_backend_\uc694\uccad_\uc751\ub2f5_\uc2a4\ud0a4\ub9c8_pydantic", + "community": 19, + "community_name": "B02_ProjRegister \u2014 Backend", + "norm_label": "\u110b\u116d\u110e\u1165\u11bc/\u110b\u1173\u11bc\u1103\u1161\u11b8 \u1109\u1173\u110f\u1175\u1106\u1161 (pydantic)" + }, + { + "label": "\uc0dd\uc131 \ub85c\uc9c1 (create_project \ud2b8\ub79c\uc7ad\uc158)", + "file_type": "document", + "source_file": "pages/B02_ProjRegister/B02_backend.md", + "source_location": "L45", + "_origin": "ast", + "id": "pages_b02_projregister_b02_backend_\uc0dd\uc131_\ub85c\uc9c1_create_project_\ud2b8\ub79c\uc7ad\uc158", + "community": 19, + "community_name": "B02_ProjRegister \u2014 Backend", + "norm_label": "\u1109\u1162\u11bc\u1109\u1165\u11bc \u1105\u1169\u110c\u1175\u11a8 (create_project \u1110\u1173\u1105\u1162\u11ab\u110c\u1162\u11a8\u1109\u1167\u11ab)" + }, + { + "label": "DB \uc800\uc7a5 \uceec\ub7fc (projects INSERT)", + "file_type": "document", + "source_file": "pages/B02_ProjRegister/B02_backend.md", + "source_location": "L56", + "_origin": "ast", + "id": "pages_b02_projregister_b02_backend_db_\uc800\uc7a5_\uceec\ub7fc_projects_insert", + "community": 19, + "community_name": "B02_ProjRegister \u2014 Backend", + "norm_label": "db \u110c\u1165\u110c\u1161\u11bc \u110f\u1165\u11af\u1105\u1165\u11b7 (projects insert)" + }, + { + "label": "\uc758\uc874\uc131 (\uacf5\ud1b5 \uc720\ud2f8)", + "file_type": "document", + "source_file": "pages/B02_ProjRegister/B02_backend.md", + "source_location": "L61", + "_origin": "ast", + "id": "pages_b02_projregister_b02_backend_\uc758\uc874\uc131_\uacf5\ud1b5_\uc720\ud2f8", + "community": 19, + "community_name": "B02_ProjRegister \u2014 Backend", + "norm_label": "\u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc (\u1100\u1169\u11bc\u1110\u1169\u11bc \u110b\u1172\u1110\u1175\u11af)" + }, + { + "label": "\ucc38\uace0", + "file_type": "document", + "source_file": "pages/B02_ProjRegister/B02_backend.md", + "source_location": "L69", + "_origin": "ast", + "id": "pages_b02_projregister_b02_backend_\ucc38\uace0", + "community": 19, + "community_name": "B02_ProjRegister \u2014 Backend", + "norm_label": "\u110e\u1161\u11b7\u1100\u1169" + }, + { + "label": "B02_db.md", + "file_type": "document", + "source_file": "pages/B02_ProjRegister/B02_db.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b02_projregister_b02_db", + "community": 62, + "community_name": "B02_ProjRegister \u2014 DB", + "norm_label": "b02_db.md" + }, + { + "label": "B02_ProjRegister \u2014 DB", + "file_type": "document", + "source_file": "pages/B02_ProjRegister/B02_db.md", + "source_location": "L8", + "_origin": "ast", + "id": "pages_b02_projregister_b02_db_b02_projregister_db", + "community": 62, + "community_name": "B02_ProjRegister \u2014 DB", + "norm_label": "b02_projregister \u2014 db" + }, + { + "label": "\uc4f0\ub294 \ud14c\uc774\ube14", + "file_type": "document", + "source_file": "pages/B02_ProjRegister/B02_db.md", + "source_location": "L12", + "_origin": "ast", + "id": "pages_b02_projregister_b02_db_\uc4f0\ub294_\ud14c\uc774\ube14", + "community": 62, + "community_name": "B02_ProjRegister \u2014 DB", + "norm_label": "\u110a\u1173\u1102\u1173\u11ab \u1110\u1166\u110b\u1175\u1107\u1173\u11af" + }, + { + "label": "\uc800\uc7a5\uc18c(\ud30c\uc77c\uc2dc\uc2a4\ud15c)", + "file_type": "document", + "source_file": "pages/B02_ProjRegister/B02_db.md", + "source_location": "L20", + "_origin": "ast", + "id": "pages_b02_projregister_b02_db_\uc800\uc7a5\uc18c_\ud30c\uc77c\uc2dc\uc2a4\ud15c", + "community": 62, + "community_name": "B02_ProjRegister \u2014 DB", + "norm_label": "\u110c\u1165\u110c\u1161\u11bc\u1109\u1169(\u1111\u1161\u110b\u1175\u11af\u1109\u1175\u1109\u1173\u1110\u1166\u11b7)" + }, + { + "label": "\ucc38\uace0 (\uacc4\ud68d \ub2f9\uc2dc \uc758\ub3c4)", + "file_type": "document", + "source_file": "pages/B02_ProjRegister/B02_db.md", + "source_location": "L26", + "_origin": "ast", + "id": "pages_b02_projregister_b02_db_\ucc38\uace0_\uacc4\ud68d_\ub2f9\uc2dc_\uc758\ub3c4", + "community": 62, + "community_name": "B02_ProjRegister \u2014 DB", + "norm_label": "\u110e\u1161\u11b7\u1100\u1169 (\u1100\u1168\u1112\u116c\u11a8 \u1103\u1161\u11bc\u1109\u1175 \u110b\u1174\u1103\u1169)" + }, + { + "label": "B02_frontend.md", + "file_type": "document", + "source_file": "pages/B02_ProjRegister/B02_frontend.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b02_projregister_b02_frontend", + "community": 13, + "community_name": "B02_ProjRegister \u2014 Frontend", + "norm_label": "b02_frontend.md" + }, + { + "label": "B02_ProjRegister \u2014 Frontend", + "file_type": "document", + "source_file": "pages/B02_ProjRegister/B02_frontend.md", + "source_location": "L8", + "_origin": "ast", + "id": "pages_b02_projregister_b02_frontend_b02_projregister_frontend", + "community": 13, + "community_name": "B02_ProjRegister \u2014 Frontend", + "norm_label": "b02_projregister \u2014 frontend" + }, + { + "label": "\ud30c\uc77c \uad6c\uc870", + "file_type": "document", + "source_file": "pages/B02_ProjRegister/B02_frontend.md", + "source_location": "L12", + "_origin": "ast", + "id": "pages_b02_projregister_b02_frontend_\ud30c\uc77c_\uad6c\uc870", + "community": 13, + "community_name": "B02_ProjRegister \u2014 Frontend", + "norm_label": "\u1111\u1161\u110b\u1175\u11af \u1100\u116e\u110c\u1169" + }, + { + "label": "\ucef4\ud3ec\ub10c\ud2b8 / \ud568\uc218", + "file_type": "document", + "source_file": "pages/B02_ProjRegister/B02_frontend.md", + "source_location": "L19", + "_origin": "ast", + "id": "pages_b02_projregister_b02_frontend_\ucef4\ud3ec\ub10c\ud2b8_\ud568\uc218", + "community": 13, + "community_name": "B02_ProjRegister \u2014 Frontend", + "norm_label": "\u110f\u1165\u11b7\u1111\u1169\u1102\u1165\u11ab\u1110\u1173 / \u1112\u1161\u11b7\u1109\u116e" + }, + { + "label": "\uc785\ub825 \ud544\ub4dc", + "file_type": "document", + "source_file": "pages/B02_ProjRegister/B02_frontend.md", + "source_location": "L26", + "_origin": "ast", + "id": "pages_b02_projregister_b02_frontend_\uc785\ub825_\ud544\ub4dc", + "community": 13, + "community_name": "B02_ProjRegister \u2014 Frontend", + "norm_label": "\u110b\u1175\u11b8\u1105\u1167\u11a8 \u1111\u1175\u11af\u1103\u1173" + }, + { + "label": "\uc81c\ucd9c \ub85c\uc9c1", + "file_type": "document", + "source_file": "pages/B02_ProjRegister/B02_frontend.md", + "source_location": "L37", + "_origin": "ast", + "id": "pages_b02_projregister_b02_frontend_\uc81c\ucd9c_\ub85c\uc9c1", + "community": 13, + "community_name": "B02_ProjRegister \u2014 Frontend", + "norm_label": "\u110c\u1166\u110e\u116e\u11af \u1105\u1169\u110c\u1175\u11a8" + }, + { + "label": "\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", + "file_type": "document", + "source_file": "pages/B02_ProjRegister/B02_frontend.md", + "source_location": "L45", + "_origin": "ast", + "id": "pages_b02_projregister_b02_frontend_\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", + "community": 13, + "community_name": "B02_ProjRegister \u2014 Frontend", + "norm_label": "\u1105\u1169\u110f\u1165\u11af\u1105\u1161\u110b\u1175\u110c\u1166\u110b\u1175\u1109\u1167\u11ab" + }, + { + "label": "\uc2a4\ud0c0\uc77c (CSS)", + "file_type": "document", + "source_file": "pages/B02_ProjRegister/B02_frontend.md", + "source_location": "L57", + "_origin": "ast", + "id": "pages_b02_projregister_b02_frontend_\uc2a4\ud0c0\uc77c_css", + "community": 13, + "community_name": "B02_ProjRegister \u2014 Frontend", + "norm_label": "\u1109\u1173\u1110\u1161\u110b\u1175\u11af (css)" + }, + { + "label": "\uc774\ubca4\ud2b8 \ud578\ub4e4\ub7ec", + "file_type": "document", + "source_file": "pages/B02_ProjRegister/B02_frontend.md", + "source_location": "L66", + "_origin": "ast", + "id": "pages_b02_projregister_b02_frontend_\uc774\ubca4\ud2b8_\ud578\ub4e4\ub7ec", + "community": 13, + "community_name": "B02_ProjRegister \u2014 Frontend", + "norm_label": "\u110b\u1175\u1107\u1166\u11ab\u1110\u1173 \u1112\u1162\u11ab\u1103\u1173\u11af\u1105\u1165" + }, + { + "label": "\uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/B02_ProjRegister/B02_frontend.md", + "source_location": "L72", + "_origin": "ast", + "id": "pages_b02_projregister_b02_frontend_\uc758\uc874\uc131", + "community": 13, + "community_name": "B02_ProjRegister \u2014 Frontend", + "norm_label": "\u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "\ucc38\uace0", + "file_type": "document", + "source_file": "pages/B02_ProjRegister/B02_frontend.md", + "source_location": "L80", + "_origin": "ast", + "id": "pages_b02_projregister_b02_frontend_\ucc38\uace0", + "community": 13, + "community_name": "B02_ProjRegister \u2014 Frontend", + "norm_label": "\u110e\u1161\u11b7\u1100\u1169" + }, + { + "label": "B02_ProjRegister_Router.md", + "file_type": "document", + "source_file": "pages/B02_ProjRegister/backend/B02_ProjRegister_Router.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b02_projregister_backend_b02_projregister_router", + "community": 126, + "community_name": "B02_ProjRegister_Router.md", + "norm_label": "b02_projregister_router.md" + }, + { + "label": "B02_ProjRegister_Router.py", + "file_type": "document", + "source_file": "pages/B02_ProjRegister/backend/B02_ProjRegister_Router.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b02_projregister_backend_b02_projregister_router_b02_projregister_router_py", + "community": 126, + "community_name": "B02_ProjRegister_Router.md", + "norm_label": "b02_projregister_router.py" + }, + { + "label": "\ud83d\udee0\ufe0f \uc8fc\uc694 \ud568\uc218 \ubaa9\ub85d", + "file_type": "document", + "source_file": "pages/B02_ProjRegister/backend/B02_ProjRegister_Router.md", + "source_location": "L14", + "_origin": "ast", + "id": "pages_b02_projregister_backend_b02_projregister_router_\uc8fc\uc694_\ud568\uc218_\ubaa9\ub85d", + "community": 126, + "community_name": "B02_ProjRegister_Router.md", + "norm_label": "\ud83d\udee0\ufe0f \u110c\u116e\u110b\u116d \u1112\u1161\u11b7\u1109\u116e \u1106\u1169\u11a8\u1105\u1169\u11a8" + }, + { + "label": "\ud83d\udd17 \uc5f0\uad00 \uac1c\ub150 \ubc0f \uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/B02_ProjRegister/backend/B02_ProjRegister_Router.md", + "source_location": "L20", + "_origin": "ast", + "id": "pages_b02_projregister_backend_b02_projregister_router_\uc5f0\uad00_\uac1c\ub150_\ubc0f_\uc758\uc874\uc131", + "community": 126, + "community_name": "B02_ProjRegister_Router.md", + "norm_label": "\ud83d\udd17 \u110b\u1167\u11ab\u1100\u116a\u11ab \u1100\u1162\u1102\u1167\u11b7 \u1106\u1175\u11be \u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "B03_FileInput_plan_lidar_multi_file.md", + "file_type": "document", + "source_file": "pages/B03_FileInput/B03_FileInput_plan_lidar_multi_file.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b03_fileinput_b03_fileinput_plan_lidar_multi_file", + "community": 149, + "community_name": "B03_FileInput_plan_lidar_multi_file.md", + "norm_label": "b03_fileinput_plan_lidar_multi_file.md" + }, + { + "label": "B03 \ub2e4\uc911 \ub77c\uc774\ub2e4 \ud30c\uc77c\u00b7\ub300\uc6a9\ub7c9 \ucc98\ub9ac \ubcf4\ub958 \uacc4\ud68d", + "file_type": "document", + "source_file": "pages/B03_FileInput/B03_FileInput_plan_lidar_multi_file.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b03_fileinput_b03_fileinput_plan_lidar_multi_file_b03_\ub2e4\uc911_\ub77c\uc774\ub2e4_\ud30c\uc77c_\ub300\uc6a9\ub7c9_\ucc98\ub9ac_\ubcf4\ub958_\uacc4\ud68d", + "community": 149, + "community_name": "B03_FileInput_plan_lidar_multi_file.md", + "norm_label": "b03 \u1103\u1161\u110c\u116e\u11bc \u1105\u1161\u110b\u1175\u1103\u1161 \u1111\u1161\u110b\u1175\u11af\u00b7\u1103\u1162\u110b\u116d\u11bc\u1105\u1163\u11bc \u110e\u1165\u1105\u1175 \u1107\u1169\u1105\u1172 \u1100\u1168\u1112\u116c\u11a8" + }, + { + "label": "B03_api.md", + "file_type": "document", + "source_file": "pages/B03_FileInput/B03_api.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b03_fileinput_b03_api", + "community": 63, + "community_name": "B03_FileInput \u2014 API", + "norm_label": "b03_api.md" + }, + { + "label": "B03_FileInput \u2014 API", + "file_type": "document", + "source_file": "pages/B03_FileInput/B03_api.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b03_fileinput_b03_api_b03_fileinput_api", + "community": 63, + "community_name": "B03_FileInput \u2014 API", + "norm_label": "b03_fileinput \u2014 api" + }, + { + "label": "\uc77c\ubc18 \uc5c5\ub85c\ub4dc", + "file_type": "document", + "source_file": "pages/B03_FileInput/B03_api.md", + "source_location": "L16", + "_origin": "ast", + "id": "pages_b03_fileinput_b03_api_\uc77c\ubc18_\uc5c5\ub85c\ub4dc", + "community": 63, + "community_name": "B03_FileInput \u2014 API", + "norm_label": "\u110b\u1175\u11af\u1107\u1161\u11ab \u110b\u1165\u11b8\u1105\u1169\u1103\u1173" + }, + { + "label": "\uccad\ud06c \uc5c5\ub85c\ub4dc", + "file_type": "document", + "source_file": "pages/B03_FileInput/B03_api.md", + "source_location": "L21", + "_origin": "ast", + "id": "pages_b03_fileinput_b03_api_\uccad\ud06c_\uc5c5\ub85c\ub4dc", + "community": 63, + "community_name": "B03_FileInput \u2014 API", + "norm_label": "\u110e\u1165\u11bc\u110f\u1173 \u110b\u1165\u11b8\u1105\u1169\u1103\u1173" + }, + { + "label": "workflow \uc870\ud68c", + "file_type": "document", + "source_file": "pages/B03_FileInput/B03_api.md", + "source_location": "L29", + "_origin": "ast", + "id": "pages_b03_fileinput_b03_api_workflow_\uc870\ud68c", + "community": 63, + "community_name": "B03_FileInput \u2014 API", + "norm_label": "workflow \u110c\u1169\u1112\u116c" + }, + { + "label": "B03_backend.md", + "file_type": "document", + "source_file": "pages/B03_FileInput/B03_backend.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b03_fileinput_b03_backend", + "community": 37, + "community_name": "B03_FileInput \u2014 Backend", + "norm_label": "b03_backend.md" + }, + { + "label": "B03_FileInput \u2014 Backend", + "file_type": "document", + "source_file": "pages/B03_FileInput/B03_backend.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b03_fileinput_b03_backend_b03_fileinput_backend", + "community": 37, + "community_name": "B03_FileInput \u2014 Backend", + "norm_label": "b03_fileinput \u2014 backend" + }, + { + "label": "\uc785\ub825 \uac80\uc99d\u00b7\ud30c\uc77c \ucc98\ub9ac", + "file_type": "document", + "source_file": "pages/B03_FileInput/B03_backend.md", + "source_location": "L14", + "_origin": "ast", + "id": "pages_b03_fileinput_b03_backend_\uc785\ub825_\uac80\uc99d_\ud30c\uc77c_\ucc98\ub9ac", + "community": 37, + "community_name": "B03_FileInput \u2014 Backend", + "norm_label": "\u110b\u1175\u11b8\u1105\u1167\u11a8 \u1100\u1165\u11b7\u110c\u1173\u11bc\u00b7\u1111\u1161\u110b\u1175\u11af \u110e\u1165\u1105\u1175" + }, + { + "label": "\uba54\ud0c0\ub370\uc774\ud130 \ubd84\uc11d \ubc0f \ud30c\uc77c \uc9c0\ubb38", + "file_type": "document", + "source_file": "pages/B03_FileInput/B03_backend.md", + "source_location": "L26", + "_origin": "ast", + "id": "pages_b03_fileinput_b03_backend_\uba54\ud0c0\ub370\uc774\ud130_\ubd84\uc11d_\ubc0f_\ud30c\uc77c_\uc9c0\ubb38", + "community": 37, + "community_name": "B03_FileInput \u2014 Backend", + "norm_label": "\u1106\u1166\u1110\u1161\u1103\u1166\u110b\u1175\u1110\u1165 \u1107\u116e\u11ab\u1109\u1165\u11a8 \u1106\u1175\u11be \u1111\u1161\u110b\u1175\u11af \u110c\u1175\u1106\u116e\u11ab" + }, + { + "label": "\uc784\uc2dc \ubcf4\uad00\ud568 (R2 Temp Upload)", + "file_type": "document", + "source_file": "pages/B03_FileInput/B03_backend.md", + "source_location": "L37", + "_origin": "ast", + "id": "pages_b03_fileinput_b03_backend_\uc784\uc2dc_\ubcf4\uad00\ud568_r2_temp_upload", + "community": 37, + "community_name": "B03_FileInput \u2014 Backend", + "norm_label": "\u110b\u1175\u11b7\u1109\u1175 \u1107\u1169\u1100\u116a\u11ab\u1112\u1161\u11b7 (r2 temp upload)" + }, + { + "label": "\uc800\uc7a5\uc18c \ubc0f \ucd08\uae30\ud654", + "file_type": "document", + "source_file": "pages/B03_FileInput/B03_backend.md", + "source_location": "L45", + "_origin": "ast", + "id": "pages_b03_fileinput_b03_backend_\uc800\uc7a5\uc18c_\ubc0f_\ucd08\uae30\ud654", + "community": 37, + "community_name": "B03_FileInput \u2014 Backend", + "norm_label": "\u110c\u1165\u110c\u1161\u11bc\u1109\u1169 \u1106\u1175\u11be \u110e\u1169\u1100\u1175\u1112\u116a" + }, + { + "label": "workflow\u00b7\uc54c\ub9bc", + "file_type": "document", + "source_file": "pages/B03_FileInput/B03_backend.md", + "source_location": "L54", + "_origin": "ast", + "id": "pages_b03_fileinput_b03_backend_workflow_\uc54c\ub9bc", + "community": 37, + "community_name": "B03_FileInput \u2014 Backend", + "norm_label": "workflow\u00b7\u110b\u1161\u11af\u1105\u1175\u11b7" + }, + { + "label": "B03_db.md", + "file_type": "document", + "source_file": "pages/B03_FileInput/B03_db.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b03_fileinput_b03_db", + "community": 127, + "community_name": "B03_FileInput \u2014 DB \uc0ac\uc6a9 \uad00\uacc4", + "norm_label": "b03_db.md" + }, + { + "label": "B03_FileInput \u2014 DB \uc0ac\uc6a9 \uad00\uacc4", + "file_type": "document", + "source_file": "pages/B03_FileInput/B03_db.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b03_fileinput_b03_db_b03_fileinput_db_\uc0ac\uc6a9_\uad00\uacc4", + "community": 127, + "community_name": "B03_FileInput \u2014 DB \uc0ac\uc6a9 \uad00\uacc4", + "norm_label": "b03_fileinput \u2014 db \u1109\u1161\u110b\u116d\u11bc \u1100\u116a\u11ab\u1100\u1168" + }, + { + "label": "\ud30c\uc77c \uacbd\ub85c", + "file_type": "document", + "source_file": "pages/B03_FileInput/B03_db.md", + "source_location": "L22", + "_origin": "ast", + "id": "pages_b03_fileinput_b03_db_\ud30c\uc77c_\uacbd\ub85c", + "community": 127, + "community_name": "B03_FileInput \u2014 DB \uc0ac\uc6a9 \uad00\uacc4", + "norm_label": "\u1111\u1161\u110b\u1175\u11af \u1100\u1167\u11bc\u1105\u1169" + }, + { + "label": "B03_dependencies.md", + "file_type": "document", + "source_file": "pages/B03_FileInput/B03_dependencies.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b03_fileinput_b03_dependencies", + "community": 128, + "community_name": "B03_FileInput \u2014 Dependencies", + "norm_label": "b03_dependencies.md" + }, + { + "label": "B03_FileInput \u2014 Dependencies", + "file_type": "document", + "source_file": "pages/B03_FileInput/B03_dependencies.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b03_fileinput_b03_dependencies_b03_fileinput_dependencies", + "community": 128, + "community_name": "B03_FileInput \u2014 Dependencies", + "norm_label": "b03_fileinput \u2014 dependencies" + }, + { + "label": "\uacf5\ud1b5 \ubaa8\ub4c8", + "file_type": "document", + "source_file": "pages/B03_FileInput/B03_dependencies.md", + "source_location": "L24", + "_origin": "ast", + "id": "pages_b03_fileinput_b03_dependencies_\uacf5\ud1b5_\ubaa8\ub4c8", + "community": 128, + "community_name": "B03_FileInput \u2014 Dependencies", + "norm_label": "\u1100\u1169\u11bc\u1110\u1169\u11bc \u1106\u1169\u1103\u1172\u11af" + }, + { + "label": "B03_frontend.md", + "file_type": "document", + "source_file": "pages/B03_FileInput/B03_frontend.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b03_fileinput_b03_frontend", + "community": 51, + "community_name": "B03_FileInput \u2014 Frontend", + "norm_label": "b03_frontend.md" + }, + { + "label": "B03_FileInput \u2014 Frontend", + "file_type": "document", + "source_file": "pages/B03_FileInput/B03_frontend.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b03_fileinput_b03_frontend_b03_fileinput_frontend", + "community": 51, + "community_name": "B03_FileInput \u2014 Frontend", + "norm_label": "b03_fileinput \u2014 frontend" + }, + { + "label": "\ud398\uc774\uc9c0\u00b7\uc5c5\ub85c\ub4dc \ud750\ub984", + "file_type": "document", + "source_file": "pages/B03_FileInput/B03_frontend.md", + "source_location": "L14", + "_origin": "ast", + "id": "pages_b03_fileinput_b03_frontend_\ud398\uc774\uc9c0_\uc5c5\ub85c\ub4dc_\ud750\ub984", + "community": 51, + "community_name": "B03_FileInput \u2014 Frontend", + "norm_label": "\u1111\u1166\u110b\u1175\u110c\u1175\u00b7\u110b\u1165\u11b8\u1105\u1169\u1103\u1173 \u1112\u1173\u1105\u1173\u11b7" + }, + { + "label": "UI \uc9c0\uc6d0 \uc720\ud2f8\ub9ac\ud2f0 (\ubd84\ud560 \uc644\ub8cc)", + "file_type": "document", + "source_file": "pages/B03_FileInput/B03_frontend.md", + "source_location": "L25", + "_origin": "ast", + "id": "pages_b03_fileinput_b03_frontend_ui_\uc9c0\uc6d0_\uc720\ud2f8\ub9ac\ud2f0_\ubd84\ud560_\uc644\ub8cc", + "community": 51, + "community_name": "B03_FileInput \u2014 Frontend", + "norm_label": "ui \u110c\u1175\u110b\u116f\u11ab \u110b\u1172\u1110\u1175\u11af\u1105\u1175\u1110\u1175 (\u1107\u116e\u11ab\u1112\u1161\u11af \u110b\u116a\u11ab\u1105\u116d)" + }, + { + "label": "API \ud074\ub77c\uc774\uc5b8\ud2b8", + "file_type": "document", + "source_file": "pages/B03_FileInput/B03_frontend.md", + "source_location": "L30", + "_origin": "ast", + "id": "pages_b03_fileinput_b03_frontend_api_\ud074\ub77c\uc774\uc5b8\ud2b8", + "community": 51, + "community_name": "B03_FileInput \u2014 Frontend", + "norm_label": "api \u110f\u1173\u11af\u1105\u1161\u110b\u1175\u110b\u1165\u11ab\u1110\u1173" + }, + { + "label": "\ube0c\ub77c\uc6b0\uc800 \uc0c1\ud0dc\u00b7\uc624\ud504\ub77c\uc778 \ubcf4\uc870", + "file_type": "document", + "source_file": "pages/B03_FileInput/B03_frontend.md", + "source_location": "L40", + "_origin": "ast", + "id": "pages_b03_fileinput_b03_frontend_\ube0c\ub77c\uc6b0\uc800_\uc0c1\ud0dc_\uc624\ud504\ub77c\uc778_\ubcf4\uc870", + "community": 51, + "community_name": "B03_FileInput \u2014 Frontend", + "norm_label": "\u1107\u1173\u1105\u1161\u110b\u116e\u110c\u1165 \u1109\u1161\u11bc\u1110\u1162\u00b7\u110b\u1169\u1111\u1173\u1105\u1161\u110b\u1175\u11ab \u1107\u1169\u110c\u1169" + }, + { + "label": "B03_route_snapshot_crs.md", + "file_type": "document", + "source_file": "pages/B03_FileInput/B03_route_snapshot_crs.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b03_fileinput_b03_route_snapshot_crs", + "community": 163, + "community_name": "B05 \uad6c\uc870\ubb3c 3D \ud22c\uc601 \ucee4\ube0c", + "norm_label": "b03_route_snapshot_crs.md" + }, + { + "label": "B03 \uacc4\ud68d\ub178\uc120 \uc815\ubcf8\u00b7\uc88c\ud45c\uacc4 \ud6c4\uc18d", + "file_type": "document", + "source_file": "pages/B03_FileInput/B03_route_snapshot_crs.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b03_fileinput_b03_route_snapshot_crs_b03_\uacc4\ud68d\ub178\uc120_\uc815\ubcf8_\uc88c\ud45c\uacc4_\ud6c4\uc18d", + "community": 163, + "community_name": "B05 \uad6c\uc870\ubb3c 3D \ud22c\uc601 \ucee4\ube0c", + "norm_label": "b03 \u1100\u1168\u1112\u116c\u11a8\u1102\u1169\u1109\u1165\u11ab \u110c\u1165\u11bc\u1107\u1169\u11ab\u00b7\u110c\u116a\u1111\u116d\u1100\u1168 \u1112\u116e\u1109\u1169\u11a8" + }, + { + "label": "\uacc4\ud68d\ub178\uc120 \uc815\ubcf8", + "file_type": "document", + "source_file": "pages/B03_FileInput/B03_route_snapshot_crs.md", + "source_location": "L12", + "_origin": "ast", + "id": "pages_b03_fileinput_b03_route_snapshot_crs_\uacc4\ud68d\ub178\uc120_\uc815\ubcf8", + "community": 163, + "community_name": "B05 \uad6c\uc870\ubb3c 3D \ud22c\uc601 \ucee4\ube0c", + "norm_label": "\u1100\u1168\u1112\u116c\u11a8\u1102\u1169\u1109\u1165\u11ab \u110c\u1165\u11bc\u1107\u1169\u11ab" + }, + { + "label": "LAS \uc5c6\ub294 \uc124\uacc4\uc640 \uc5c5\ub85c\ub4dc \uc0c1\ud0dc", + "file_type": "document", + "source_file": "pages/B03_FileInput/B03_route_snapshot_crs.md", + "source_location": "L23", + "_origin": "ast", + "id": "pages_b03_fileinput_b03_route_snapshot_crs_las_\uc5c6\ub294_\uc124\uacc4\uc640_\uc5c5\ub85c\ub4dc_\uc0c1\ud0dc", + "community": 163, + "community_name": "B05 \uad6c\uc870\ubb3c 3D \ud22c\uc601 \ucee4\ube0c", + "norm_label": "las \u110b\u1165\u11b9\u1102\u1173\u11ab \u1109\u1165\u11af\u1100\u1168\u110b\u116a \u110b\u1165\u11b8\u1105\u1169\u1103\u1173 \u1109\u1161\u11bc\u1110\u1162" + }, + { + "label": "B03_upload_ui_2026_09.md", + "file_type": "document", + "source_file": "pages/B03_FileInput/B03_upload_ui_2026_09.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b03_fileinput_b03_upload_ui_2026_09", + "community": 164, + "community_name": "B05_Profile \u2014 Frontend", + "norm_label": "b03_upload_ui_2026_09.md" + }, + { + "label": "B03 \ud30c\uc77c \uc785\ub825 \ud654\uba74 \uc815\ub9ac", + "file_type": "document", + "source_file": "pages/B03_FileInput/B03_upload_ui_2026_09.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b03_fileinput_b03_upload_ui_2026_09_b03_\ud30c\uc77c_\uc785\ub825_\ud654\uba74_\uc815\ub9ac", + "community": 164, + "community_name": "B05_Profile \u2014 Frontend", + "norm_label": "b03 \u1111\u1161\u110b\u1175\u11af \u110b\u1175\u11b8\u1105\u1167\u11a8 \u1112\u116a\u1106\u1167\u11ab \u110c\u1165\u11bc\u1105\u1175" + }, + { + "label": "\ud654\uba74 \uad6c\uc131", + "file_type": "document", + "source_file": "pages/B03_FileInput/B03_upload_ui_2026_09.md", + "source_location": "L12", + "_origin": "ast", + "id": "pages_b03_fileinput_b03_upload_ui_2026_09_\ud654\uba74_\uad6c\uc131", + "community": 164, + "community_name": "B05_Profile \u2014 Frontend", + "norm_label": "\u1112\u116a\u1106\u1167\u11ab \u1100\u116e\u1109\u1165\u11bc" + }, + { + "label": "\uc785\ub825 \uaddc\uce59", + "file_type": "document", + "source_file": "pages/B03_FileInput/B03_upload_ui_2026_09.md", + "source_location": "L23", + "_origin": "ast", + "id": "pages_b03_fileinput_b03_upload_ui_2026_09_\uc785\ub825_\uaddc\uce59", + "community": 164, + "community_name": "B05_Profile \u2014 Frontend", + "norm_label": "\u110b\u1175\u11b8\u1105\u1167\u11a8 \u1100\u1172\u110e\u1175\u11a8" + }, + { + "label": "B03_FileInput_Router.md", + "file_type": "document", + "source_file": "pages/B03_FileInput/backend/B03_FileInput_Router.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b03_fileinput_backend_b03_fileinput_router", + "community": 129, + "community_name": "B03_FileInput_Router.md", + "norm_label": "b03_fileinput_router.md" + }, + { + "label": "B03_FileInput_Router.py", + "file_type": "document", + "source_file": "pages/B03_FileInput/backend/B03_FileInput_Router.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b03_fileinput_backend_b03_fileinput_router_b03_fileinput_router_py", + "community": 129, + "community_name": "B03_FileInput_Router.md", + "norm_label": "b03_fileinput_router.py" + }, + { + "label": "\ud83d\udee0\ufe0f \uc8fc\uc694 \ud568\uc218 \ubaa9\ub85d", + "file_type": "document", + "source_file": "pages/B03_FileInput/backend/B03_FileInput_Router.md", + "source_location": "L14", + "_origin": "ast", + "id": "pages_b03_fileinput_backend_b03_fileinput_router_\uc8fc\uc694_\ud568\uc218_\ubaa9\ub85d", + "community": 129, + "community_name": "B03_FileInput_Router.md", + "norm_label": "\ud83d\udee0\ufe0f \u110c\u116e\u110b\u116d \u1112\u1161\u11b7\u1109\u116e \u1106\u1169\u11a8\u1105\u1169\u11a8" + }, + { + "label": "\ud83d\udd17 \uc5f0\uad00 \uac1c\ub150 \ubc0f \uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/B03_FileInput/backend/B03_FileInput_Router.md", + "source_location": "L21", + "_origin": "ast", + "id": "pages_b03_fileinput_backend_b03_fileinput_router_\uc5f0\uad00_\uac1c\ub150_\ubc0f_\uc758\uc874\uc131", + "community": 129, + "community_name": "B03_FileInput_Router.md", + "norm_label": "\ud83d\udd17 \u110b\u1167\u11ab\u1100\u116a\u11ab \u1100\u1162\u1102\u1167\u11b7 \u1106\u1175\u11be \u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "B04_api.md", + "file_type": "document", + "source_file": "pages/B04_PreProcess/B04_api.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b04_preprocess_b04_api", + "community": 97, + "community_name": "B04_PreProcess \u2014 API", + "norm_label": "b04_api.md" + }, + { + "label": "B04_PreProcess \u2014 API", + "file_type": "document", + "source_file": "pages/B04_PreProcess/B04_api.md", + "source_location": "L8", + "_origin": "ast", + "id": "pages_b04_preprocess_b04_api_b04_preprocess_api", + "community": 97, + "community_name": "B04_PreProcess \u2014 API", + "norm_label": "b04_preprocess \u2014 api" + }, + { + "label": "\uc5d4\ub4dc\ud3ec\uc778\ud2b8", + "file_type": "document", + "source_file": "pages/B04_PreProcess/B04_api.md", + "source_location": "L14", + "_origin": "ast", + "id": "pages_b04_preprocess_b04_api_\uc5d4\ub4dc\ud3ec\uc778\ud2b8", + "community": 97, + "community_name": "B04_PreProcess \u2014 API", + "norm_label": "\u110b\u1166\u11ab\u1103\u1173\u1111\u1169\u110b\u1175\u11ab\u1110\u1173" + }, + { + "label": "\uc694\uccad/\uc751\ub2f5 \uc2a4\ud0a4\ub9c8 (Pydantic)", + "file_type": "document", + "source_file": "pages/B04_PreProcess/B04_api.md", + "source_location": "L40", + "_origin": "ast", + "id": "pages_b04_preprocess_b04_api_\uc694\uccad_\uc751\ub2f5_\uc2a4\ud0a4\ub9c8_pydantic", + "community": 97, + "community_name": "B04_PreProcess \u2014 API", + "norm_label": "\u110b\u116d\u110e\u1165\u11bc/\u110b\u1173\u11bc\u1103\u1161\u11b8 \u1109\u1173\u110f\u1175\u1106\u1161 (pydantic)" + }, + { + "label": "B04_backend.md", + "file_type": "document", + "source_file": "pages/B04_PreProcess/B04_backend.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b04_preprocess_b04_backend", + "community": 20, + "community_name": "B04_PreProcess \u2014 Backend", + "norm_label": "b04_backend.md" + }, + { + "label": "B04_PreProcess \u2014 Backend", + "file_type": "document", + "source_file": "pages/B04_PreProcess/B04_backend.md", + "source_location": "L9", + "_origin": "ast", + "id": "pages_b04_preprocess_b04_backend_b04_preprocess_backend", + "community": 20, + "community_name": "B04_PreProcess \u2014 Backend", + "norm_label": "b04_preprocess \u2014 backend" + }, + { + "label": "\ud30c\uc77c \uad6c\uc131 (\uc624\ucf00\uc2a4\ud2b8\ub808\uc774\ud130/\uc800\uc7a5\uc18c/\ub77c\uc6b0\ud130)", + "file_type": "document", + "source_file": "pages/B04_PreProcess/B04_backend.md", + "source_location": "L13", + "_origin": "ast", + "id": "pages_b04_preprocess_b04_backend_\ud30c\uc77c_\uad6c\uc131_\uc624\ucf00\uc2a4\ud2b8\ub808\uc774\ud130_\uc800\uc7a5\uc18c_\ub77c\uc6b0\ud130", + "community": 20, + "community_name": "B04_PreProcess \u2014 Backend", + "norm_label": "\u1111\u1161\u110b\u1175\u11af \u1100\u116e\u1109\u1165\u11bc (\u110b\u1169\u110f\u1166\u1109\u1173\u1110\u1173\u1105\u1166\u110b\u1175\u1110\u1165/\u110c\u1165\u110c\u1161\u11bc\u1109\u1169/\u1105\u1161\u110b\u116e\u1110\u1165)" + }, + { + "label": "\uc5d4\uc9c4 \uc11c\ube0c\ubaa8\ub4c8", + "file_type": "document", + "source_file": "pages/B04_PreProcess/B04_backend.md", + "source_location": "L27", + "_origin": "ast", + "id": "pages_b04_preprocess_b04_backend_\uc5d4\uc9c4_\uc11c\ube0c\ubaa8\ub4c8", + "community": 20, + "community_name": "B04_PreProcess \u2014 Backend", + "norm_label": "\u110b\u1166\u11ab\u110c\u1175\u11ab \u1109\u1165\u1107\u1173\u1106\u1169\u1103\u1172\u11af" + }, + { + "label": "\uc8fc\uc694 \ud568\uc218 (Router / Repository / Engine / Utility)", + "file_type": "document", + "source_file": "pages/B04_PreProcess/B04_backend.md", + "source_location": "L45", + "_origin": "ast", + "id": "pages_b04_preprocess_b04_backend_\uc8fc\uc694_\ud568\uc218_router_repository_engine_utility", + "community": 20, + "community_name": "B04_PreProcess \u2014 Backend", + "norm_label": "\u110c\u116e\u110b\u116d \u1112\u1161\u11b7\u1109\u116e (router / repository / engine / utility)" + }, + { + "label": "\uc218\uce58\uc9c0\ud615\ub3c4 \ub3c4\uc5fd \uc624\ubc84\ub808\uc774 \uc544\ud0a4\ud14d\ucc98 (2026-07-26, 2026-08-01 S8 \uac1c\ud3b8)", + "file_type": "document", + "source_file": "pages/B04_PreProcess/B04_backend.md", + "source_location": "L68", + "_origin": "ast", + "id": "pages_b04_preprocess_b04_backend_\uc218\uce58\uc9c0\ud615\ub3c4_\ub3c4\uc5fd_\uc624\ubc84\ub808\uc774_\uc544\ud0a4\ud14d\ucc98_2026_07_26_2026_08_01_s8_\uac1c\ud3b8", + "community": 20, + "community_name": "B04_PreProcess \u2014 Backend", + "norm_label": "\u1109\u116e\u110e\u1175\u110c\u1175\u1112\u1167\u11bc\u1103\u1169 \u1103\u1169\u110b\u1167\u11b8 \u110b\u1169\u1107\u1165\u1105\u1166\u110b\u1175 \u110b\u1161\u110f\u1175\u1110\u1166\u11a8\u110e\u1165 (2026-07-26, 2026-08-01 s8 \u1100\u1162\u1111\u1167\u11ab)" + }, + { + "label": "\uc6cc\ud06c\ud50c\ub85c\uc6b0 \uc0c1\ud0dc \uc804\uc774 \ubc0f \uc790\ub3d9 \ud655\uc815", + "file_type": "document", + "source_file": "pages/B04_PreProcess/B04_backend.md", + "source_location": "L75", + "_origin": "ast", + "id": "pages_b04_preprocess_b04_backend_\uc6cc\ud06c\ud50c\ub85c\uc6b0_\uc0c1\ud0dc_\uc804\uc774_\ubc0f_\uc790\ub3d9_\ud655\uc815", + "community": 20, + "community_name": "B04_PreProcess \u2014 Backend", + "norm_label": "\u110b\u116f\u110f\u1173\u1111\u1173\u11af\u1105\u1169\u110b\u116e \u1109\u1161\u11bc\u1110\u1162 \u110c\u1165\u11ab\u110b\u1175 \u1106\u1175\u11be \u110c\u1161\u1103\u1169\u11bc \u1112\u116a\u11a8\u110c\u1165\u11bc" + }, + { + "label": "\u2699\ufe0f \uc124\uc815 \ubc0f \ud658\uacbd \ud30c\uc77c \uc815\ud569\uc131", + "file_type": "document", + "source_file": "pages/B04_PreProcess/B04_backend.md", + "source_location": "L82", + "_origin": "ast", + "id": "pages_b04_preprocess_b04_backend_\uc124\uc815_\ubc0f_\ud658\uacbd_\ud30c\uc77c_\uc815\ud569\uc131", + "community": 20, + "community_name": "B04_PreProcess \u2014 Backend", + "norm_label": "\u2699\ufe0f \u1109\u1165\u11af\u110c\u1165\u11bc \u1106\u1175\u11be \u1112\u116a\u11ab\u1100\u1167\u11bc \u1111\u1161\u110b\u1175\u11af \u110c\u1165\u11bc\u1112\u1161\u11b8\u1109\u1165\u11bc" + }, + { + "label": "\ud83d\udccb \uad6c\ud604 \uc608\uc678 \ucc98\ub9ac \uac80\ud1a0 \ud56d\ubaa9 (PLAN)", + "file_type": "document", + "source_file": "pages/B04_PreProcess/B04_backend.md", + "source_location": "L92", + "_origin": "ast", + "id": "pages_b04_preprocess_b04_backend_\uad6c\ud604_\uc608\uc678_\ucc98\ub9ac_\uac80\ud1a0_\ud56d\ubaa9_plan", + "community": 20, + "community_name": "B04_PreProcess \u2014 Backend", + "norm_label": "\ud83d\udccb \u1100\u116e\u1112\u1167\u11ab \u110b\u1168\u110b\u116c \u110e\u1165\u1105\u1175 \u1100\u1165\u11b7\u1110\u1169 \u1112\u1161\u11bc\u1106\u1169\u11a8 (plan)" + }, + { + "label": "2D/GIS \ubbf8\ud45c\uc2dc \uc6d0\uc778 \ubd84\uc11d \ubc0f \uc870\uce58", + "file_type": "document", + "source_file": "pages/B04_PreProcess/B04_backend.md", + "source_location": "L97", + "_origin": "ast", + "id": "pages_b04_preprocess_b04_backend_2d_gis_\ubbf8\ud45c\uc2dc_\uc6d0\uc778_\ubd84\uc11d_\ubc0f_\uc870\uce58", + "community": 20, + "community_name": "B04_PreProcess \u2014 Backend", + "norm_label": "2d/gis \u1106\u1175\u1111\u116d\u1109\u1175 \u110b\u116f\u11ab\u110b\u1175\u11ab \u1107\u116e\u11ab\u1109\u1165\u11a8 \u1106\u1175\u11be \u110c\u1169\u110e\u1175" + }, + { + "label": "B04_compass_crs_2026_09.md", + "file_type": "document", + "source_file": "pages/B04_PreProcess/B04_compass_crs_2026_09.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b04_preprocess_b04_compass_crs_2026_09", + "community": 165, + "community_name": "B05 \uc720\ud1a0\uace1\uc120\u00b7\uad6c\uc870\ubb3c \ud6c4\uc18d", + "norm_label": "b04_compass_crs_2026_09.md" + }, + { + "label": "B04 3D \ubc29\uc704\u00b7\uc88c\ud45c\uacc4 \ucd5c\uc2e0 \uacb0\uc815", + "file_type": "document", + "source_file": "pages/B04_PreProcess/B04_compass_crs_2026_09.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b04_preprocess_b04_compass_crs_2026_09_b04_3d_\ubc29\uc704_\uc88c\ud45c\uacc4_\ucd5c\uc2e0_\uacb0\uc815", + "community": 165, + "community_name": "B05 \uc720\ud1a0\uace1\uc120\u00b7\uad6c\uc870\ubb3c \ud6c4\uc18d", + "norm_label": "b04 3d \u1107\u1161\u11bc\u110b\u1171\u00b7\u110c\u116a\u1111\u116d\u1100\u1168 \u110e\u116c\u1109\u1175\u11ab \u1100\u1167\u11af\u110c\u1165\u11bc" + }, + { + "label": "3D \ubc29\uc704 \uc704\uc82f", + "file_type": "document", + "source_file": "pages/B04_PreProcess/B04_compass_crs_2026_09.md", + "source_location": "L12", + "_origin": "ast", + "id": "pages_b04_preprocess_b04_compass_crs_2026_09_3d_\ubc29\uc704_\uc704\uc82f", + "community": 165, + "community_name": "B05 \uc720\ud1a0\uace1\uc120\u00b7\uad6c\uc870\ubb3c \ud6c4\uc18d", + "norm_label": "3d \u1107\u1161\u11bc\u110b\u1171 \u110b\u1171\u110c\u1166\u11ba" + }, + { + "label": "\uc791\uc5c5 \uc88c\ud45c\uacc4", + "file_type": "document", + "source_file": "pages/B04_PreProcess/B04_compass_crs_2026_09.md", + "source_location": "L21", + "_origin": "ast", + "id": "pages_b04_preprocess_b04_compass_crs_2026_09_\uc791\uc5c5_\uc88c\ud45c\uacc4", + "community": 165, + "community_name": "B05 \uc720\ud1a0\uace1\uc120\u00b7\uad6c\uc870\ubb3c \ud6c4\uc18d", + "norm_label": "\u110c\u1161\u11a8\u110b\u1165\u11b8 \u110c\u116a\u1111\u116d\u1100\u1168" + }, + { + "label": "B04_db.md", + "file_type": "document", + "source_file": "pages/B04_PreProcess/B04_db.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b04_preprocess_b04_db", + "community": 64, + "community_name": "B04_PreProcess \u2014 DB", + "norm_label": "b04_db.md" + }, + { + "label": "B04_PreProcess \u2014 DB", + "file_type": "document", + "source_file": "pages/B04_PreProcess/B04_db.md", + "source_location": "L8", + "_origin": "ast", + "id": "pages_b04_preprocess_b04_db_b04_preprocess_db", + "community": 64, + "community_name": "B04_PreProcess \u2014 DB", + "norm_label": "b04_preprocess \u2014 db" + }, + { + "label": "\uc4f0\ub294 \ud14c\uc774\ube14", + "file_type": "document", + "source_file": "pages/B04_PreProcess/B04_db.md", + "source_location": "L12", + "_origin": "ast", + "id": "pages_b04_preprocess_b04_db_\uc4f0\ub294_\ud14c\uc774\ube14", + "community": 64, + "community_name": "B04_PreProcess \u2014 DB", + "norm_label": "\u110a\u1173\u1102\u1173\u11ab \u1110\u1166\u110b\u1175\u1107\u1173\u11af" + }, + { + "label": "Repository \ud568\uc218", + "file_type": "document", + "source_file": "pages/B04_PreProcess/B04_db.md", + "source_location": "L23", + "_origin": "ast", + "id": "pages_b04_preprocess_b04_db_repository_\ud568\uc218", + "community": 64, + "community_name": "B04_PreProcess \u2014 DB", + "norm_label": "repository \u1112\u1161\u11b7\u1109\u116e" + }, + { + "label": "\ucc38\uace0", + "file_type": "document", + "source_file": "pages/B04_PreProcess/B04_db.md", + "source_location": "L34", + "_origin": "ast", + "id": "pages_b04_preprocess_b04_db_\ucc38\uace0", + "community": 64, + "community_name": "B04_PreProcess \u2014 DB", + "norm_label": "\u110e\u1161\u11b7\u1100\u1169" + }, + { + "label": "B04_dependencies.md", + "file_type": "document", + "source_file": "pages/B04_PreProcess/B04_dependencies.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b04_preprocess_b04_dependencies", + "community": 98, + "community_name": "B04_PreProcess \u2014 Dependencies", + "norm_label": "b04_dependencies.md" + }, + { + "label": "B04_PreProcess \u2014 Dependencies", + "file_type": "document", + "source_file": "pages/B04_PreProcess/B04_dependencies.md", + "source_location": "L9", + "_origin": "ast", + "id": "pages_b04_preprocess_b04_dependencies_b04_preprocess_dependencies", + "community": 98, + "community_name": "B04_PreProcess \u2014 Dependencies", + "norm_label": "b04_preprocess \u2014 dependencies" + }, + { + "label": "\ubc31\uc5d4\ub4dc (Python)", + "file_type": "document", + "source_file": "pages/B04_PreProcess/B04_dependencies.md", + "source_location": "L13", + "_origin": "ast", + "id": "pages_b04_preprocess_b04_dependencies_\ubc31\uc5d4\ub4dc_python", + "community": 98, + "community_name": "B04_PreProcess \u2014 Dependencies", + "norm_label": "\u1107\u1162\u11a8\u110b\u1166\u11ab\u1103\u1173 (python)" + }, + { + "label": "\ud504\ub860\ud2b8\uc5d4\ub4dc (TypeScript)", + "file_type": "document", + "source_file": "pages/B04_PreProcess/B04_dependencies.md", + "source_location": "L26", + "_origin": "ast", + "id": "pages_b04_preprocess_b04_dependencies_\ud504\ub860\ud2b8\uc5d4\ub4dc_typescript", + "community": 98, + "community_name": "B04_PreProcess \u2014 Dependencies", + "norm_label": "\u1111\u1173\u1105\u1169\u11ab\u1110\u1173\u110b\u1166\u11ab\u1103\u1173 (typescript)" + }, + { + "label": "B04_drainage_compass_crs.md", + "file_type": "document", + "source_file": "pages/B04_PreProcess/B04_drainage_compass_crs.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b04_preprocess_b04_drainage_compass_crs", + "community": 146, + "community_name": "B01~B09 Workflow \ub370\uc774\ud130 \ud750\ub984", + "norm_label": "b04_drainage_compass_crs.md" + }, + { + "label": "B04 \uc138\ubd80\uc720\uc5ed\u00b7\ubc29\uc704\u00b7\uc88c\ud45c\uacc4", + "file_type": "document", + "source_file": "pages/B04_PreProcess/B04_drainage_compass_crs.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b04_preprocess_b04_drainage_compass_crs_b04_\uc138\ubd80\uc720\uc5ed_\ubc29\uc704_\uc88c\ud45c\uacc4", + "community": 146, + "community_name": "B01~B09 Workflow \ub370\uc774\ud130 \ud750\ub984", + "norm_label": "b04 \u1109\u1166\u1107\u116e\u110b\u1172\u110b\u1167\u11a8\u00b7\u1107\u1161\u11bc\u110b\u1171\u00b7\u110c\u116a\u1111\u116d\u1100\u1168" + }, + { + "label": "\uc138\ubd80\uc720\uc5ed \ud615\uc0c1 \ubcf4\uc874", + "file_type": "document", + "source_file": "pages/B04_PreProcess/B04_drainage_compass_crs.md", + "source_location": "L12", + "_origin": "ast", + "id": "pages_b04_preprocess_b04_drainage_compass_crs_\uc138\ubd80\uc720\uc5ed_\ud615\uc0c1_\ubcf4\uc874", + "community": 146, + "community_name": "B01~B09 Workflow \ub370\uc774\ud130 \ud750\ub984", + "norm_label": "\u1109\u1166\u1107\u116e\u110b\u1172\u110b\u1167\u11a8 \u1112\u1167\u11bc\u1109\u1161\u11bc \u1107\u1169\u110c\u1169\u11ab" + }, + { + "label": "\uc885\ub2e8 \ub192\ub0ae\uc774 \uae30\ubc18 \ubc30\uc815", + "file_type": "document", + "source_file": "pages/B04_PreProcess/B04_drainage_compass_crs.md", + "source_location": "L24", + "_origin": "ast", + "id": "pages_b04_preprocess_b04_drainage_compass_crs_\uc885\ub2e8_\ub192\ub0ae\uc774_\uae30\ubc18_\ubc30\uc815", + "community": 146, + "community_name": "B01~B09 Workflow \ub370\uc774\ud130 \ud750\ub984", + "norm_label": "\u110c\u1169\u11bc\u1103\u1161\u11ab \u1102\u1169\u11c1\u1102\u1161\u11bd\u110b\u1175 \u1100\u1175\u1107\u1161\u11ab \u1107\u1162\u110c\u1165\u11bc" + }, + { + "label": "3D \ubc29\uc704\uc640 \uc88c\ud45c\uacc4", + "file_type": "document", + "source_file": "pages/B04_PreProcess/B04_drainage_compass_crs.md", + "source_location": "L32", + "_origin": "ast", + "id": "pages_b04_preprocess_b04_drainage_compass_crs_3d_\ubc29\uc704\uc640_\uc88c\ud45c\uacc4", + "community": 146, + "community_name": "B01~B09 Workflow \ub370\uc774\ud130 \ud750\ub984", + "norm_label": "3d \u1107\u1161\u11bc\u110b\u1171\u110b\u116a \u110c\u116a\u1111\u116d\u1100\u1168" + }, + { + "label": "B04_frontend.md", + "file_type": "document", + "source_file": "pages/B04_PreProcess/B04_frontend.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b04_preprocess_b04_frontend", + "community": 21, + "community_name": "B04_PreProcess \u2014 Frontend", + "norm_label": "b04_frontend.md" + }, + { + "label": "B04_PreProcess \u2014 Frontend", + "file_type": "document", + "source_file": "pages/B04_PreProcess/B04_frontend.md", + "source_location": "L9", + "_origin": "ast", + "id": "pages_b04_preprocess_b04_frontend_b04_preprocess_frontend", + "community": 21, + "community_name": "B04_PreProcess \u2014 Frontend", + "norm_label": "b04_preprocess \u2014 frontend" + }, + { + "label": "\ud30c\uc77c \uad6c\uc870", + "file_type": "document", + "source_file": "pages/B04_PreProcess/B04_frontend.md", + "source_location": "L15", + "_origin": "ast", + "id": "pages_b04_preprocess_b04_frontend_\ud30c\uc77c_\uad6c\uc870", + "community": 21, + "community_name": "B04_PreProcess \u2014 Frontend", + "norm_label": "\u1111\u1161\u110b\u1175\u11af \u1100\u116e\u110c\u1169" + }, + { + "label": "\u26a0\ufe0f \uacc4\ud68d\uc11c\uc640 \uc2e4 \ucf54\ub4dc \ubd88\uc77c\uce58 (3D \ubdf0\uc5b4)", + "file_type": "document", + "source_file": "pages/B04_PreProcess/B04_frontend.md", + "source_location": "L32", + "_origin": "ast", + "id": "pages_b04_preprocess_b04_frontend_\uacc4\ud68d\uc11c\uc640_\uc2e4_\ucf54\ub4dc_\ubd88\uc77c\uce58_3d_\ubdf0\uc5b4", + "community": 21, + "community_name": "B04_PreProcess \u2014 Frontend", + "norm_label": "\u26a0\ufe0f \u1100\u1168\u1112\u116c\u11a8\u1109\u1165\u110b\u116a \u1109\u1175\u11af \u110f\u1169\u1103\u1173 \u1107\u116e\u11af\u110b\u1175\u11af\u110e\u1175 (3d \u1107\u1172\u110b\u1165)" + }, + { + "label": "3D \ubdf0\uc5b4 DOM \ub9c8\uc6b4\ud2b8 \ubc84\uadf8 \uc218\ub9ac", + "file_type": "document", + "source_file": "pages/B04_PreProcess/B04_frontend.md", + "source_location": "L42", + "_origin": "ast", + "id": "pages_b04_preprocess_b04_frontend_3d_\ubdf0\uc5b4_dom_\ub9c8\uc6b4\ud2b8_\ubc84\uadf8_\uc218\ub9ac", + "community": 21, + "community_name": "B04_PreProcess \u2014 Frontend", + "norm_label": "3d \u1107\u1172\u110b\u1165 dom \u1106\u1161\u110b\u116e\u11ab\u1110\u1173 \u1107\u1165\u1100\u1173 \u1109\u116e\u1105\u1175" + }, + { + "label": "3D \ubdf0\uc5b4 \ud14c\ub9c8 \uc5f0\ub3d9 \ubc0f \uac00\ub3c5\uc131 \uac1c\uc120", + "file_type": "document", + "source_file": "pages/B04_PreProcess/B04_frontend.md", + "source_location": "L46", + "_origin": "ast", + "id": "pages_b04_preprocess_b04_frontend_3d_\ubdf0\uc5b4_\ud14c\ub9c8_\uc5f0\ub3d9_\ubc0f_\uac00\ub3c5\uc131_\uac1c\uc120", + "community": 21, + "community_name": "B04_PreProcess \u2014 Frontend", + "norm_label": "3d \u1107\u1172\u110b\u1165 \u1110\u1166\u1106\u1161 \u110b\u1167\u11ab\u1103\u1169\u11bc \u1106\u1175\u11be \u1100\u1161\u1103\u1169\u11a8\u1109\u1165\u11bc \u1100\u1162\u1109\u1165\u11ab" + }, + { + "label": "\ucef4\ud3ec\ub10c\ud2b8 & API \ud568\uc218", + "file_type": "document", + "source_file": "pages/B04_PreProcess/B04_frontend.md", + "source_location": "L51", + "_origin": "ast", + "id": "pages_b04_preprocess_b04_frontend_\ucef4\ud3ec\ub10c\ud2b8_api_\ud568\uc218", + "community": 21, + "community_name": "B04_PreProcess \u2014 Frontend", + "norm_label": "\u110f\u1165\u11b7\u1111\u1169\u1102\u1165\u11ab\u1110\u1173 & api \u1112\u1161\u11b7\u1109\u116e" + }, + { + "label": "\ucc98\ub9ac \ud750\ub984", + "file_type": "document", + "source_file": "pages/B04_PreProcess/B04_frontend.md", + "source_location": "L65", + "_origin": "ast", + "id": "pages_b04_preprocess_b04_frontend_\ucc98\ub9ac_\ud750\ub984", + "community": 21, + "community_name": "B04_PreProcess \u2014 Frontend", + "norm_label": "\u110e\u1165\u1105\u1175 \u1112\u1173\u1105\u1173\u11b7" + }, + { + "label": "3D \uce74\uba54\ub77c \ucee4\uc11c \ud53c\ubd07 & 2D \uc624\ubc84\ub808\uc774 UI \uac1c\uc120 (2026-08-01~02 \uc77c\uc6d0\ud654)", + "file_type": "document", + "source_file": "pages/B04_PreProcess/B04_frontend.md", + "source_location": "L73", + "_origin": "ast", + "id": "pages_b04_preprocess_b04_frontend_3d_\uce74\uba54\ub77c_\ucee4\uc11c_\ud53c\ubd07_2d_\uc624\ubc84\ub808\uc774_ui_\uac1c\uc120_2026_08_01_02_\uc77c\uc6d0\ud654", + "community": 21, + "community_name": "B04_PreProcess \u2014 Frontend", + "norm_label": "3d \u110f\u1161\u1106\u1166\u1105\u1161 \u110f\u1165\u1109\u1165 \u1111\u1175\u1107\u1169\u11ba & 2d \u110b\u1169\u1107\u1165\u1105\u1166\u110b\u1175 ui \u1100\u1162\u1109\u1165\u11ab (2026-08-01~02 \u110b\u1175\u11af\u110b\u116f\u11ab\u1112\u116a)" + }, + { + "label": "\uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/B04_PreProcess/B04_frontend.md", + "source_location": "L82", + "_origin": "ast", + "id": "pages_b04_preprocess_b04_frontend_\uc758\uc874\uc131", + "community": 21, + "community_name": "B04_PreProcess \u2014 Frontend", + "norm_label": "\u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "B04_PreProcess_Router.md", + "file_type": "document", + "source_file": "pages/B04_PreProcess/backend/B04_PreProcess_Router.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b04_preprocess_backend_b04_preprocess_router", + "community": 130, + "community_name": "B04_PreProcess_Router.md", + "norm_label": "b04_preprocess_router.md" + }, + { + "label": "B04_PreProcess_Router.py", + "file_type": "document", + "source_file": "pages/B04_PreProcess/backend/B04_PreProcess_Router.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b04_preprocess_backend_b04_preprocess_router_b04_preprocess_router_py", + "community": 130, + "community_name": "B04_PreProcess_Router.md", + "norm_label": "b04_preprocess_router.py" + }, + { + "label": "\ud83d\udee0\ufe0f \uc8fc\uc694 \ud568\uc218 \ubaa9\ub85d", + "file_type": "document", + "source_file": "pages/B04_PreProcess/backend/B04_PreProcess_Router.md", + "source_location": "L14", + "_origin": "ast", + "id": "pages_b04_preprocess_backend_b04_preprocess_router_\uc8fc\uc694_\ud568\uc218_\ubaa9\ub85d", + "community": 130, + "community_name": "B04_PreProcess_Router.md", + "norm_label": "\ud83d\udee0\ufe0f \u110c\u116e\u110b\u116d \u1112\u1161\u11b7\u1109\u116e \u1106\u1169\u11a8\u1105\u1169\u11a8" + }, + { + "label": "\ud83d\udd17 \uc5f0\uad00 \uac1c\ub150 \ubc0f \uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/B04_PreProcess/backend/B04_PreProcess_Router.md", + "source_location": "L21", + "_origin": "ast", + "id": "pages_b04_preprocess_backend_b04_preprocess_router_\uc5f0\uad00_\uac1c\ub150_\ubc0f_\uc758\uc874\uc131", + "community": 130, + "community_name": "B04_PreProcess_Router.md", + "norm_label": "\ud83d\udd17 \u110b\u1167\u11ab\u1100\u116a\u11ab \u1100\u1162\u1102\u1167\u11b7 \u1106\u1175\u11be \u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "B05_Profile_plan_2026-08-18.md", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_Profile_plan_2026-08-18.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b05_profile_b05_profile_plan_2026_08_18", + "community": 53, + "community_name": "B05 \uad6c\uc870\ubb3c\u00b7UI \ud604\uc7ac \uacc4\ud68d", + "norm_label": "b05_profile_plan_2026-08-18.md" + }, + { + "label": "B05 \uad6c\uc870\ubb3c\u00b7UI \ud604\uc7ac \uacc4\ud68d", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_Profile_plan_2026-08-18.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b05_profile_b05_profile_plan_2026_08_18_b05_\uad6c\uc870\ubb3c_ui_\ud604\uc7ac_\uacc4\ud68d", + "community": 53, + "community_name": "B05 \uad6c\uc870\ubb3c\u00b7UI \ud604\uc7ac \uacc4\ud68d", + "norm_label": "b05 \u1100\u116e\u110c\u1169\u1106\u116e\u11af\u00b7ui \u1112\u1167\u11ab\u110c\u1162 \u1100\u1168\u1112\u116c\u11a8" + }, + { + "label": "B05/B06 \uad6c\uc870\ubb3c \uc801\uc6a9 \ubc94\uc704", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_Profile_plan_2026-08-18.md", + "source_location": "L14", + "_origin": "ast", + "id": "pages_b05_profile_b05_profile_plan_2026_08_18_b05_b06_\uad6c\uc870\ubb3c_\uc801\uc6a9_\ubc94\uc704", + "community": 53, + "community_name": "B05 \uad6c\uc870\ubb3c\u00b7UI \ud604\uc7ac \uacc4\ud68d", + "norm_label": "b05/b06 \u1100\u116e\u110c\u1169\u1106\u116e\u11af \u110c\u1165\u11a8\u110b\u116d\u11bc \u1107\u1165\u11b7\u110b\u1171" + }, + { + "label": "2026-08-18 \uc0ac\uc774\ub4dc \ud328\ub110\u00b7\uc785\ub825 \ub85c\uc9c1 \uacc4\ud68d \uae30\ub85d", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_Profile_plan_2026-08-18.md", + "source_location": "L29", + "_origin": "ast", + "id": "pages_b05_profile_b05_profile_plan_2026_08_18_2026_08_18_\uc0ac\uc774\ub4dc_\ud328\ub110_\uc785\ub825_\ub85c\uc9c1_\uacc4\ud68d_\uae30\ub85d", + "community": 53, + "community_name": "B05 \uad6c\uc870\ubb3c\u00b7UI \ud604\uc7ac \uacc4\ud68d", + "norm_label": "2026-08-18 \u1109\u1161\u110b\u1175\u1103\u1173 \u1111\u1162\u1102\u1165\u11af\u00b7\u110b\u1175\u11b8\u1105\u1167\u11a8 \u1105\u1169\u110c\u1175\u11a8 \u1100\u1168\u1112\u116c\u11a8 \u1100\u1175\u1105\u1169\u11a8" + }, + { + "label": "2026-08-18 B05 \ud398\uc774\uc9c0 \uac1c\uc120 2\ucc28 \uacc4\ud68d \uae30\ub85d", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_Profile_plan_2026-08-18.md", + "source_location": "L40", + "_origin": "ast", + "id": "pages_b05_profile_b05_profile_plan_2026_08_18_2026_08_18_b05_\ud398\uc774\uc9c0_\uac1c\uc120_2\ucc28_\uacc4\ud68d_\uae30\ub85d", + "community": 53, + "community_name": "B05 \uad6c\uc870\ubb3c\u00b7UI \ud604\uc7ac \uacc4\ud68d", + "norm_label": "2026-08-18 b05 \u1111\u1166\u110b\u1175\u110c\u1175 \u1100\u1162\u1109\u1165\u11ab 2\u110e\u1161 \u1100\u1168\u1112\u116c\u11a8 \u1100\u1175\u1105\u1169\u11a8" + }, + { + "label": "\ud6c4\uc18d \uacb0\uc815 \ub300\uae30", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_Profile_plan_2026-08-18.md", + "source_location": "L51", + "_origin": "ast", + "id": "pages_b05_profile_b05_profile_plan_2026_08_18_\ud6c4\uc18d_\uacb0\uc815_\ub300\uae30", + "community": 53, + "community_name": "B05 \uad6c\uc870\ubb3c\u00b7UI \ud604\uc7ac \uacc4\ud68d", + "norm_label": "\u1112\u116e\u1109\u1169\u11a8 \u1100\u1167\u11af\u110c\u1165\u11bc \u1103\u1162\u1100\u1175" + }, + { + "label": "B05_Profile_plan_2026-08-19.md", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_Profile_plan_2026-08-19.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b05_profile_b05_profile_plan_2026_08_19", + "community": 54, + "community_name": "B05 \uad6c\uc870\ubb3c \uc785\ub825\u00b7\uc885\ub2e8 \ud45c\uc2dc \uc815\ube44 \u2014 2026-08-19", + "norm_label": "b05_profile_plan_2026-08-19.md" + }, + { + "label": "B05 \uad6c\uc870\ubb3c \uc785\ub825\u00b7\uc885\ub2e8 \ud45c\uc2dc \uc815\ube44 \u2014 2026-08-19", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_Profile_plan_2026-08-19.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b05_profile_b05_profile_plan_2026_08_19_b05_\uad6c\uc870\ubb3c_\uc785\ub825_\uc885\ub2e8_\ud45c\uc2dc_\uc815\ube44_2026_08_19", + "community": 54, + "community_name": "B05 \uad6c\uc870\ubb3c \uc785\ub825\u00b7\uc885\ub2e8 \ud45c\uc2dc \uc815\ube44 \u2014 2026-08-19", + "norm_label": "b05 \u1100\u116e\u110c\u1169\u1106\u116e\u11af \u110b\u1175\u11b8\u1105\u1167\u11a8\u00b7\u110c\u1169\u11bc\u1103\u1161\u11ab \u1111\u116d\u1109\u1175 \u110c\u1165\u11bc\u1107\u1175 \u2014 2026-08-19" + }, + { + "label": "\uae30\uc900 \ud574\uc11d \ubcf4\ub958", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_Profile_plan_2026-08-19.md", + "source_location": "L14", + "_origin": "ast", + "id": "pages_b05_profile_b05_profile_plan_2026_08_19_\uae30\uc900_\ud574\uc11d_\ubcf4\ub958", + "community": 54, + "community_name": "B05 \uad6c\uc870\ubb3c \uc785\ub825\u00b7\uc885\ub2e8 \ud45c\uc2dc \uc815\ube44 \u2014 2026-08-19", + "norm_label": "\u1100\u1175\u110c\u116e\u11ab \u1112\u1162\u1109\u1165\u11a8 \u1107\u1169\u1105\u1172" + }, + { + "label": "\uc644\ub8cc \ubc94\uc704", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_Profile_plan_2026-08-19.md", + "source_location": "L18", + "_origin": "ast", + "id": "pages_b05_profile_b05_profile_plan_2026_08_19_\uc644\ub8cc_\ubc94\uc704", + "community": 54, + "community_name": "B05 \uad6c\uc870\ubb3c \uc785\ub825\u00b7\uc885\ub2e8 \ud45c\uc2dc \uc815\ube44 \u2014 2026-08-19", + "norm_label": "\u110b\u116a\u11ab\u1105\u116d \u1107\u1165\u11b7\u110b\u1171" + }, + { + "label": "\uc8fc\uc694 \ud56d\ubaa9", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_Profile_plan_2026-08-19.md", + "source_location": "L32", + "_origin": "ast", + "id": "pages_b05_profile_b05_profile_plan_2026_08_19_\uc8fc\uc694_\ud56d\ubaa9", + "community": 54, + "community_name": "B05 \uad6c\uc870\ubb3c \uc785\ub825\u00b7\uc885\ub2e8 \ud45c\uc2dc \uc815\ube44 \u2014 2026-08-19", + "norm_label": "\u110c\u116e\u110b\u116d \u1112\u1161\u11bc\u1106\u1169\u11a8" + }, + { + "label": "\uae30\ub85d\ub41c \uac80\uc99d", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_Profile_plan_2026-08-19.md", + "source_location": "L42", + "_origin": "ast", + "id": "pages_b05_profile_b05_profile_plan_2026_08_19_\uae30\ub85d\ub41c_\uac80\uc99d", + "community": 54, + "community_name": "B05 \uad6c\uc870\ubb3c \uc785\ub825\u00b7\uc885\ub2e8 \ud45c\uc2dc \uc815\ube44 \u2014 2026-08-19", + "norm_label": "\u1100\u1175\u1105\u1169\u11a8\u1103\u116c\u11ab \u1100\u1165\u11b7\u110c\u1173\u11bc" + }, + { + "label": "B05_api.md", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_api.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b05_profile_b05_api", + "community": 65, + "community_name": "B05_Profile \u2014 API", + "norm_label": "b05_api.md" + }, + { + "label": "B05_Profile \u2014 API", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_api.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b05_profile_b05_api_b05_profile_api", + "community": 65, + "community_name": "B05_Profile \u2014 API", + "norm_label": "b05_profile \u2014 api" + }, + { + "label": "\uc5d4\ub4dc\ud3ec\uc778\ud2b8", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_api.md", + "source_location": "L16", + "_origin": "ast", + "id": "pages_b05_profile_b05_api_\uc5d4\ub4dc\ud3ec\uc778\ud2b8", + "community": 65, + "community_name": "B05_Profile \u2014 API", + "norm_label": "\u110b\u1166\u11ab\u1103\u1173\u1111\u1169\u110b\u1175\u11ab\u1110\u1173" + }, + { + "label": "API \uc2a4\ud0a4\ub9c8 \ubc0f \ubc18\ud658 \ud544\ub4dc", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_api.md", + "source_location": "L31", + "_origin": "ast", + "id": "pages_b05_profile_b05_api_api_\uc2a4\ud0a4\ub9c8_\ubc0f_\ubc18\ud658_\ud544\ub4dc", + "community": 65, + "community_name": "B05_Profile \u2014 API", + "norm_label": "api \u1109\u1173\u110f\u1175\u1106\u1161 \u1106\u1175\u11be \u1107\u1161\u11ab\u1112\u116a\u11ab \u1111\u1175\u11af\u1103\u1173" + }, + { + "label": "`POST /{project_id}/route/confirm` \uc694\uccad (`RouteConfirmRequest`)", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_api.md", + "source_location": "L33", + "_origin": "ast", + "id": "pages_b05_profile_b05_api_post_project_id_route_confirm_\uc694\uccad_routeconfirmrequest", + "community": 65, + "community_name": "B05_Profile \u2014 API", + "norm_label": "`post /{project_id}/route/confirm` \u110b\u116d\u110e\u1165\u11bc (`routeconfirmrequest`)" + }, + { + "label": "B05_backend.md", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_backend.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b05_profile_b05_backend", + "community": 99, + "community_name": "B05_Profile \u2014 Backend", + "norm_label": "b05_backend.md" + }, + { + "label": "B05_Profile \u2014 Backend", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_backend.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b05_profile_b05_backend_b05_profile_backend", + "community": 99, + "community_name": "B05_Profile \u2014 Backend", + "norm_label": "b05_profile \u2014 backend" + }, + { + "label": "\ud83d\udcc2 \uc18c\uc2a4\ucf54\ub4dc 1:1 \uc138\ubd84\ud654 \uc704\ud0a4 \ud30c\uc77c \ubaa9\ub85d", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_backend.md", + "source_location": "L16", + "_origin": "ast", + "id": "pages_b05_profile_b05_backend_\uc18c\uc2a4\ucf54\ub4dc_1_1_\uc138\ubd84\ud654_\uc704\ud0a4_\ud30c\uc77c_\ubaa9\ub85d", + "community": 99, + "community_name": "B05_Profile \u2014 Backend", + "norm_label": "\ud83d\udcc2 \u1109\u1169\u1109\u1173\u110f\u1169\u1103\u1173 1:1 \u1109\u1166\u1107\u116e\u11ab\u1112\u116a \u110b\u1171\u110f\u1175 \u1111\u1161\u110b\u1175\u11af \u1106\u1169\u11a8\u1105\u1169\u11a8" + }, + { + "label": "\ud83d\udccb \ud575\uc2ec \ubc31\uc5d4\ub4dc \uc544\ud0a4\ud14d\ucc98 \uac1c\uc694", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_backend.md", + "source_location": "L33", + "_origin": "ast", + "id": "pages_b05_profile_b05_backend_\ud575\uc2ec_\ubc31\uc5d4\ub4dc_\uc544\ud0a4\ud14d\ucc98_\uac1c\uc694", + "community": 99, + "community_name": "B05_Profile \u2014 Backend", + "norm_label": "\ud83d\udccb \u1112\u1162\u11a8\u1109\u1175\u11b7 \u1107\u1162\u11a8\u110b\u1166\u11ab\u1103\u1173 \u110b\u1161\u110f\u1175\u1110\u1166\u11a8\u110e\u1165 \u1100\u1162\u110b\u116d" + }, + { + "label": "B05_completed_followups.md", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_completed_followups.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b05_profile_b05_completed_followups", + "community": 150, + "community_name": "B05_completed_followups.md", + "norm_label": "b05_completed_followups.md" + }, + { + "label": "B05 \ud6c4\uc18d \uc644\ub8cc \ud56d\ubaa9", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_completed_followups.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b05_profile_b05_completed_followups_b05_\ud6c4\uc18d_\uc644\ub8cc_\ud56d\ubaa9", + "community": 150, + "community_name": "B05_completed_followups.md", + "norm_label": "b05 \u1112\u116e\u1109\u1169\u11a8 \u110b\u116a\u11ab\u1105\u116d \u1112\u1161\u11bc\u1106\u1169\u11a8" + }, + { + "label": "B05_corridor_cut_fill.md", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_corridor_cut_fill.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b05_profile_b05_corridor_cut_fill", + "community": 158, + "community_name": "B03 \uacc4\ud68d\ub178\uc120 \uc815\ubcf8\u00b7\uc88c\ud45c\uacc4 \ud6c4\uc18d", + "norm_label": "b05_corridor_cut_fill.md" + }, + { + "label": "B05 \uad6c\uc870\ubb3c \uad6c\uac04 \uc808\ucde8\u00b7\uce21\ubcbd\u00b7\uc131\ud1a0 \ud328\uce58", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_corridor_cut_fill.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b05_profile_b05_corridor_cut_fill_b05_\uad6c\uc870\ubb3c_\uad6c\uac04_\uc808\ucde8_\uce21\ubcbd_\uc131\ud1a0_\ud328\uce58", + "community": 158, + "community_name": "B03 \uacc4\ud68d\ub178\uc120 \uc815\ubcf8\u00b7\uc88c\ud45c\uacc4 \ud6c4\uc18d", + "norm_label": "b05 \u1100\u116e\u110c\u1169\u1106\u116e\u11af \u1100\u116e\u1100\u1161\u11ab \u110c\u1165\u11af\u110e\u1171\u00b7\u110e\u1173\u11a8\u1107\u1167\u11a8\u00b7\u1109\u1165\u11bc\u1110\u1169 \u1111\u1162\u110e\u1175" + }, + { + "label": "\uc808\ucde8\uc640 \uacbd\uacc4", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_corridor_cut_fill.md", + "source_location": "L14", + "_origin": "ast", + "id": "pages_b05_profile_b05_corridor_cut_fill_\uc808\ucde8\uc640_\uacbd\uacc4", + "community": 158, + "community_name": "B03 \uacc4\ud68d\ub178\uc120 \uc815\ubcf8\u00b7\uc88c\ud45c\uacc4 \ud6c4\uc18d", + "norm_label": "\u110c\u1165\u11af\u110e\u1171\u110b\u116a \u1100\u1167\u11bc\u1100\u1168" + }, + { + "label": "B06 \ubcc0\ud615 \uc131\ud1a0\uc120 \ud328\uce58", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_corridor_cut_fill.md", + "source_location": "L26", + "_origin": "ast", + "id": "pages_b05_profile_b05_corridor_cut_fill_b06_\ubcc0\ud615_\uc131\ud1a0\uc120_\ud328\uce58", + "community": 158, + "community_name": "B03 \uacc4\ud68d\ub178\uc120 \uc815\ubcf8\u00b7\uc88c\ud45c\uacc4 \ud6c4\uc18d", + "norm_label": "b06 \u1107\u1167\u11ab\u1112\u1167\u11bc \u1109\u1165\u11bc\u1110\u1169\u1109\u1165\u11ab \u1111\u1162\u110e\u1175" + }, + { + "label": "\uc800\uc7a5\u00b7\uac80\uc99d", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_corridor_cut_fill.md", + "source_location": "L39", + "_origin": "ast", + "id": "pages_b05_profile_b05_corridor_cut_fill_\uc800\uc7a5_\uac80\uc99d", + "community": 158, + "community_name": "B03 \uacc4\ud68d\ub178\uc120 \uc815\ubcf8\u00b7\uc88c\ud45c\uacc4 \ud6c4\uc18d", + "norm_label": "\u110c\u1165\u110c\u1161\u11bc\u00b7\u1100\u1165\u11b7\u110c\u1173\u11bc" + }, + { + "label": "B05_corridor_followup_decisions.md", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_corridor_followup_decisions.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b05_profile_b05_corridor_followup_decisions", + "community": 151, + "community_name": "B05_corridor_followup_decisions.md", + "norm_label": "b05_corridor_followup_decisions.md" + }, + { + "label": "B05 \uad6c\uc870\ubb3c 3D \ud6c4\uc18d \ud310\uc815", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_corridor_followup_decisions.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b05_profile_b05_corridor_followup_decisions_b05_\uad6c\uc870\ubb3c_3d_\ud6c4\uc18d_\ud310\uc815", + "community": 151, + "community_name": "B05_corridor_followup_decisions.md", + "norm_label": "b05 \u1100\u116e\u110c\u1169\u1106\u116e\u11af 3d \u1112\u116e\u1109\u1169\u11a8 \u1111\u1161\u11ab\u110c\u1165\u11bc" + }, + { + "label": "B05_corridor_patch_finish.md", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_corridor_patch_finish.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b05_profile_b05_corridor_patch_finish", + "community": 66, + "community_name": "B05 \ubcc0\ud615 \uc131\ud1a0\uba74 \ub9c8\uac10\u00b7\ub0a0\uac1c \ud328\uce58", + "norm_label": "b05_corridor_patch_finish.md" + }, + { + "label": "B05 \ubcc0\ud615 \uc131\ud1a0\uba74 \ub9c8\uac10\u00b7\ub0a0\uac1c \ud328\uce58", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_corridor_patch_finish.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b05_profile_b05_corridor_patch_finish_b05_\ubcc0\ud615_\uc131\ud1a0\uba74_\ub9c8\uac10_\ub0a0\uac1c_\ud328\uce58", + "community": 66, + "community_name": "B05 \ubcc0\ud615 \uc131\ud1a0\uba74 \ub9c8\uac10\u00b7\ub0a0\uac1c \ud328\uce58", + "norm_label": "b05 \u1107\u1167\u11ab\u1112\u1167\u11bc \u1109\u1165\u11bc\u1110\u1169\u1106\u1167\u11ab \u1106\u1161\u1100\u1161\u11b7\u00b7\u1102\u1161\u11af\u1100\u1162 \u1111\u1162\u110e\u1175" + }, + { + "label": "\ud328\uce58 \ub9c8\uac10", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_corridor_patch_finish.md", + "source_location": "L14", + "_origin": "ast", + "id": "pages_b05_profile_b05_corridor_patch_finish_\ud328\uce58_\ub9c8\uac10", + "community": 66, + "community_name": "B05 \ubcc0\ud615 \uc131\ud1a0\uba74 \ub9c8\uac10\u00b7\ub0a0\uac1c \ud328\uce58", + "norm_label": "\u1111\u1162\u110e\u1175 \u1106\u1161\u1100\u1161\u11b7" + }, + { + "label": "\uc138\uc6d4\uad50 \ub0a0\uac1c \ud328\uce58", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_corridor_patch_finish.md", + "source_location": "L25", + "_origin": "ast", + "id": "pages_b05_profile_b05_corridor_patch_finish_\uc138\uc6d4\uad50_\ub0a0\uac1c_\ud328\uce58", + "community": 66, + "community_name": "B05 \ubcc0\ud615 \uc131\ud1a0\uba74 \ub9c8\uac10\u00b7\ub0a0\uac1c \ud328\uce58", + "norm_label": "\u1109\u1166\u110b\u116f\u11af\u1100\u116d \u1102\u1161\u11af\u1100\u1162 \u1111\u1162\u110e\u1175" + }, + { + "label": "\uc800\uc7a5\u00b7\uac80\uc99d", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_corridor_patch_finish.md", + "source_location": "L36", + "_origin": "ast", + "id": "pages_b05_profile_b05_corridor_patch_finish_\uc800\uc7a5_\uac80\uc99d", + "community": 66, + "community_name": "B05 \ubcc0\ud615 \uc131\ud1a0\uba74 \ub9c8\uac10\u00b7\ub0a0\uac1c \ud328\uce58", + "norm_label": "\u110c\u1165\u110c\u1161\u11bc\u00b7\u1100\u1165\u11b7\u110c\u1173\u11bc" + }, + { + "label": "B05_corridor_plan_curves.md", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_corridor_plan_curves.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b05_profile_b05_corridor_plan_curves", + "community": 44, + "community_name": "\uc800\uc7a5 \uacbd\ub85c \uaddc\uce59 (Workflow-based Folder Structure)", + "norm_label": "b05_corridor_plan_curves.md" + }, + { + "label": "B05 \uad6c\uc870\ubb3c 3D \ud22c\uc601 \ucee4\ube0c", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_corridor_plan_curves.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b05_profile_b05_corridor_plan_curves_b05_\uad6c\uc870\ubb3c_3d_\ud22c\uc601_\ucee4\ube0c", + "community": 44, + "community_name": "\uc800\uc7a5 \uacbd\ub85c \uaddc\uce59 (Workflow-based Folder Structure)", + "norm_label": "b05 \u1100\u116e\u110c\u1169\u1106\u116e\u11af 3d \u1110\u116e\u110b\u1167\u11bc \u110f\u1165\u1107\u1173" + }, + { + "label": "\ucee4\ube0c \uc0dd\uc131\u00b7\ub80c\ub354", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_corridor_plan_curves.md", + "source_location": "L14", + "_origin": "ast", + "id": "pages_b05_profile_b05_corridor_plan_curves_\ucee4\ube0c_\uc0dd\uc131_\ub80c\ub354", + "community": 44, + "community_name": "\uc800\uc7a5 \uacbd\ub85c \uaddc\uce59 (Workflow-based Folder Structure)", + "norm_label": "\u110f\u1165\u1107\u1173 \u1109\u1162\u11bc\u1109\u1165\u11bc\u00b7\u1105\u1166\u11ab\u1103\u1165" + }, + { + "label": "\ube44\ud0c8 \ud22c\uc601\u00b7\uc131\ud1a0\uba74 \uc808\ub2e8", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_corridor_plan_curves.md", + "source_location": "L28", + "_origin": "ast", + "id": "pages_b05_profile_b05_corridor_plan_curves_\ube44\ud0c8_\ud22c\uc601_\uc131\ud1a0\uba74_\uc808\ub2e8", + "community": 44, + "community_name": "\uc800\uc7a5 \uacbd\ub85c \uaddc\uce59 (Workflow-based Folder Structure)", + "norm_label": "\u1107\u1175\u1110\u1161\u11af \u1110\u116e\u110b\u1167\u11bc\u00b7\u1109\u1165\u11bc\u1110\u1169\u1106\u1167\u11ab \u110c\u1165\u11af\u1103\u1161\u11ab" + }, + { + "label": "\uad6c\uc870\ubb3c \ub0a0\uac1c\u00b7\ubc14\ub2e5 \uc5f0\uacb0", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_corridor_plan_curves.md", + "source_location": "L42", + "_origin": "ast", + "id": "pages_b05_profile_b05_corridor_plan_curves_\uad6c\uc870\ubb3c_\ub0a0\uac1c_\ubc14\ub2e5_\uc5f0\uacb0", + "community": 44, + "community_name": "\uc800\uc7a5 \uacbd\ub85c \uaddc\uce59 (Workflow-based Folder Structure)", + "norm_label": "\u1100\u116e\u110c\u1169\u1106\u116e\u11af \u1102\u1161\u11af\u1100\u1162\u00b7\u1107\u1161\u1103\u1161\u11a8 \u110b\u1167\u11ab\u1100\u1167\u11af" + }, + { + "label": "\uc800\uc7a5\u00b7\ud638\ud658\uc131", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_corridor_plan_curves.md", + "source_location": "L52", + "_origin": "ast", + "id": "pages_b05_profile_b05_corridor_plan_curves_\uc800\uc7a5_\ud638\ud658\uc131", + "community": 44, + "community_name": "\uc800\uc7a5 \uacbd\ub85c \uaddc\uce59 (Workflow-based Folder Structure)", + "norm_label": "\u110c\u1165\u110c\u1161\u11bc\u00b7\u1112\u1169\u1112\u116a\u11ab\u1109\u1165\u11bc" + }, + { + "label": "\uac80\uc99d", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_corridor_plan_curves.md", + "source_location": "L61", + "_origin": "ast", + "id": "pages_b05_profile_b05_corridor_plan_curves_\uac80\uc99d", + "community": 44, + "community_name": "\uc800\uc7a5 \uacbd\ub85c \uaddc\uce59 (Workflow-based Folder Structure)", + "norm_label": "\u1100\u1165\u11b7\u110c\u1173\u11bc" + }, + { + "label": "B05_corridor_surface.md", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_corridor_surface.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b05_profile_b05_corridor_surface", + "community": 52, + "community_name": "B05 \uacc4\ud68d\ub178\uc120 \ucf54\ub9ac\ub3c4 \uc0bc\uac01\ub9dd \uc11c\ud53c\uc2a4", + "norm_label": "b05_corridor_surface.md" + }, + { + "label": "B05 \uacc4\ud68d\ub178\uc120 \ucf54\ub9ac\ub3c4 \uc0bc\uac01\ub9dd \uc11c\ud53c\uc2a4", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_corridor_surface.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b05_profile_b05_corridor_surface_b05_\uacc4\ud68d\ub178\uc120_\ucf54\ub9ac\ub3c4_\uc0bc\uac01\ub9dd_\uc11c\ud53c\uc2a4", + "community": 52, + "community_name": "B05 \uacc4\ud68d\ub178\uc120 \ucf54\ub9ac\ub3c4 \uc0bc\uac01\ub9dd \uc11c\ud53c\uc2a4", + "norm_label": "b05 \u1100\u1168\u1112\u116c\u11a8\u1102\u1169\u1109\u1165\u11ab \u110f\u1169\u1105\u1175\u1103\u1169 \u1109\u1161\u11b7\u1100\u1161\u11a8\u1106\u1161\u11bc \u1109\u1165\u1111\u1175\u1109\u1173" + }, + { + "label": "\ud504\ub860\ud2b8\uc5d4\ub4dc \uad6c\uc131", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_corridor_surface.md", + "source_location": "L14", + "_origin": "ast", + "id": "pages_b05_profile_b05_corridor_surface_\ud504\ub860\ud2b8\uc5d4\ub4dc_\uad6c\uc131", + "community": 52, + "community_name": "B05 \uacc4\ud68d\ub178\uc120 \ucf54\ub9ac\ub3c4 \uc0bc\uac01\ub9dd \uc11c\ud53c\uc2a4", + "norm_label": "\u1111\u1173\u1105\u1169\u11ab\u1110\u1173\u110b\u1166\u11ab\u1103\u1173 \u1100\u116e\u1109\u1165\u11bc" + }, + { + "label": "\uc800\uc7a5\u00b7\ud638\ud658\uc131", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_corridor_surface.md", + "source_location": "L30", + "_origin": "ast", + "id": "pages_b05_profile_b05_corridor_surface_\uc800\uc7a5_\ud638\ud658\uc131", + "community": 52, + "community_name": "B05 \uacc4\ud68d\ub178\uc120 \ucf54\ub9ac\ub3c4 \uc0bc\uac01\ub9dd \uc11c\ud53c\uc2a4", + "norm_label": "\u110c\u1165\u110c\u1161\u11bc\u00b7\u1112\u1169\u1112\u116a\u11ab\u1109\u1165\u11bc" + }, + { + "label": "\uc9c4\ud589 \uc911 \uacc4\ud68d", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_corridor_surface.md", + "source_location": "L42", + "_origin": "ast", + "id": "pages_b05_profile_b05_corridor_surface_\uc9c4\ud589_\uc911_\uacc4\ud68d", + "community": 52, + "community_name": "B05 \uacc4\ud68d\ub178\uc120 \ucf54\ub9ac\ub3c4 \uc0bc\uac01\ub9dd \uc11c\ud53c\uc2a4", + "norm_label": "\u110c\u1175\u11ab\u1112\u1162\u11bc \u110c\u116e\u11bc \u1100\u1168\u1112\u116c\u11a8" + }, + { + "label": "\uac80\uc99d", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_corridor_surface.md", + "source_location": "L46", + "_origin": "ast", + "id": "pages_b05_profile_b05_corridor_surface_\uac80\uc99d", + "community": 52, + "community_name": "B05 \uacc4\ud68d\ub178\uc120 \ucf54\ub9ac\ub3c4 \uc0bc\uac01\ub9dd \uc11c\ud53c\uc2a4", + "norm_label": "\u1100\u1165\u11b7\u110c\u1173\u11bc" + }, + { + "label": "B05_corridor_turn_correction_plan.md", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_corridor_turn_correction_plan.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b05_profile_b05_corridor_turn_correction_plan", + "community": 38, + "community_name": "B05 \uae09\uc120\ud68c 3D \uad6d\ubd80 \ubcf4\uc815 \uacc4\ud68d", + "norm_label": "b05_corridor_turn_correction_plan.md" + }, + { + "label": "B05 \uae09\uc120\ud68c 3D \uad6d\ubd80 \ubcf4\uc815 \uacc4\ud68d", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_corridor_turn_correction_plan.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b05_profile_b05_corridor_turn_correction_plan_b05_\uae09\uc120\ud68c_3d_\uad6d\ubd80_\ubcf4\uc815_\uacc4\ud68d", + "community": 38, + "community_name": "B05 \uae09\uc120\ud68c 3D \uad6d\ubd80 \ubcf4\uc815 \uacc4\ud68d", + "norm_label": "b05 \u1100\u1173\u11b8\u1109\u1165\u11ab\u1112\u116c 3d \u1100\u116e\u11a8\u1107\u116e \u1107\u1169\u110c\u1165\u11bc \u1100\u1168\u1112\u116c\u11a8" + }, + { + "label": "\ubaa9\uc801\uacfc \uacbd\uacc4", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_corridor_turn_correction_plan.md", + "source_location": "L12", + "_origin": "ast", + "id": "pages_b05_profile_b05_corridor_turn_correction_plan_\ubaa9\uc801\uacfc_\uacbd\uacc4", + "community": 38, + "community_name": "B05 \uae09\uc120\ud68c 3D \uad6d\ubd80 \ubcf4\uc815 \uacc4\ud68d", + "norm_label": "\u1106\u1169\u11a8\u110c\u1165\u11a8\u1100\u116a \u1100\u1167\u11bc\u1100\u1168" + }, + { + "label": "\uad6d\ubd80 \ud328\uce58 \uc808\ucc28", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_corridor_turn_correction_plan.md", + "source_location": "L18", + "_origin": "ast", + "id": "pages_b05_profile_b05_corridor_turn_correction_plan_\uad6d\ubd80_\ud328\uce58_\uc808\ucc28", + "community": 38, + "community_name": "B05 \uae09\uc120\ud68c 3D \uad6d\ubd80 \ubcf4\uc815 \uacc4\ud68d", + "norm_label": "\u1100\u116e\u11a8\u1107\u116e \u1111\u1162\u110e\u1175 \u110c\u1165\u11af\u110e\u1161" + }, + { + "label": "\uad6c\uc870\ubb3c \uc5f0\ub3d9", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_corridor_turn_correction_plan.md", + "source_location": "L29", + "_origin": "ast", + "id": "pages_b05_profile_b05_corridor_turn_correction_plan_\uad6c\uc870\ubb3c_\uc5f0\ub3d9", + "community": 38, + "community_name": "B05 \uae09\uc120\ud68c 3D \uad6d\ubd80 \ubcf4\uc815 \uacc4\ud68d", + "norm_label": "\u1100\u116e\u110c\u1169\u1106\u116e\u11af \u110b\u1167\u11ab\u1103\u1169\u11bc" + }, + { + "label": "\ud655\uc778\ub41c \ub178\uacac \ud655\uc7a5 \ud68c\uadc0", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_corridor_turn_correction_plan.md", + "source_location": "L37", + "_origin": "ast", + "id": "pages_b05_profile_b05_corridor_turn_correction_plan_\ud655\uc778\ub41c_\ub178\uacac_\ud655\uc7a5_\ud68c\uadc0", + "community": 38, + "community_name": "B05 \uae09\uc120\ud68c 3D \uad6d\ubd80 \ubcf4\uc815 \uacc4\ud68d", + "norm_label": "\u1112\u116a\u11a8\u110b\u1175\u11ab\u1103\u116c\u11ab \u1102\u1169\u1100\u1167\u11ab \u1112\u116a\u11a8\u110c\u1161\u11bc \u1112\u116c\u1100\u1171" + }, + { + "label": "\uc644\ub8cc \uc870\uac74", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_corridor_turn_correction_plan.md", + "source_location": "L48", + "_origin": "ast", + "id": "pages_b05_profile_b05_corridor_turn_correction_plan_\uc644\ub8cc_\uc870\uac74", + "community": 38, + "community_name": "B05 \uae09\uc120\ud68c 3D \uad6d\ubd80 \ubcf4\uc815 \uacc4\ud68d", + "norm_label": "\u110b\u116a\u11ab\u1105\u116d \u110c\u1169\u1100\u1165\u11ab" + }, + { + "label": "B05_db.md", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_db.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b05_profile_b05_db", + "community": 100, + "community_name": "B05_Profile \u2014 DB \uc0ac\uc6a9 \uad00\uacc4", + "norm_label": "b05_db.md" + }, + { + "label": "B05_Profile \u2014 DB \uc0ac\uc6a9 \uad00\uacc4", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_db.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b05_profile_b05_db_b05_profile_db_\uc0ac\uc6a9_\uad00\uacc4", + "community": 100, + "community_name": "B05_Profile \u2014 DB \uc0ac\uc6a9 \uad00\uacc4", + "norm_label": "b05_profile \u2014 db \u1109\u1161\u110b\u116d\u11bc \u1100\u116a\u11ab\u1100\u1168" + }, + { + "label": "Repository \ud568\uc218", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_db.md", + "source_location": "L22", + "_origin": "ast", + "id": "pages_b05_profile_b05_db_repository_\ud568\uc218", + "community": 100, + "community_name": "B05_Profile \u2014 DB \uc0ac\uc6a9 \uad00\uacc4", + "norm_label": "repository \u1112\u1161\u11b7\u1109\u116e" + }, + { + "label": "\uc800\uc7a5 \uacbd\ub85c", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_db.md", + "source_location": "L33", + "_origin": "ast", + "id": "pages_b05_profile_b05_db_\uc800\uc7a5_\uacbd\ub85c", + "community": 100, + "community_name": "B05_Profile \u2014 DB \uc0ac\uc6a9 \uad00\uacc4", + "norm_label": "\u110c\u1165\u110c\u1161\u11bc \u1100\u1167\u11bc\u1105\u1169" + }, + { + "label": "B05_dependencies.md", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_dependencies.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b05_profile_b05_dependencies", + "community": 131, + "community_name": "B05_Profile \u2014 Dependencies", + "norm_label": "b05_dependencies.md" + }, + { + "label": "B05_Profile \u2014 Dependencies", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_dependencies.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b05_profile_b05_dependencies_b05_profile_dependencies", + "community": 131, + "community_name": "B05_Profile \u2014 Dependencies", + "norm_label": "b05_profile \u2014 dependencies" + }, + { + "label": "\ud398\uc774\uc9c0 \ud30c\uc77c\ubcc4 \uc5f0\uacb0", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_dependencies.md", + "source_location": "L24", + "_origin": "ast", + "id": "pages_b05_profile_b05_dependencies_\ud398\uc774\uc9c0_\ud30c\uc77c\ubcc4_\uc5f0\uacb0", + "community": 131, + "community_name": "B05_Profile \u2014 Dependencies", + "norm_label": "\u1111\u1166\u110b\u1175\u110c\u1175 \u1111\u1161\u110b\u1175\u11af\u1107\u1167\u11af \u110b\u1167\u11ab\u1100\u1167\u11af" + }, + { + "label": "B05_frontend.md", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_frontend.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b05_profile_b05_frontend", + "community": 55, + "community_name": "B07 \uad6c\uc870\ubb3c \ud45c\uc900\ub3c4 \u2014 \uc870\uc0ac\u00b7\ud569\uc758\uc640 \ud604\uc7ac \ud1b5\ub85c", + "norm_label": "b05_frontend.md" + }, + { + "label": "B05_Profile \u2014 Frontend", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_frontend.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b05_profile_b05_frontend_b05_profile_frontend", + "community": 55, + "community_name": "B07 \uad6c\uc870\ubb3c \ud45c\uc900\ub3c4 \u2014 \uc870\uc0ac\u00b7\ud569\uc758\uc640 \ud604\uc7ac \ud1b5\ub85c", + "norm_label": "b05_profile \u2014 frontend" + }, + { + "label": "\ud83d\udcc2 \uc18c\uc2a4\ucf54\ub4dc 1:1 \uc138\ubd84\ud654 \uc704\ud0a4 \ud30c\uc77c \ubaa9\ub85d", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_frontend.md", + "source_location": "L18", + "_origin": "ast", + "id": "pages_b05_profile_b05_frontend_\uc18c\uc2a4\ucf54\ub4dc_1_1_\uc138\ubd84\ud654_\uc704\ud0a4_\ud30c\uc77c_\ubaa9\ub85d", + "community": 55, + "community_name": "B07 \uad6c\uc870\ubb3c \ud45c\uc900\ub3c4 \u2014 \uc870\uc0ac\u00b7\ud569\uc758\uc640 \ud604\uc7ac \ud1b5\ub85c", + "norm_label": "\ud83d\udcc2 \u1109\u1169\u1109\u1173\u110f\u1169\u1103\u1173 1:1 \u1109\u1166\u1107\u116e\u11ab\u1112\u116a \u110b\u1171\u110f\u1175 \u1111\u1161\u110b\u1175\u11af \u1106\u1169\u11a8\u1105\u1169\u11a8" + }, + { + "label": "\ud83d\udccb \ud575\uc2ec \ud504\ub860\ud2b8\uc5d4\ub4dc \uc544\ud0a4\ud14d\ucc98 \uac1c\uc694", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_frontend.md", + "source_location": "L45", + "_origin": "ast", + "id": "pages_b05_profile_b05_frontend_\ud575\uc2ec_\ud504\ub860\ud2b8\uc5d4\ub4dc_\uc544\ud0a4\ud14d\ucc98_\uac1c\uc694", + "community": 55, + "community_name": "B07 \uad6c\uc870\ubb3c \ud45c\uc900\ub3c4 \u2014 \uc870\uc0ac\u00b7\ud569\uc758\uc640 \ud604\uc7ac \ud1b5\ub85c", + "norm_label": "\ud83d\udccb \u1112\u1162\u11a8\u1109\u1175\u11b7 \u1111\u1173\u1105\u1169\u11ab\u1110\u1173\u110b\u1166\u11ab\u1103\u1173 \u110b\u1161\u110f\u1175\u1110\u1166\u11a8\u110e\u1165 \u1100\u1162\u110b\u116d" + }, + { + "label": "\ub0a8\uc740 \ud30c\uc77c \ud55c\uacc4", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_frontend.md", + "source_location": "L62", + "_origin": "ast", + "id": "pages_b05_profile_b05_frontend_\ub0a8\uc740_\ud30c\uc77c_\ud55c\uacc4", + "community": 55, + "community_name": "B07 \uad6c\uc870\ubb3c \ud45c\uc900\ub3c4 \u2014 \uc870\uc0ac\u00b7\ud569\uc758\uc640 \ud604\uc7ac \ud1b5\ub85c", + "norm_label": "\u1102\u1161\u11b7\u110b\u1173\u11ab \u1111\u1161\u110b\u1175\u11af \u1112\u1161\u11ab\u1100\u1168" + }, + { + "label": "\uc885\ub2e8\ud14c\uc774\ube14 \ud45c\uc2dc \ubcf4\uc815", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_frontend.md", + "source_location": "L66", + "_origin": "ast", + "id": "pages_b05_profile_b05_frontend_\uc885\ub2e8\ud14c\uc774\ube14_\ud45c\uc2dc_\ubcf4\uc815", + "community": 55, + "community_name": "B07 \uad6c\uc870\ubb3c \ud45c\uc900\ub3c4 \u2014 \uc870\uc0ac\u00b7\ud569\uc758\uc640 \ud604\uc7ac \ud1b5\ub85c", + "norm_label": "\u110c\u1169\u11bc\u1103\u1161\u11ab\u1110\u1166\u110b\u1175\u1107\u1173\u11af \u1111\u116d\u1109\u1175 \u1107\u1169\u110c\u1165\u11bc" + }, + { + "label": "\uc885\ub2e8 \ud3b8\uc9d1 \uc548\uc804\uc7a5\uce58", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_frontend.md", + "source_location": "L70", + "_origin": "ast", + "id": "pages_b05_profile_b05_frontend_\uc885\ub2e8_\ud3b8\uc9d1_\uc548\uc804\uc7a5\uce58", + "community": 55, + "community_name": "B07 \uad6c\uc870\ubb3c \ud45c\uc900\ub3c4 \u2014 \uc870\uc0ac\u00b7\ud569\uc758\uc640 \ud604\uc7ac \ud1b5\ub85c", + "norm_label": "\u110c\u1169\u11bc\u1103\u1161\u11ab \u1111\u1167\u11ab\u110c\u1175\u11b8 \u110b\u1161\u11ab\u110c\u1165\u11ab\u110c\u1161\u11bc\u110e\u1175" + }, + { + "label": "B05_frontend_alignment.md", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_frontend_alignment.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b05_profile_b05_frontend_alignment", + "community": 67, + "community_name": "B05_Profile \u2014 Profile Alignment & Table", + "norm_label": "b05_frontend_alignment.md" + }, + { + "label": "B05_Profile \u2014 Profile Alignment & Table", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_frontend_alignment.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b05_profile_b05_frontend_alignment_b05_profile_profile_alignment_table", + "community": 67, + "community_name": "B05_Profile \u2014 Profile Alignment & Table", + "norm_label": "b05_profile \u2014 profile alignment & table" + }, + { + "label": "\uc885\ub2e8 \uacc4\ud68d\uace0 \ud3b8\uc9d1 \uc778\ud130\ub799\uc158 (`_UI_Profile_Edit.ts`, `_UI_Profile_Panel.ts`, `_UI_Page.ts`)", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_frontend_alignment.md", + "source_location": "L12", + "_origin": "ast", + "id": "pages_b05_profile_b05_frontend_alignment_\uc885\ub2e8_\uacc4\ud68d\uace0_\ud3b8\uc9d1_\uc778\ud130\ub799\uc158_ui_profile_edit_ts_ui_profile_panel_ts_ui_page_ts", + "community": 67, + "community_name": "B05_Profile \u2014 Profile Alignment & Table", + "norm_label": "\u110c\u1169\u11bc\u1103\u1161\u11ab \u1100\u1168\u1112\u116c\u11a8\u1100\u1169 \u1111\u1167\u11ab\u110c\u1175\u11b8 \u110b\u1175\u11ab\u1110\u1165\u1105\u1162\u11a8\u1109\u1167\u11ab (`_ui_profile_edit.ts`, `_ui_profile_panel.ts`, `_ui_page.ts`)" + }, + { + "label": "12\ud589 \ub3c4\uba74 \ud14c\uc774\ube14 \ubc0f \uac00\ub85c \uc2a4\ud06c\ub864 \uc815\ub82c \uac1c\ud3b8 (`_UI_Profile_Table.ts`, `_UI_Profile_Panel.ts`)", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_frontend_alignment.md", + "source_location": "L22", + "_origin": "ast", + "id": "pages_b05_profile_b05_frontend_alignment_12\ud589_\ub3c4\uba74_\ud14c\uc774\ube14_\ubc0f_\uac00\ub85c_\uc2a4\ud06c\ub864_\uc815\ub82c_\uac1c\ud3b8_ui_profile_table_ts_ui_profile_panel_ts", + "community": 67, + "community_name": "B05_Profile \u2014 Profile Alignment & Table", + "norm_label": "12\u1112\u1162\u11bc \u1103\u1169\u1106\u1167\u11ab \u1110\u1166\u110b\u1175\u1107\u1173\u11af \u1106\u1175\u11be \u1100\u1161\u1105\u1169 \u1109\u1173\u110f\u1173\u1105\u1169\u11af \u110c\u1165\u11bc\u1105\u1167\u11af \u1100\u1162\u1111\u1167\u11ab (`_ui_profile_table.ts`, `_ui_profile_panel.ts`)" + }, + { + "label": "\ube44\uc815\uaddc \uce21\uc810(\uad6c\uc870\ubb3c) \ud14c\uc774\ube14 \uc624\ubc84\ub808\uc774 & \ub7f0\ud0c0\uc784 \uac80\uc99d (`_UI_Profile_Table.ts`, `_UI_IrregularStations.ts`)", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_frontend_alignment.md", + "source_location": "L42", + "_origin": "ast", + "id": "pages_b05_profile_b05_frontend_alignment_\ube44\uc815\uaddc_\uce21\uc810_\uad6c\uc870\ubb3c_\ud14c\uc774\ube14_\uc624\ubc84\ub808\uc774_\ub7f0\ud0c0\uc784_\uac80\uc99d_ui_profile_table_ts_ui_irregularstations_ts", + "community": 67, + "community_name": "B05_Profile \u2014 Profile Alignment & Table", + "norm_label": "\u1107\u1175\u110c\u1165\u11bc\u1100\u1172 \u110e\u1173\u11a8\u110c\u1165\u11b7(\u1100\u116e\u110c\u1169\u1106\u116e\u11af) \u1110\u1166\u110b\u1175\u1107\u1173\u11af \u110b\u1169\u1107\u1165\u1105\u1166\u110b\u1175 & \u1105\u1165\u11ab\u1110\u1161\u110b\u1175\u11b7 \u1100\u1165\u11b7\u110c\u1173\u11bc (`_ui_profile_table.ts`, `_ui_irregularstations.ts`)" + }, + { + "label": "B05_frontend_viewer.md", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_frontend_viewer.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b05_profile_b05_frontend_viewer", + "community": 101, + "community_name": "B05_Profile \u2014 3D Viewer & Interaction", + "norm_label": "b05_frontend_viewer.md" + }, + { + "label": "B05_Profile \u2014 3D Viewer & Interaction", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_frontend_viewer.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b05_profile_b05_frontend_viewer_b05_profile_3d_viewer_interaction", + "community": 101, + "community_name": "B05_Profile \u2014 3D Viewer & Interaction", + "norm_label": "b05_profile \u2014 3d viewer & interaction" + }, + { + "label": "3D \uc9c0\ud615 \ubdf0\ud3ec\ud2b8 \uc2dc\uac01\ud654 (`_UI_Viewer.ts`, `_UI_Markers.ts`)", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_frontend_viewer.md", + "source_location": "L12", + "_origin": "ast", + "id": "pages_b05_profile_b05_frontend_viewer_3d_\uc9c0\ud615_\ubdf0\ud3ec\ud2b8_\uc2dc\uac01\ud654_ui_viewer_ts_ui_markers_ts", + "community": 101, + "community_name": "B05_Profile \u2014 3D Viewer & Interaction", + "norm_label": "3d \u110c\u1175\u1112\u1167\u11bc \u1107\u1172\u1111\u1169\u1110\u1173 \u1109\u1175\u1100\u1161\u11a8\u1112\u116a (`_ui_viewer.ts`, `_ui_markers.ts`)" + }, + { + "label": "3D \ub9c8\ucee4 \uc9c1\uc811 \ub4dc\ub798\uadf8 \uc774\ub3d9 (0_old I-401 \uc774\uc2dd)", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_frontend_viewer.md", + "source_location": "L19", + "_origin": "ast", + "id": "pages_b05_profile_b05_frontend_viewer_3d_\ub9c8\ucee4_\uc9c1\uc811_\ub4dc\ub798\uadf8_\uc774\ub3d9_0_old_i_401_\uc774\uc2dd", + "community": 101, + "community_name": "B05_Profile \u2014 3D Viewer & Interaction", + "norm_label": "3d \u1106\u1161\u110f\u1165 \u110c\u1175\u11a8\u110c\u1165\u11b8 \u1103\u1173\u1105\u1162\u1100\u1173 \u110b\u1175\u1103\u1169\u11bc (0_old i-401 \u110b\u1175\u1109\u1175\u11a8)" + }, + { + "label": "B05_masshaul_structure_2026_09.md", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_masshaul_structure_2026_09.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b05_profile_b05_masshaul_structure_2026_09", + "community": 166, + "community_name": "B05 \uc885\ub2e8\uace1\uc120\u00b7\uc2e4\uc2dc\uac04 \ud6a1\ub2e8 \uc5f0\ub3d9", + "norm_label": "b05_masshaul_structure_2026_09.md" + }, + { + "label": "B05 \uc720\ud1a0\uace1\uc120\u00b7\uad6c\uc870\ubb3c \ud6c4\uc18d", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_masshaul_structure_2026_09.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b05_profile_b05_masshaul_structure_2026_09_b05_\uc720\ud1a0\uace1\uc120_\uad6c\uc870\ubb3c_\ud6c4\uc18d", + "community": 166, + "community_name": "B05 \uc885\ub2e8\uace1\uc120\u00b7\uc2e4\uc2dc\uac04 \ud6a1\ub2e8 \uc5f0\ub3d9", + "norm_label": "b05 \u110b\u1172\u1110\u1169\u1100\u1169\u11a8\u1109\u1165\u11ab\u00b7\u1100\u116e\u110c\u1169\u1106\u116e\u11af \u1112\u116e\u1109\u1169\u11a8" + }, + { + "label": "\uc720\ud1a0\uace1\uc120 \uacf5\uc6a9\ud654", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_masshaul_structure_2026_09.md", + "source_location": "L12", + "_origin": "ast", + "id": "pages_b05_profile_b05_masshaul_structure_2026_09_\uc720\ud1a0\uace1\uc120_\uacf5\uc6a9\ud654", + "community": 166, + "community_name": "B05 \uc885\ub2e8\uace1\uc120\u00b7\uc2e4\uc2dc\uac04 \ud6a1\ub2e8 \uc5f0\ub3d9", + "norm_label": "\u110b\u1172\u1110\u1169\u1100\u1169\u11a8\u1109\u1165\u11ab \u1100\u1169\u11bc\u110b\u116d\u11bc\u1112\u116a" + }, + { + "label": "\uc720\uc9c0\u00b7\ud310\uc815 \uc0ac\ud56d", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_masshaul_structure_2026_09.md", + "source_location": "L23", + "_origin": "ast", + "id": "pages_b05_profile_b05_masshaul_structure_2026_09_\uc720\uc9c0_\ud310\uc815_\uc0ac\ud56d", + "community": 166, + "community_name": "B05 \uc885\ub2e8\uace1\uc120\u00b7\uc2e4\uc2dc\uac04 \ud6a1\ub2e8 \uc5f0\ub3d9", + "norm_label": "\u110b\u1172\u110c\u1175\u00b7\u1111\u1161\u11ab\u110c\u1165\u11bc \u1109\u1161\u1112\u1161\u11bc" + }, + { + "label": "B05_profile_interaction_2026_09.md", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_profile_interaction_2026_09.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b05_profile_b05_profile_interaction_2026_09", + "community": 167, + "community_name": "B06 \ud6a1\ub2e8 \uacc4\uc0b0 \ubbf8\ub7ec\u00b7\uce74\ub4dc \ud45c\uae30", + "norm_label": "b05_profile_interaction_2026_09.md" + }, + { + "label": "B05 \uc885\ub2e8\uace1\uc120\u00b7\uc2e4\uc2dc\uac04 \ud6a1\ub2e8 \uc5f0\ub3d9", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_profile_interaction_2026_09.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b05_profile_b05_profile_interaction_2026_09_b05_\uc885\ub2e8\uace1\uc120_\uc2e4\uc2dc\uac04_\ud6a1\ub2e8_\uc5f0\ub3d9", + "community": 167, + "community_name": "B06 \ud6a1\ub2e8 \uacc4\uc0b0 \ubbf8\ub7ec\u00b7\uce74\ub4dc \ud45c\uae30", + "norm_label": "b05 \u110c\u1169\u11bc\u1103\u1161\u11ab\u1100\u1169\u11a8\u1109\u1165\u11ab\u00b7\u1109\u1175\u11af\u1109\u1175\u1100\u1161\u11ab \u1112\u116c\u11bc\u1103\u1161\u11ab \u110b\u1167\u11ab\u1103\u1169\u11bc" + }, + { + "label": "\ucd08\uae30 \uc885\ub2e8\uace1\uc120", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_profile_interaction_2026_09.md", + "source_location": "L12", + "_origin": "ast", + "id": "pages_b05_profile_b05_profile_interaction_2026_09_\ucd08\uae30_\uc885\ub2e8\uace1\uc120", + "community": 167, + "community_name": "B06 \ud6a1\ub2e8 \uacc4\uc0b0 \ubbf8\ub7ec\u00b7\uce74\ub4dc \ud45c\uae30", + "norm_label": "\u110e\u1169\u1100\u1175 \u110c\u1169\u11bc\u1103\u1161\u11ab\u1100\u1169\u11a8\u1109\u1165\u11ab" + }, + { + "label": "\uc2e4\uc2dc\uac04 \ud6a1\ub2e8\u00b7\uc720\ud1a0\uace1\uc120", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_profile_interaction_2026_09.md", + "source_location": "L24", + "_origin": "ast", + "id": "pages_b05_profile_b05_profile_interaction_2026_09_\uc2e4\uc2dc\uac04_\ud6a1\ub2e8_\uc720\ud1a0\uace1\uc120", + "community": 167, + "community_name": "B06 \ud6a1\ub2e8 \uacc4\uc0b0 \ubbf8\ub7ec\u00b7\uce74\ub4dc \ud45c\uae30", + "norm_label": "\u1109\u1175\u11af\u1109\u1175\u1100\u1161\u11ab \u1112\u116c\u11bc\u1103\u1161\u11ab\u00b7\u110b\u1172\u1110\u1169\u1100\u1169\u11a8\u1109\u1165\u11ab" + }, + { + "label": "B05_structure_stations.md", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_structure_stations.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b05_profile_b05_structure_stations", + "community": 68, + "community_name": "B05 \uad6c\uc870\ubb3c \ube44\uc815\uaddc \uce21\uc810 \uacf5\uae09", + "norm_label": "b05_structure_stations.md" + }, + { + "label": "B05 \uad6c\uc870\ubb3c \ube44\uc815\uaddc \uce21\uc810 \uacf5\uae09", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_structure_stations.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b05_profile_b05_structure_stations_b05_\uad6c\uc870\ubb3c_\ube44\uc815\uaddc_\uce21\uc810_\uacf5\uae09", + "community": 68, + "community_name": "B05 \uad6c\uc870\ubb3c \ube44\uc815\uaddc \uce21\uc810 \uacf5\uae09", + "norm_label": "b05 \u1100\u116e\u110c\u1169\u1106\u116e\u11af \u1107\u1175\u110c\u1165\u11bc\u1100\u1172 \u110e\u1173\u11a8\u110c\u1165\u11b7 \u1100\u1169\u11bc\u1100\u1173\u11b8" + }, + { + "label": "\uacf5\uae09 \uacbd\ub85c", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_structure_stations.md", + "source_location": "L14", + "_origin": "ast", + "id": "pages_b05_profile_b05_structure_stations_\uacf5\uae09_\uacbd\ub85c", + "community": 68, + "community_name": "B05 \uad6c\uc870\ubb3c \ube44\uc815\uaddc \uce21\uc810 \uacf5\uae09", + "norm_label": "\u1100\u1169\u11bc\u1100\u1173\u11b8 \u1100\u1167\u11bc\u1105\u1169" + }, + { + "label": "\uc815\ubcf8 \uaddc\uce59", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_structure_stations.md", + "source_location": "L24", + "_origin": "ast", + "id": "pages_b05_profile_b05_structure_stations_\uc815\ubcf8_\uaddc\uce59", + "community": 68, + "community_name": "B05 \uad6c\uc870\ubb3c \ube44\uc815\uaddc \uce21\uc810 \uacf5\uae09", + "norm_label": "\u110c\u1165\u11bc\u1107\u1169\u11ab \u1100\u1172\u110e\u1175\u11a8" + }, + { + "label": "\uac80\uc99d", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_structure_stations.md", + "source_location": "L34", + "_origin": "ast", + "id": "pages_b05_profile_b05_structure_stations_\uac80\uc99d", + "community": 68, + "community_name": "B05 \uad6c\uc870\ubb3c \ube44\uc815\uaddc \uce21\uc810 \uacf5\uae09", + "norm_label": "\u1100\u1165\u11b7\u110c\u1173\u11bc" + }, + { + "label": "B05_structures.md", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_structures.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b05_profile_b05_structures", + "community": 22, + "community_name": "B05 \uad6c\uc870\ubb3c \uc815\ubcf8\u00b7\ud1b5\ud569 \ud3b8\uc9d1", + "norm_label": "b05_structures.md" + }, + { + "label": "B05 \uad6c\uc870\ubb3c \uc815\ubcf8\u00b7\ud1b5\ud569 \ud3b8\uc9d1", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_structures.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b05_profile_b05_structures_b05_\uad6c\uc870\ubb3c_\uc815\ubcf8_\ud1b5\ud569_\ud3b8\uc9d1", + "community": 22, + "community_name": "B05 \uad6c\uc870\ubb3c \uc815\ubcf8\u00b7\ud1b5\ud569 \ud3b8\uc9d1", + "norm_label": "b05 \u1100\u116e\u110c\u1169\u1106\u116e\u11af \u110c\u1165\u11bc\u1107\u1169\u11ab\u00b7\u1110\u1169\u11bc\u1112\u1161\u11b8 \u1111\u1167\u11ab\u110c\u1175\u11b8" + }, + { + "label": "\uc815\ubcf8\uacfc \ud0c0\uc785 \ub808\uc9c0\uc2a4\ud2b8\ub9ac", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_structures.md", + "source_location": "L14", + "_origin": "ast", + "id": "pages_b05_profile_b05_structures_\uc815\ubcf8\uacfc_\ud0c0\uc785_\ub808\uc9c0\uc2a4\ud2b8\ub9ac", + "community": 22, + "community_name": "B05 \uad6c\uc870\ubb3c \uc815\ubcf8\u00b7\ud1b5\ud569 \ud3b8\uc9d1", + "norm_label": "\u110c\u1165\u11bc\u1107\u1169\u11ab\u1100\u116a \u1110\u1161\u110b\u1175\u11b8 \u1105\u1166\u110c\u1175\u1109\u1173\u1110\u1173\u1105\u1175" + }, + { + "label": "\ubc30\uc218\uad00\u00b7\uc2dc\uc124 \uc635\uc158", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_structures.md", + "source_location": "L24", + "_origin": "ast", + "id": "pages_b05_profile_b05_structures_\ubc30\uc218\uad00_\uc2dc\uc124_\uc635\uc158", + "community": 22, + "community_name": "B05 \uad6c\uc870\ubb3c \uc815\ubcf8\u00b7\ud1b5\ud569 \ud3b8\uc9d1", + "norm_label": "\u1107\u1162\u1109\u116e\u1100\u116a\u11ab\u00b7\u1109\u1175\u1109\u1165\u11af \u110b\u1169\u11b8\u1109\u1167\u11ab" + }, + { + "label": "\ubc31\uc5d4\ub4dc \ud30c\uc77c", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_structures.md", + "source_location": "L35", + "_origin": "ast", + "id": "pages_b05_profile_b05_structures_\ubc31\uc5d4\ub4dc_\ud30c\uc77c", + "community": 22, + "community_name": "B05 \uad6c\uc870\ubb3c \uc815\ubcf8\u00b7\ud1b5\ud569 \ud3b8\uc9d1", + "norm_label": "\u1107\u1162\u11a8\u110b\u1166\u11ab\u1103\u1173 \u1111\u1161\u110b\u1175\u11af" + }, + { + "label": "\ud504\ub860\ud2b8\uc5d4\ub4dc \ud30c\uc77c\uacfc \ub3d9\uc791", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_structures.md", + "source_location": "L44", + "_origin": "ast", + "id": "pages_b05_profile_b05_structures_\ud504\ub860\ud2b8\uc5d4\ub4dc_\ud30c\uc77c\uacfc_\ub3d9\uc791", + "community": 22, + "community_name": "B05 \uad6c\uc870\ubb3c \uc815\ubcf8\u00b7\ud1b5\ud569 \ud3b8\uc9d1", + "norm_label": "\u1111\u1173\u1105\u1169\u11ab\u1110\u1173\u110b\u1166\u11ab\u1103\u1173 \u1111\u1161\u110b\u1175\u11af\u1100\u116a \u1103\u1169\u11bc\u110c\u1161\u11a8" + }, + { + "label": "\uc720\uc5ed \ucd94\ucc9c\u00b7\uac1c\ub7b5 \ub2e8\uba74", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_structures.md", + "source_location": "L57", + "_origin": "ast", + "id": "pages_b05_profile_b05_structures_\uc720\uc5ed_\ucd94\ucc9c_\uac1c\ub7b5_\ub2e8\uba74", + "community": 22, + "community_name": "B05 \uad6c\uc870\ubb3c \uc815\ubcf8\u00b7\ud1b5\ud569 \ud3b8\uc9d1", + "norm_label": "\u110b\u1172\u110b\u1167\u11a8 \u110e\u116e\u110e\u1165\u11ab\u00b7\u1100\u1162\u1105\u1163\u11a8 \u1103\u1161\u11ab\u1106\u1167\u11ab" + }, + { + "label": "API", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_structures.md", + "source_location": "L67", + "_origin": "ast", + "id": "pages_b05_profile_b05_structures_api", + "community": 22, + "community_name": "B05 \uad6c\uc870\ubb3c \uc815\ubcf8\u00b7\ud1b5\ud569 \ud3b8\uc9d1", + "norm_label": "api" + }, + { + "label": "B06 \uacbd\uacc4\uc640 \ub0a8\uc740 \ubc94\uc704", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_structures.md", + "source_location": "L75", + "_origin": "ast", + "id": "pages_b05_profile_b05_structures_b06_\uacbd\uacc4\uc640_\ub0a8\uc740_\ubc94\uc704", + "community": 22, + "community_name": "B05 \uad6c\uc870\ubb3c \uc815\ubcf8\u00b7\ud1b5\ud569 \ud3b8\uc9d1", + "norm_label": "b06 \u1100\u1167\u11bc\u1100\u1168\u110b\u116a \u1102\u1161\u11b7\u110b\u1173\u11ab \u1107\u1165\u11b7\u110b\u1171" + }, + { + "label": "\uac80\uc99d", + "file_type": "document", + "source_file": "pages/B05_Profile/B05_structures.md", + "source_location": "L81", + "_origin": "ast", + "id": "pages_b05_profile_b05_structures_\uac80\uc99d", + "community": 22, + "community_name": "B05 \uad6c\uc870\ubb3c \uc815\ubcf8\u00b7\ud1b5\ud569 \ud3b8\uc9d1", + "norm_label": "\u1100\u1165\u11b7\u110c\u1173\u11bc" + }, + { + "label": "B05_Profile_Engine_Grade.md", + "file_type": "document", + "source_file": "pages/B05_Profile/backend/B05_Profile_Engine_Grade.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b05_profile_backend_b05_profile_engine_grade", + "community": 132, + "community_name": "B05_Profile_Engine_Grade.md", + "norm_label": "b05_profile_engine_grade.md" + }, + { + "label": "B05_Profile_Engine_Grade.py", + "file_type": "document", + "source_file": "pages/B05_Profile/backend/B05_Profile_Engine_Grade.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b05_profile_backend_b05_profile_engine_grade_b05_profile_engine_grade_py", + "community": 132, + "community_name": "B05_Profile_Engine_Grade.md", + "norm_label": "b05_profile_engine_grade.py" + }, + { + "label": "\ud83d\udee0\ufe0f \uc8fc\uc694 \ud074\ub798\uc2a4 \ubc0f \ud568\uc218 \ubaa9\ub85d", + "file_type": "document", + "source_file": "pages/B05_Profile/backend/B05_Profile_Engine_Grade.md", + "source_location": "L14", + "_origin": "ast", + "id": "pages_b05_profile_backend_b05_profile_engine_grade_\uc8fc\uc694_\ud074\ub798\uc2a4_\ubc0f_\ud568\uc218_\ubaa9\ub85d", + "community": 132, + "community_name": "B05_Profile_Engine_Grade.md", + "norm_label": "\ud83d\udee0\ufe0f \u110c\u116e\u110b\u116d \u110f\u1173\u11af\u1105\u1162\u1109\u1173 \u1106\u1175\u11be \u1112\u1161\u11b7\u1109\u116e \u1106\u1169\u11a8\u1105\u1169\u11a8" + }, + { + "label": "\ud83d\udd17 \uc5f0\uad00 \uac1c\ub150 \ubc0f \uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/B05_Profile/backend/B05_Profile_Engine_Grade.md", + "source_location": "L23", + "_origin": "ast", + "id": "pages_b05_profile_backend_b05_profile_engine_grade_\uc5f0\uad00_\uac1c\ub150_\ubc0f_\uc758\uc874\uc131", + "community": 132, + "community_name": "B05_Profile_Engine_Grade.md", + "norm_label": "\ud83d\udd17 \u110b\u1167\u11ab\u1100\u116a\u11ab \u1100\u1162\u1102\u1167\u11b7 \u1106\u1175\u11be \u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "B05_Profile_Engine_Sections.md", + "file_type": "document", + "source_file": "pages/B05_Profile/backend/B05_Profile_Engine_Sections.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b05_profile_backend_b05_profile_engine_sections", + "community": 102, + "community_name": "B05_Profile_Engine_Sections.md", + "norm_label": "b05_profile_engine_sections.md" + }, + { + "label": "B05_Profile_Engine_Sections.py", + "file_type": "document", + "source_file": "pages/B05_Profile/backend/B05_Profile_Engine_Sections.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b05_profile_backend_b05_profile_engine_sections_b05_profile_engine_sections_py", + "community": 102, + "community_name": "B05_Profile_Engine_Sections.md", + "norm_label": "b05_profile_engine_sections.py" + }, + { + "label": "\ud83d\udee0\ufe0f \uc8fc\uc694 \ud568\uc218 \ubaa9\ub85d", + "file_type": "document", + "source_file": "pages/B05_Profile/backend/B05_Profile_Engine_Sections.md", + "source_location": "L14", + "_origin": "ast", + "id": "pages_b05_profile_backend_b05_profile_engine_sections_\uc8fc\uc694_\ud568\uc218_\ubaa9\ub85d", + "community": 102, + "community_name": "B05_Profile_Engine_Sections.md", + "norm_label": "\ud83d\udee0\ufe0f \u110c\u116e\u110b\u116d \u1112\u1161\u11b7\u1109\u116e \u1106\u1169\u11a8\u1105\u1169\u11a8" + }, + { + "label": "\u26a0\ufe0f \ub7f0\ud0c0\uc784 \uac80\uc99d \uc8fc\uc758\uc0ac\ud56d (2026-07-24 \uac80\uc99d \ubcf4\uace0\uc11c \uae30\uc900)", + "file_type": "document", + "source_file": "pages/B05_Profile/backend/B05_Profile_Engine_Sections.md", + "source_location": "L24", + "_origin": "ast", + "id": "pages_b05_profile_backend_b05_profile_engine_sections_\ub7f0\ud0c0\uc784_\uac80\uc99d_\uc8fc\uc758\uc0ac\ud56d_2026_07_24_\uac80\uc99d_\ubcf4\uace0\uc11c_\uae30\uc900", + "community": 102, + "community_name": "B05_Profile_Engine_Sections.md", + "norm_label": "\u26a0\ufe0f \u1105\u1165\u11ab\u1110\u1161\u110b\u1175\u11b7 \u1100\u1165\u11b7\u110c\u1173\u11bc \u110c\u116e\u110b\u1174\u1109\u1161\u1112\u1161\u11bc (2026-07-24 \u1100\u1165\u11b7\u110c\u1173\u11bc \u1107\u1169\u1100\u1169\u1109\u1165 \u1100\u1175\u110c\u116e\u11ab)" + }, + { + "label": "\ud83d\udd17 \uc5f0\uad00 \uac1c\ub150 \ubc0f \uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/B05_Profile/backend/B05_Profile_Engine_Sections.md", + "source_location": "L28", + "_origin": "ast", + "id": "pages_b05_profile_backend_b05_profile_engine_sections_\uc5f0\uad00_\uac1c\ub150_\ubc0f_\uc758\uc874\uc131", + "community": 102, + "community_name": "B05_Profile_Engine_Sections.md", + "norm_label": "\ud83d\udd17 \u110b\u1167\u11ab\u1100\u116a\u11ab \u1100\u1162\u1102\u1167\u11b7 \u1106\u1175\u11be \u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "B05_Profile_Engine_Solver.md", + "file_type": "document", + "source_file": "pages/B05_Profile/backend/B05_Profile_Engine_Solver.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b05_profile_backend_b05_profile_engine_solver", + "community": 133, + "community_name": "B05_Profile_Engine_Solver.md", + "norm_label": "b05_profile_engine_solver.md" + }, + { + "label": "B05_Profile_Engine_Solver.py", + "file_type": "document", + "source_file": "pages/B05_Profile/backend/B05_Profile_Engine_Solver.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b05_profile_backend_b05_profile_engine_solver_b05_profile_engine_solver_py", + "community": 133, + "community_name": "B05_Profile_Engine_Solver.md", + "norm_label": "b05_profile_engine_solver.py" + }, + { + "label": "\ud83d\udee0\ufe0f \uc5d4\uc9c4 \ud575\uc2ec \ud568\uc218 \ubaa9\ub85d", + "file_type": "document", + "source_file": "pages/B05_Profile/backend/B05_Profile_Engine_Solver.md", + "source_location": "L14", + "_origin": "ast", + "id": "pages_b05_profile_backend_b05_profile_engine_solver_\uc5d4\uc9c4_\ud575\uc2ec_\ud568\uc218_\ubaa9\ub85d", + "community": 133, + "community_name": "B05_Profile_Engine_Solver.md", + "norm_label": "\ud83d\udee0\ufe0f \u110b\u1166\u11ab\u110c\u1175\u11ab \u1112\u1162\u11a8\u1109\u1175\u11b7 \u1112\u1161\u11b7\u1109\u116e \u1106\u1169\u11a8\u1105\u1169\u11a8" + }, + { + "label": "\ud83d\udd17 \uc5f0\uad00 \uac1c\ub150 \ubc0f \uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/B05_Profile/backend/B05_Profile_Engine_Solver.md", + "source_location": "L23", + "_origin": "ast", + "id": "pages_b05_profile_backend_b05_profile_engine_solver_\uc5f0\uad00_\uac1c\ub150_\ubc0f_\uc758\uc874\uc131", + "community": 133, + "community_name": "B05_Profile_Engine_Solver.md", + "norm_label": "\ud83d\udd17 \u110b\u1167\u11ab\u1100\u116a\u11ab \u1100\u1162\u1102\u1167\u11b7 \u1106\u1175\u11be \u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "B05_Profile_Repository.md", + "file_type": "document", + "source_file": "pages/B05_Profile/backend/B05_Profile_Repository.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b05_profile_backend_b05_profile_repository", + "community": 134, + "community_name": "B05_Profile_Repository.md", + "norm_label": "b05_profile_repository.md" + }, + { + "label": "B05_Profile_Repository.py", + "file_type": "document", + "source_file": "pages/B05_Profile/backend/B05_Profile_Repository.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b05_profile_backend_b05_profile_repository_b05_profile_repository_py", + "community": 134, + "community_name": "B05_Profile_Repository.md", + "norm_label": "b05_profile_repository.py" + }, + { + "label": "\ud83d\udee0\ufe0f DB \uc811\uadfc \ud568\uc218 \ubaa9\ub85d", + "file_type": "document", + "source_file": "pages/B05_Profile/backend/B05_Profile_Repository.md", + "source_location": "L14", + "_origin": "ast", + "id": "pages_b05_profile_backend_b05_profile_repository_db_\uc811\uadfc_\ud568\uc218_\ubaa9\ub85d", + "community": 134, + "community_name": "B05_Profile_Repository.md", + "norm_label": "\ud83d\udee0\ufe0f db \u110c\u1165\u11b8\u1100\u1173\u11ab \u1112\u1161\u11b7\u1109\u116e \u1106\u1169\u11a8\u1105\u1169\u11a8" + }, + { + "label": "\ud83d\udd17 \uc5f0\uad00 \uac1c\ub150 \ubc0f \uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/B05_Profile/backend/B05_Profile_Repository.md", + "source_location": "L27", + "_origin": "ast", + "id": "pages_b05_profile_backend_b05_profile_repository_\uc5f0\uad00_\uac1c\ub150_\ubc0f_\uc758\uc874\uc131", + "community": 134, + "community_name": "B05_Profile_Repository.md", + "norm_label": "\ud83d\udd17 \u110b\u1167\u11ab\u1100\u116a\u11ab \u1100\u1162\u1102\u1167\u11b7 \u1106\u1175\u11be \u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "B05_Profile_Router.md", + "file_type": "document", + "source_file": "pages/B05_Profile/backend/B05_Profile_Router.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b05_profile_backend_b05_profile_router", + "community": 135, + "community_name": "B05_Profile_Router.md", + "norm_label": "b05_profile_router.md" + }, + { + "label": "B05_Profile_Router.py", + "file_type": "document", + "source_file": "pages/B05_Profile/backend/B05_Profile_Router.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b05_profile_backend_b05_profile_router_b05_profile_router_py", + "community": 135, + "community_name": "B05_Profile_Router.md", + "norm_label": "b05_profile_router.py" + }, + { + "label": "\ud83d\udee0\ufe0f \ub77c\uc6b0\ud130 API \ubc0f \uc8fc\uc694 \ud568\uc218 \ubaa9\ub85d", + "file_type": "document", + "source_file": "pages/B05_Profile/backend/B05_Profile_Router.md", + "source_location": "L14", + "_origin": "ast", + "id": "pages_b05_profile_backend_b05_profile_router_\ub77c\uc6b0\ud130_api_\ubc0f_\uc8fc\uc694_\ud568\uc218_\ubaa9\ub85d", + "community": 135, + "community_name": "B05_Profile_Router.md", + "norm_label": "\ud83d\udee0\ufe0f \u1105\u1161\u110b\u116e\u1110\u1165 api \u1106\u1175\u11be \u110c\u116e\u110b\u116d \u1112\u1161\u11b7\u1109\u116e \u1106\u1169\u11a8\u1105\u1169\u11a8" + }, + { + "label": "\ud83d\udd17 \uc5f0\uad00 \ubaa8\ub4c8 \ubc0f \uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/B05_Profile/backend/B05_Profile_Router.md", + "source_location": "L24", + "_origin": "ast", + "id": "pages_b05_profile_backend_b05_profile_router_\uc5f0\uad00_\ubaa8\ub4c8_\ubc0f_\uc758\uc874\uc131", + "community": 135, + "community_name": "B05_Profile_Router.md", + "norm_label": "\ud83d\udd17 \u110b\u1167\u11ab\u1100\u116a\u11ab \u1106\u1169\u1103\u1172\u11af \u1106\u1175\u11be \u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "B05_Profile_Router_Confirm.md", + "file_type": "document", + "source_file": "pages/B05_Profile/backend/B05_Profile_Router_Confirm.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b05_profile_backend_b05_profile_router_confirm", + "community": 136, + "community_name": "B05_Profile_Router_Confirm.md", + "norm_label": "b05_profile_router_confirm.md" + }, + { + "label": "B05_Profile_Router_Confirm.py", + "file_type": "document", + "source_file": "pages/B05_Profile/backend/B05_Profile_Router_Confirm.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b05_profile_backend_b05_profile_router_confirm_b05_profile_router_confirm_py", + "community": 136, + "community_name": "B05_Profile_Router_Confirm.md", + "norm_label": "b05_profile_router_confirm.py" + }, + { + "label": "\ud83d\udee0\ufe0f \uc8fc\uc694 \ud5ec\ud37c \ud568\uc218 \ubaa9\ub85d", + "file_type": "document", + "source_file": "pages/B05_Profile/backend/B05_Profile_Router_Confirm.md", + "source_location": "L14", + "_origin": "ast", + "id": "pages_b05_profile_backend_b05_profile_router_confirm_\uc8fc\uc694_\ud5ec\ud37c_\ud568\uc218_\ubaa9\ub85d", + "community": 136, + "community_name": "B05_Profile_Router_Confirm.md", + "norm_label": "\ud83d\udee0\ufe0f \u110c\u116e\u110b\u116d \u1112\u1166\u11af\u1111\u1165 \u1112\u1161\u11b7\u1109\u116e \u1106\u1169\u11a8\u1105\u1169\u11a8" + }, + { + "label": "\ud83d\udd17 \uc5f0\uad00 \ubaa8\ub4c8", + "file_type": "document", + "source_file": "pages/B05_Profile/backend/B05_Profile_Router_Confirm.md", + "source_location": "L23", + "_origin": "ast", + "id": "pages_b05_profile_backend_b05_profile_router_confirm_\uc5f0\uad00_\ubaa8\ub4c8", + "community": 136, + "community_name": "B05_Profile_Router_Confirm.md", + "norm_label": "\ud83d\udd17 \u110b\u1167\u11ab\u1100\u116a\u11ab \u1106\u1169\u1103\u1172\u11af" + }, + { + "label": "B05_Profile_Schema.md", + "file_type": "document", + "source_file": "pages/B05_Profile/backend/B05_Profile_Schema.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b05_profile_backend_b05_profile_schema", + "community": 137, + "community_name": "B05_Profile_Schema.md", + "norm_label": "b05_profile_schema.md" + }, + { + "label": "B05_Profile_Schema.py", + "file_type": "document", + "source_file": "pages/B05_Profile/backend/B05_Profile_Schema.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b05_profile_backend_b05_profile_schema_b05_profile_schema_py", + "community": 137, + "community_name": "B05_Profile_Schema.md", + "norm_label": "b05_profile_schema.py" + }, + { + "label": "\ud83d\udee0\ufe0f Pydantic \ubaa8\ub378 \ubc0f \uac80\uc99d \ud5ec\ud37c \ubaa9\ub85d", + "file_type": "document", + "source_file": "pages/B05_Profile/backend/B05_Profile_Schema.md", + "source_location": "L14", + "_origin": "ast", + "id": "pages_b05_profile_backend_b05_profile_schema_pydantic_\ubaa8\ub378_\ubc0f_\uac80\uc99d_\ud5ec\ud37c_\ubaa9\ub85d", + "community": 137, + "community_name": "B05_Profile_Schema.md", + "norm_label": "\ud83d\udee0\ufe0f pydantic \u1106\u1169\u1103\u1166\u11af \u1106\u1175\u11be \u1100\u1165\u11b7\u110c\u1173\u11bc \u1112\u1166\u11af\u1111\u1165 \u1106\u1169\u11a8\u1105\u1169\u11a8" + }, + { + "label": "\ud83d\udd17 \uc5f0\uad00 \uac1c\ub150 \ubc0f \uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/B05_Profile/backend/B05_Profile_Schema.md", + "source_location": "L29", + "_origin": "ast", + "id": "pages_b05_profile_backend_b05_profile_schema_\uc5f0\uad00_\uac1c\ub150_\ubc0f_\uc758\uc874\uc131", + "community": 137, + "community_name": "B05_Profile_Schema.md", + "norm_label": "\ud83d\udd17 \u110b\u1167\u11ab\u1100\u116a\u11ab \u1100\u1162\u1102\u1167\u11b7 \u1106\u1175\u11be \u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "B05_Profile_Api_Fetch.md", + "file_type": "document", + "source_file": "pages/B05_Profile/frontend/B05_Profile_Api_Fetch.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b05_profile_frontend_b05_profile_api_fetch", + "community": 103, + "community_name": "B05_Profile_Api_Fetch.ts", + "norm_label": "b05_profile_api_fetch.md" + }, + { + "label": "B05_Profile_Api_Fetch.ts", + "file_type": "document", + "source_file": "pages/B05_Profile/frontend/B05_Profile_Api_Fetch.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b05_profile_frontend_b05_profile_api_fetch_b05_profile_api_fetch_ts", + "community": 103, + "community_name": "B05_Profile_Api_Fetch.ts", + "norm_label": "b05_profile_api_fetch.ts" + }, + { + "label": "\ud83d\udee0\ufe0f \uc8fc\uc694 API \ud568\uc218 \ubaa9\ub85d", + "file_type": "document", + "source_file": "pages/B05_Profile/frontend/B05_Profile_Api_Fetch.md", + "source_location": "L14", + "_origin": "ast", + "id": "pages_b05_profile_frontend_b05_profile_api_fetch_\uc8fc\uc694_api_\ud568\uc218_\ubaa9\ub85d", + "community": 103, + "community_name": "B05_Profile_Api_Fetch.ts", + "norm_label": "\ud83d\udee0\ufe0f \u110c\u116e\u110b\u116d api \u1112\u1161\u11b7\u1109\u116e \u1106\u1169\u11a8\u1105\u1169\u11a8" + }, + { + "label": "\ud83d\udd17 \uc5f0\uad00 \uac1c\ub150 \ubc0f \uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/B05_Profile/frontend/B05_Profile_Api_Fetch.md", + "source_location": "L24", + "_origin": "ast", + "id": "pages_b05_profile_frontend_b05_profile_api_fetch_\uc5f0\uad00_\uac1c\ub150_\ubc0f_\uc758\uc874\uc131", + "community": 103, + "community_name": "B05_Profile_Api_Fetch.ts", + "norm_label": "\ud83d\udd17 \u110b\u1167\u11ab\u1100\u116a\u11ab \u1100\u1162\u1102\u1167\u11b7 \u1106\u1175\u11be \u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "B05_Profile_UI_Drainage_Panel.md", + "file_type": "document", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_Drainage_Panel.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b05_profile_frontend_b05_profile_ui_drainage_panel", + "community": 104, + "community_name": "B05_Profile_UI_Drainage_Panel", + "norm_label": "b05_profile_ui_drainage_panel.md" + }, + { + "label": "B05_Profile_UI_Drainage_Panel", + "file_type": "document", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_Drainage_Panel.md", + "source_location": "L9", + "_origin": "ast", + "id": "pages_b05_profile_frontend_b05_profile_ui_drainage_panel_b05_profile_ui_drainage_panel", + "community": 104, + "community_name": "B05_Profile_UI_Drainage_Panel", + "norm_label": "b05_profile_ui_drainage_panel" + }, + { + "label": "\ud83d\udccb \uac1c\uc694 \ubc0f \ud2b9\uc9d5", + "file_type": "document", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_Drainage_Panel.md", + "source_location": "L13", + "_origin": "ast", + "id": "pages_b05_profile_frontend_b05_profile_ui_drainage_panel_\uac1c\uc694_\ubc0f_\ud2b9\uc9d5", + "community": 104, + "community_name": "B05_Profile_UI_Drainage_Panel", + "norm_label": "\ud83d\udccb \u1100\u1162\u110b\u116d \u1106\u1175\u11be \u1110\u1173\u11a8\u110c\u1175\u11bc" + }, + { + "label": "\ud83d\udee0\ufe0f \uc8fc\uc694 \ud568\uc218 / \uc2ec\ubcfc \ubaa9\ub85d", + "file_type": "document", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_Drainage_Panel.md", + "source_location": "L17", + "_origin": "ast", + "id": "pages_b05_profile_frontend_b05_profile_ui_drainage_panel_\uc8fc\uc694_\ud568\uc218_\uc2ec\ubcfc_\ubaa9\ub85d", + "community": 104, + "community_name": "B05_Profile_UI_Drainage_Panel", + "norm_label": "\ud83d\udee0\ufe0f \u110c\u116e\u110b\u116d \u1112\u1161\u11b7\u1109\u116e / \u1109\u1175\u11b7\u1107\u1169\u11af \u1106\u1169\u11a8\u1105\u1169\u11a8" + }, + { + "label": "B05_Profile_UI_Drainage_Parts.md", + "file_type": "document", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_Drainage_Parts.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b05_profile_frontend_b05_profile_ui_drainage_parts", + "community": 69, + "community_name": "B05_Profile_UI_Drainage_Parts \u2014 \ubc30\uc218\uc720\uc5ed \uacf5\uc6a9 UI \ud30c\uce20", + "norm_label": "b05_profile_ui_drainage_parts.md" + }, + { + "label": "B05_Profile_UI_Drainage_Parts \u2014 \ubc30\uc218\uc720\uc5ed \uacf5\uc6a9 UI \ud30c\uce20", + "file_type": "document", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_Drainage_Parts.md", + "source_location": "L9", + "_origin": "ast", + "id": "pages_b05_profile_frontend_b05_profile_ui_drainage_parts_b05_profile_ui_drainage_parts_\ubc30\uc218\uc720\uc5ed_\uacf5\uc6a9_ui_\ud30c\uce20", + "community": 69, + "community_name": "B05_Profile_UI_Drainage_Parts \u2014 \ubc30\uc218\uc720\uc5ed \uacf5\uc6a9 UI \ud30c\uce20", + "norm_label": "b05_profile_ui_drainage_parts \u2014 \u1107\u1162\u1109\u116e\u110b\u1172\u110b\u1167\u11a8 \u1100\u1169\u11bc\u110b\u116d\u11bc ui \u1111\u1161\u110e\u1173" + }, + { + "label": "1. \uac1c\uc694 \ubc0f \uc5ed\ud560", + "file_type": "document", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_Drainage_Parts.md", + "source_location": "L11", + "_origin": "ast", + "id": "pages_b05_profile_frontend_b05_profile_ui_drainage_parts_1_\uac1c\uc694_\ubc0f_\uc5ed\ud560", + "community": 69, + "community_name": "B05_Profile_UI_Drainage_Parts \u2014 \ubc30\uc218\uc720\uc5ed \uacf5\uc6a9 UI \ud30c\uce20", + "norm_label": "1. \u1100\u1162\u110b\u116d \u1106\u1175\u11be \u110b\u1167\u11a8\u1112\u1161\u11af" + }, + { + "label": "2. \uc8fc\uc694 \uae30\ub2a5 \ubc0f \ud568\uc218", + "file_type": "document", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_Drainage_Parts.md", + "source_location": "L15", + "_origin": "ast", + "id": "pages_b05_profile_frontend_b05_profile_ui_drainage_parts_2_\uc8fc\uc694_\uae30\ub2a5_\ubc0f_\ud568\uc218", + "community": 69, + "community_name": "B05_Profile_UI_Drainage_Parts \u2014 \ubc30\uc218\uc720\uc5ed \uacf5\uc6a9 UI \ud30c\uce20", + "norm_label": "2. \u110c\u116e\u110b\u116d \u1100\u1175\u1102\u1173\u11bc \u1106\u1175\u11be \u1112\u1161\u11b7\u1109\u116e" + }, + { + "label": "3. \uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_Drainage_Parts.md", + "source_location": "L23", + "_origin": "ast", + "id": "pages_b05_profile_frontend_b05_profile_ui_drainage_parts_3_\uc758\uc874\uc131", + "community": 69, + "community_name": "B05_Profile_UI_Drainage_Parts \u2014 \ubc30\uc218\uc720\uc5ed \uacf5\uc6a9 UI \ud30c\uce20", + "norm_label": "3. \u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "B05_Profile_UI_Drainage_Pipes.md", + "file_type": "document", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_Drainage_Pipes.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b05_profile_frontend_b05_profile_ui_drainage_pipes", + "community": 105, + "community_name": "B05_Profile_UI_Drainage_Pipes", + "norm_label": "b05_profile_ui_drainage_pipes.md" + }, + { + "label": "B05_Profile_UI_Drainage_Pipes", + "file_type": "document", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_Drainage_Pipes.md", + "source_location": "L9", + "_origin": "ast", + "id": "pages_b05_profile_frontend_b05_profile_ui_drainage_pipes_b05_profile_ui_drainage_pipes", + "community": 105, + "community_name": "B05_Profile_UI_Drainage_Pipes", + "norm_label": "b05_profile_ui_drainage_pipes" + }, + { + "label": "\ud83d\udccb \uac1c\uc694 \ubc0f \ud2b9\uc9d5", + "file_type": "document", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_Drainage_Pipes.md", + "source_location": "L13", + "_origin": "ast", + "id": "pages_b05_profile_frontend_b05_profile_ui_drainage_pipes_\uac1c\uc694_\ubc0f_\ud2b9\uc9d5", + "community": 105, + "community_name": "B05_Profile_UI_Drainage_Pipes", + "norm_label": "\ud83d\udccb \u1100\u1162\u110b\u116d \u1106\u1175\u11be \u1110\u1173\u11a8\u110c\u1175\u11bc" + }, + { + "label": "\ud83d\udee0\ufe0f \uc8fc\uc694 \ud568\uc218 / \uc2ec\ubcfc \ubaa9\ub85d", + "file_type": "document", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_Drainage_Pipes.md", + "source_location": "L17", + "_origin": "ast", + "id": "pages_b05_profile_frontend_b05_profile_ui_drainage_pipes_\uc8fc\uc694_\ud568\uc218_\uc2ec\ubcfc_\ubaa9\ub85d", + "community": 105, + "community_name": "B05_Profile_UI_Drainage_Pipes", + "norm_label": "\ud83d\udee0\ufe0f \u110c\u116e\u110b\u116d \u1112\u1161\u11b7\u1109\u116e / \u1109\u1175\u11b7\u1107\u1169\u11af \u1106\u1169\u11a8\u1105\u1169\u11a8" + }, + { + "label": "B05_Profile_UI_IrregularStations.md", + "file_type": "document", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_IrregularStations.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b05_profile_frontend_b05_profile_ui_irregularstations", + "community": 138, + "community_name": "B05_Profile_UI_IrregularStations.md", + "norm_label": "b05_profile_ui_irregularstations.md" + }, + { + "label": "B05_Profile_UI_IrregularStations.ts", + "file_type": "document", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_IrregularStations.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b05_profile_frontend_b05_profile_ui_irregularstations_b05_profile_ui_irregularstations_ts", + "community": 138, + "community_name": "B05_Profile_UI_IrregularStations.md", + "norm_label": "b05_profile_ui_irregularstations.ts" + }, + { + "label": "\ud83d\udee0\ufe0f \uc8fc\uc694 \uc778\ud130\ud398\uc774\uc2a4 \ubc0f \ud568\uc218 \ubaa9\ub85d", + "file_type": "document", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_IrregularStations.md", + "source_location": "L14", + "_origin": "ast", + "id": "pages_b05_profile_frontend_b05_profile_ui_irregularstations_\uc8fc\uc694_\uc778\ud130\ud398\uc774\uc2a4_\ubc0f_\ud568\uc218_\ubaa9\ub85d", + "community": 138, + "community_name": "B05_Profile_UI_IrregularStations.md", + "norm_label": "\ud83d\udee0\ufe0f \u110c\u116e\u110b\u116d \u110b\u1175\u11ab\u1110\u1165\u1111\u1166\u110b\u1175\u1109\u1173 \u1106\u1175\u11be \u1112\u1161\u11b7\u1109\u116e \u1106\u1169\u11a8\u1105\u1169\u11a8" + }, + { + "label": "\ud83d\udd17 \uc5f0\uad00 \uac1c\ub150 \ubc0f \uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_IrregularStations.md", + "source_location": "L24", + "_origin": "ast", + "id": "pages_b05_profile_frontend_b05_profile_ui_irregularstations_\uc5f0\uad00_\uac1c\ub150_\ubc0f_\uc758\uc874\uc131", + "community": 138, + "community_name": "B05_Profile_UI_IrregularStations.md", + "norm_label": "\ud83d\udd17 \u110b\u1167\u11ab\u1100\u116a\u11ab \u1100\u1162\u1102\u1167\u11b7 \u1106\u1175\u11be \u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "B05_Profile_UI_Page.md", + "file_type": "document", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_Page.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b05_profile_frontend_b05_profile_ui_page", + "community": 139, + "community_name": "B05_Profile_UI_Page.md", + "norm_label": "b05_profile_ui_page.md" + }, + { + "label": "B05_Profile_UI_Page.ts", + "file_type": "document", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_Page.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b05_profile_frontend_b05_profile_ui_page_b05_profile_ui_page_ts", + "community": 139, + "community_name": "B05_Profile_UI_Page.md", + "norm_label": "b05_profile_ui_page.ts" + }, + { + "label": "\ud83d\udee0\ufe0f \uc8fc\uc694 \ucef4\ud3ec\ub10c\ud2b8 \ubc0f \ud568\uc218 \ubaa9\ub85d", + "file_type": "document", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_Page.md", + "source_location": "L14", + "_origin": "ast", + "id": "pages_b05_profile_frontend_b05_profile_ui_page_\uc8fc\uc694_\ucef4\ud3ec\ub10c\ud2b8_\ubc0f_\ud568\uc218_\ubaa9\ub85d", + "community": 139, + "community_name": "B05_Profile_UI_Page.md", + "norm_label": "\ud83d\udee0\ufe0f \u110c\u116e\u110b\u116d \u110f\u1165\u11b7\u1111\u1169\u1102\u1165\u11ab\u1110\u1173 \u1106\u1175\u11be \u1112\u1161\u11b7\u1109\u116e \u1106\u1169\u11a8\u1105\u1169\u11a8" + }, + { + "label": "\ud83d\udd17 \uc5f0\uad00 \uac1c\ub150 \ubc0f \uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_Page.md", + "source_location": "L23", + "_origin": "ast", + "id": "pages_b05_profile_frontend_b05_profile_ui_page_\uc5f0\uad00_\uac1c\ub150_\ubc0f_\uc758\uc874\uc131", + "community": 139, + "community_name": "B05_Profile_UI_Page.md", + "norm_label": "\ud83d\udd17 \u110b\u1167\u11ab\u1100\u116a\u11ab \u1100\u1162\u1102\u1167\u11b7 \u1106\u1175\u11be \u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "B05_Profile_UI_Panel.md", + "file_type": "document", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_Panel.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b05_profile_frontend_b05_profile_ui_panel", + "community": 140, + "community_name": "B05_Profile_UI_Panel.md", + "norm_label": "b05_profile_ui_panel.md" + }, + { + "label": "B05_Profile_UI_Panel.ts", + "file_type": "document", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_Panel.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b05_profile_frontend_b05_profile_ui_panel_b05_profile_ui_panel_ts", + "community": 140, + "community_name": "B05_Profile_UI_Panel.md", + "norm_label": "b05_profile_ui_panel.ts" + }, + { + "label": "\ud83d\udee0\ufe0f \uc8fc\uc694 \ud568\uc218 \ubaa9\ub85d", + "file_type": "document", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_Panel.md", + "source_location": "L14", + "_origin": "ast", + "id": "pages_b05_profile_frontend_b05_profile_ui_panel_\uc8fc\uc694_\ud568\uc218_\ubaa9\ub85d", + "community": 140, + "community_name": "B05_Profile_UI_Panel.md", + "norm_label": "\ud83d\udee0\ufe0f \u110c\u116e\u110b\u116d \u1112\u1161\u11b7\u1109\u116e \u1106\u1169\u11a8\u1105\u1169\u11a8" + }, + { + "label": "\ud83d\udd17 \uc5f0\uad00 \uac1c\ub150 \ubc0f \uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_Panel.md", + "source_location": "L21", + "_origin": "ast", + "id": "pages_b05_profile_frontend_b05_profile_ui_panel_\uc5f0\uad00_\uac1c\ub150_\ubc0f_\uc758\uc874\uc131", + "community": 140, + "community_name": "B05_Profile_UI_Panel.md", + "norm_label": "\ud83d\udd17 \u110b\u1167\u11ab\u1100\u116a\u11ab \u1100\u1162\u1102\u1167\u11b7 \u1106\u1175\u11be \u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "B05_Profile_UI_Profile_Alignment.md", + "file_type": "document", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_Profile_Alignment.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b05_profile_frontend_b05_profile_ui_profile_alignment", + "community": 141, + "community_name": "B05_Profile_UI_Profile_Alignment.md", + "norm_label": "b05_profile_ui_profile_alignment.md" + }, + { + "label": "B05_Profile_UI_Profile_Alignment.ts", + "file_type": "document", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_Profile_Alignment.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b05_profile_frontend_b05_profile_ui_profile_alignment_b05_profile_ui_profile_alignment_ts", + "community": 141, + "community_name": "B05_Profile_UI_Profile_Alignment.md", + "norm_label": "b05_profile_ui_profile_alignment.ts" + }, + { + "label": "\ud83d\udee0\ufe0f \uc8fc\uc694 \ud568\uc218 \ubaa9\ub85d", + "file_type": "document", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_Profile_Alignment.md", + "source_location": "L14", + "_origin": "ast", + "id": "pages_b05_profile_frontend_b05_profile_ui_profile_alignment_\uc8fc\uc694_\ud568\uc218_\ubaa9\ub85d", + "community": 141, + "community_name": "B05_Profile_UI_Profile_Alignment.md", + "norm_label": "\ud83d\udee0\ufe0f \u110c\u116e\u110b\u116d \u1112\u1161\u11b7\u1109\u116e \u1106\u1169\u11a8\u1105\u1169\u11a8" + }, + { + "label": "\ud83d\udd17 \uc5f0\uad00 \uac1c\ub150 \ubc0f \uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_Profile_Alignment.md", + "source_location": "L21", + "_origin": "ast", + "id": "pages_b05_profile_frontend_b05_profile_ui_profile_alignment_\uc5f0\uad00_\uac1c\ub150_\ubc0f_\uc758\uc874\uc131", + "community": 141, + "community_name": "B05_Profile_UI_Profile_Alignment.md", + "norm_label": "\ud83d\udd17 \u110b\u1167\u11ab\u1100\u116a\u11ab \u1100\u1162\u1102\u1167\u11b7 \u1106\u1175\u11be \u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "B05_Profile_UI_Profile_Panel.md", + "file_type": "document", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_Profile_Panel.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b05_profile_frontend_b05_profile_ui_profile_panel", + "community": 106, + "community_name": "B05_Profile_UI_Profile_Panel.md", + "norm_label": "b05_profile_ui_profile_panel.md" + }, + { + "label": "B05_Profile_UI_Profile_Panel.ts", + "file_type": "document", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_Profile_Panel.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b05_profile_frontend_b05_profile_ui_profile_panel_b05_profile_ui_profile_panel_ts", + "community": 106, + "community_name": "B05_Profile_UI_Profile_Panel.md", + "norm_label": "b05_profile_ui_profile_panel.ts" + }, + { + "label": "\ud83d\udee0\ufe0f \uc8fc\uc694 \uae30\ub2a5 \ubc0f \uac1c\uc120\uc0ac\ud56d (2026-08-06)", + "file_type": "document", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_Profile_Panel.md", + "source_location": "L14", + "_origin": "ast", + "id": "pages_b05_profile_frontend_b05_profile_ui_profile_panel_\uc8fc\uc694_\uae30\ub2a5_\ubc0f_\uac1c\uc120\uc0ac\ud56d_2026_08_06", + "community": 106, + "community_name": "B05_Profile_UI_Profile_Panel.md", + "norm_label": "\ud83d\udee0\ufe0f \u110c\u116e\u110b\u116d \u1100\u1175\u1102\u1173\u11bc \u1106\u1175\u11be \u1100\u1162\u1109\u1165\u11ab\u1109\u1161\u1112\u1161\u11bc (2026-08-06)" + }, + { + "label": "\ud83d\udee0\ufe0f \uc8fc\uc694 \ud568\uc218 \ubaa9\ub85d", + "file_type": "document", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_Profile_Panel.md", + "source_location": "L22", + "_origin": "ast", + "id": "pages_b05_profile_frontend_b05_profile_ui_profile_panel_\uc8fc\uc694_\ud568\uc218_\ubaa9\ub85d", + "community": 106, + "community_name": "B05_Profile_UI_Profile_Panel.md", + "norm_label": "\ud83d\udee0\ufe0f \u110c\u116e\u110b\u116d \u1112\u1161\u11b7\u1109\u116e \u1106\u1169\u11a8\u1105\u1169\u11a8" + }, + { + "label": "\ud83d\udd17 \uc5f0\uad00 \uac1c\ub150 \ubc0f \uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_Profile_Panel.md", + "source_location": "L29", + "_origin": "ast", + "id": "pages_b05_profile_frontend_b05_profile_ui_profile_panel_\uc5f0\uad00_\uac1c\ub150_\ubc0f_\uc758\uc874\uc131", + "community": 106, + "community_name": "B05_Profile_UI_Profile_Panel.md", + "norm_label": "\ud83d\udd17 \u110b\u1167\u11ab\u1100\u116a\u11ab \u1100\u1162\u1102\u1167\u11b7 \u1106\u1175\u11be \u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "B05_Profile_UI_Profile_Table.md", + "file_type": "document", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_Profile_Table.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b05_profile_frontend_b05_profile_ui_profile_table", + "community": 142, + "community_name": "B05_Profile_UI_Profile_Table.md", + "norm_label": "b05_profile_ui_profile_table.md" + }, + { + "label": "B05_Profile_UI_Profile_Table.ts", + "file_type": "document", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_Profile_Table.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b05_profile_frontend_b05_profile_ui_profile_table_b05_profile_ui_profile_table_ts", + "community": 142, + "community_name": "B05_Profile_UI_Profile_Table.md", + "norm_label": "b05_profile_ui_profile_table.ts" + }, + { + "label": "\ud83d\udee0\ufe0f \uc8fc\uc694 \ud568\uc218 \ubaa9\ub85d", + "file_type": "document", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_Profile_Table.md", + "source_location": "L14", + "_origin": "ast", + "id": "pages_b05_profile_frontend_b05_profile_ui_profile_table_\uc8fc\uc694_\ud568\uc218_\ubaa9\ub85d", + "community": 142, + "community_name": "B05_Profile_UI_Profile_Table.md", + "norm_label": "\ud83d\udee0\ufe0f \u110c\u116e\u110b\u116d \u1112\u1161\u11b7\u1109\u116e \u1106\u1169\u11a8\u1105\u1169\u11a8" + }, + { + "label": "\ud83d\udd17 \uc5f0\uad00 \uac1c\ub150 \ubc0f \uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_Profile_Table.md", + "source_location": "L23", + "_origin": "ast", + "id": "pages_b05_profile_frontend_b05_profile_ui_profile_table_\uc5f0\uad00_\uac1c\ub150_\ubc0f_\uc758\uc874\uc131", + "community": 142, + "community_name": "B05_Profile_UI_Profile_Table.md", + "norm_label": "\ud83d\udd17 \u110b\u1167\u11ab\u1100\u116a\u11ab \u1100\u1162\u1102\u1167\u11b7 \u1106\u1175\u11be \u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "B05_Profile_UI_Viewer.md", + "file_type": "document", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_Viewer.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b05_profile_frontend_b05_profile_ui_viewer", + "community": 143, + "community_name": "B05_Profile_UI_Viewer.md", + "norm_label": "b05_profile_ui_viewer.md" + }, + { + "label": "B05_Profile_UI_Viewer.ts", + "file_type": "document", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_Viewer.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b05_profile_frontend_b05_profile_ui_viewer_b05_profile_ui_viewer_ts", + "community": 143, + "community_name": "B05_Profile_UI_Viewer.md", + "norm_label": "b05_profile_ui_viewer.ts" + }, + { + "label": "\ud83d\udee0\ufe0f \uc8fc\uc694 \ud568\uc218 \ubaa9\ub85d", + "file_type": "document", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_Viewer.md", + "source_location": "L14", + "_origin": "ast", + "id": "pages_b05_profile_frontend_b05_profile_ui_viewer_\uc8fc\uc694_\ud568\uc218_\ubaa9\ub85d", + "community": 143, + "community_name": "B05_Profile_UI_Viewer.md", + "norm_label": "\ud83d\udee0\ufe0f \u110c\u116e\u110b\u116d \u1112\u1161\u11b7\u1109\u116e \u1106\u1169\u11a8\u1105\u1169\u11a8" + }, + { + "label": "\ud83d\udd17 \uc5f0\uad00 \uac1c\ub150 \ubc0f \uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_Viewer.md", + "source_location": "L20", + "_origin": "ast", + "id": "pages_b05_profile_frontend_b05_profile_ui_viewer_\uc5f0\uad00_\uac1c\ub150_\ubc0f_\uc758\uc874\uc131", + "community": 143, + "community_name": "B05_Profile_UI_Viewer.md", + "norm_label": "\ud83d\udd17 \u110b\u1167\u11ab\u1100\u116a\u11ab \u1100\u1162\u1102\u1167\u11b7 \u1106\u1175\u11be \u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "_UI_Drainage_Render.md", + "file_type": "document", + "source_file": "pages/B05_Profile/frontend/_UI_Drainage_Render.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b05_profile_frontend_ui_drainage_render", + "community": 70, + "community_name": "_UI_Drainage_Render \u2014 \ubc30\uc218\uc720\uc5ed\ub3c4 Canvas \ub80c\ub354\ub7ec", + "norm_label": "_ui_drainage_render.md" + }, + { + "label": "_UI_Drainage_Render \u2014 \ubc30\uc218\uc720\uc5ed\ub3c4 Canvas \ub80c\ub354\ub7ec", + "file_type": "document", + "source_file": "pages/B05_Profile/frontend/_UI_Drainage_Render.md", + "source_location": "L9", + "_origin": "ast", + "id": "pages_b05_profile_frontend_ui_drainage_render_ui_drainage_render_\ubc30\uc218\uc720\uc5ed\ub3c4_canvas_\ub80c\ub354\ub7ec", + "community": 70, + "community_name": "_UI_Drainage_Render \u2014 \ubc30\uc218\uc720\uc5ed\ub3c4 Canvas \ub80c\ub354\ub7ec", + "norm_label": "_ui_drainage_render \u2014 \u1107\u1162\u1109\u116e\u110b\u1172\u110b\u1167\u11a8\u1103\u1169 canvas \u1105\u1166\u11ab\u1103\u1165\u1105\u1165" + }, + { + "label": "1. \uac1c\uc694 \ubc0f \uc5ed\ud560", + "file_type": "document", + "source_file": "pages/B05_Profile/frontend/_UI_Drainage_Render.md", + "source_location": "L11", + "_origin": "ast", + "id": "pages_b05_profile_frontend_ui_drainage_render_1_\uac1c\uc694_\ubc0f_\uc5ed\ud560", + "community": 70, + "community_name": "_UI_Drainage_Render \u2014 \ubc30\uc218\uc720\uc5ed\ub3c4 Canvas \ub80c\ub354\ub7ec", + "norm_label": "1. \u1100\u1162\u110b\u116d \u1106\u1175\u11be \u110b\u1167\u11a8\u1112\u1161\u11af" + }, + { + "label": "2. \uc8fc\uc694 \uae30\ub2a5 \ubc0f \ud568\uc218", + "file_type": "document", + "source_file": "pages/B05_Profile/frontend/_UI_Drainage_Render.md", + "source_location": "L15", + "_origin": "ast", + "id": "pages_b05_profile_frontend_ui_drainage_render_2_\uc8fc\uc694_\uae30\ub2a5_\ubc0f_\ud568\uc218", + "community": 70, + "community_name": "_UI_Drainage_Render \u2014 \ubc30\uc218\uc720\uc5ed\ub3c4 Canvas \ub80c\ub354\ub7ec", + "norm_label": "2. \u110c\u116e\u110b\u116d \u1100\u1175\u1102\u1173\u11bc \u1106\u1175\u11be \u1112\u1161\u11b7\u1109\u116e" + }, + { + "label": "3. \uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/B05_Profile/frontend/_UI_Drainage_Render.md", + "source_location": "L23", + "_origin": "ast", + "id": "pages_b05_profile_frontend_ui_drainage_render_3_\uc758\uc874\uc131", + "community": 70, + "community_name": "_UI_Drainage_Render \u2014 \ubc30\uc218\uc720\uc5ed\ub3c4 Canvas \ub80c\ub354\ub7ec", + "norm_label": "3. \u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "_UI_Profile_Structures.md", + "file_type": "document", + "source_file": "pages/B05_Profile/frontend/_UI_Profile_Structures.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b05_profile_frontend_ui_profile_structures", + "community": 71, + "community_name": "_UI_Profile_Structures \u2014 \uc885\ub2e8 \uad6c\uc870\ubb3c \ub80c\ub354\ub9c1 \ubc0f \uc778\ud130\ub799\uc158", + "norm_label": "_ui_profile_structures.md" + }, + { + "label": "_UI_Profile_Structures \u2014 \uc885\ub2e8 \uad6c\uc870\ubb3c \ub80c\ub354\ub9c1 \ubc0f \uc778\ud130\ub799\uc158", + "file_type": "document", + "source_file": "pages/B05_Profile/frontend/_UI_Profile_Structures.md", + "source_location": "L9", + "_origin": "ast", + "id": "pages_b05_profile_frontend_ui_profile_structures_ui_profile_structures_\uc885\ub2e8_\uad6c\uc870\ubb3c_\ub80c\ub354\ub9c1_\ubc0f_\uc778\ud130\ub799\uc158", + "community": 71, + "community_name": "_UI_Profile_Structures \u2014 \uc885\ub2e8 \uad6c\uc870\ubb3c \ub80c\ub354\ub9c1 \ubc0f \uc778\ud130\ub799\uc158", + "norm_label": "_ui_profile_structures \u2014 \u110c\u1169\u11bc\u1103\u1161\u11ab \u1100\u116e\u110c\u1169\u1106\u116e\u11af \u1105\u1166\u11ab\u1103\u1165\u1105\u1175\u11bc \u1106\u1175\u11be \u110b\u1175\u11ab\u1110\u1165\u1105\u1162\u11a8\u1109\u1167\u11ab" + }, + { + "label": "1. \uac1c\uc694 \ubc0f \uc5ed\ud560", + "file_type": "document", + "source_file": "pages/B05_Profile/frontend/_UI_Profile_Structures.md", + "source_location": "L11", + "_origin": "ast", + "id": "pages_b05_profile_frontend_ui_profile_structures_1_\uac1c\uc694_\ubc0f_\uc5ed\ud560", + "community": 71, + "community_name": "_UI_Profile_Structures \u2014 \uc885\ub2e8 \uad6c\uc870\ubb3c \ub80c\ub354\ub9c1 \ubc0f \uc778\ud130\ub799\uc158", + "norm_label": "1. \u1100\u1162\u110b\u116d \u1106\u1175\u11be \u110b\u1167\u11a8\u1112\u1161\u11af" + }, + { + "label": "2. \uc8fc\uc694 \uae30\ub2a5 \ubc0f \ud568\uc218", + "file_type": "document", + "source_file": "pages/B05_Profile/frontend/_UI_Profile_Structures.md", + "source_location": "L15", + "_origin": "ast", + "id": "pages_b05_profile_frontend_ui_profile_structures_2_\uc8fc\uc694_\uae30\ub2a5_\ubc0f_\ud568\uc218", + "community": 71, + "community_name": "_UI_Profile_Structures \u2014 \uc885\ub2e8 \uad6c\uc870\ubb3c \ub80c\ub354\ub9c1 \ubc0f \uc778\ud130\ub799\uc158", + "norm_label": "2. \u110c\u116e\u110b\u116d \u1100\u1175\u1102\u1173\u11bc \u1106\u1175\u11be \u1112\u1161\u11b7\u1109\u116e" + }, + { + "label": "3. \uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/B05_Profile/frontend/_UI_Profile_Structures.md", + "source_location": "L23", + "_origin": "ast", + "id": "pages_b05_profile_frontend_ui_profile_structures_3_\uc758\uc874\uc131", + "community": 71, + "community_name": "_UI_Profile_Structures \u2014 \uc885\ub2e8 \uad6c\uc870\ubb3c \ub80c\ub354\ub9c1 \ubc0f \uc778\ud130\ub799\uc158", + "norm_label": "3. \u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "_UI_Selection.md", + "file_type": "document", + "source_file": "pages/B05_Profile/frontend/_UI_Selection.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b05_profile_frontend_ui_selection", + "community": 72, + "community_name": "_UI_Selection \u2014 \ubc30\uc218/\uad6c\uc870\ubb3c 3\uc790 \uc120\ud0dd \ub3d9\uae30\ud654", + "norm_label": "_ui_selection.md" + }, + { + "label": "_UI_Selection \u2014 \ubc30\uc218/\uad6c\uc870\ubb3c 3\uc790 \uc120\ud0dd \ub3d9\uae30\ud654", + "file_type": "document", + "source_file": "pages/B05_Profile/frontend/_UI_Selection.md", + "source_location": "L9", + "_origin": "ast", + "id": "pages_b05_profile_frontend_ui_selection_ui_selection_\ubc30\uc218_\uad6c\uc870\ubb3c_3\uc790_\uc120\ud0dd_\ub3d9\uae30\ud654", + "community": 72, + "community_name": "_UI_Selection \u2014 \ubc30\uc218/\uad6c\uc870\ubb3c 3\uc790 \uc120\ud0dd \ub3d9\uae30\ud654", + "norm_label": "_ui_selection \u2014 \u1107\u1162\u1109\u116e/\u1100\u116e\u110c\u1169\u1106\u116e\u11af 3\u110c\u1161 \u1109\u1165\u11ab\u1110\u1162\u11a8 \u1103\u1169\u11bc\u1100\u1175\u1112\u116a" + }, + { + "label": "1. \uac1c\uc694 \ubc0f \uc5ed\ud560", + "file_type": "document", + "source_file": "pages/B05_Profile/frontend/_UI_Selection.md", + "source_location": "L11", + "_origin": "ast", + "id": "pages_b05_profile_frontend_ui_selection_1_\uac1c\uc694_\ubc0f_\uc5ed\ud560", + "community": 72, + "community_name": "_UI_Selection \u2014 \ubc30\uc218/\uad6c\uc870\ubb3c 3\uc790 \uc120\ud0dd \ub3d9\uae30\ud654", + "norm_label": "1. \u1100\u1162\u110b\u116d \u1106\u1175\u11be \u110b\u1167\u11a8\u1112\u1161\u11af" + }, + { + "label": "2. \uc8fc\uc694 \uae30\ub2a5 \ubc0f \ud568\uc218", + "file_type": "document", + "source_file": "pages/B05_Profile/frontend/_UI_Selection.md", + "source_location": "L15", + "_origin": "ast", + "id": "pages_b05_profile_frontend_ui_selection_2_\uc8fc\uc694_\uae30\ub2a5_\ubc0f_\ud568\uc218", + "community": 72, + "community_name": "_UI_Selection \u2014 \ubc30\uc218/\uad6c\uc870\ubb3c 3\uc790 \uc120\ud0dd \ub3d9\uae30\ud654", + "norm_label": "2. \u110c\u116e\u110b\u116d \u1100\u1175\u1102\u1173\u11bc \u1106\u1175\u11be \u1112\u1161\u11b7\u1109\u116e" + }, + { + "label": "3. \uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/B05_Profile/frontend/_UI_Selection.md", + "source_location": "L22", + "_origin": "ast", + "id": "pages_b05_profile_frontend_ui_selection_3_\uc758\uc874\uc131", + "community": 72, + "community_name": "_UI_Selection \u2014 \ubc30\uc218/\uad6c\uc870\ubb3c 3\uc790 \uc120\ud0dd \ub3d9\uae30\ud654", + "norm_label": "3. \u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "B06_api.md", + "file_type": "document", + "source_file": "pages/B06_Section/B06_api.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b06_section_b06_api", + "community": 152, + "community_name": "B06_api.md", + "norm_label": "b06_api.md" + }, + { + "label": "B06_Section \u2014 API", + "file_type": "document", + "source_file": "pages/B06_Section/B06_api.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b06_section_b06_api_b06_section_api", + "community": 152, + "community_name": "B06_api.md", + "norm_label": "b06_section \u2014 api" + }, + { + "label": "B06_backend.md", + "file_type": "document", + "source_file": "pages/B06_Section/B06_backend.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b06_section_b06_backend", + "community": 57, + "community_name": "2026-09-07 \uc644\ub8cc\u00b7\ubcf4\ub958 \uc694\uc57d", + "norm_label": "b06_backend.md" + }, + { + "label": "B06_Section \u2014 Backend", + "file_type": "document", + "source_file": "pages/B06_Section/B06_backend.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b06_section_b06_backend_b06_section_backend", + "community": 57, + "community_name": "2026-09-07 \uc644\ub8cc\u00b7\ubcf4\ub958 \uc694\uc57d", + "norm_label": "b06_section \u2014 backend" + }, + { + "label": "\uc694\uccad\u00b7\uc751\ub2f5 \ubaa8\ub378", + "file_type": "document", + "source_file": "pages/B06_Section/B06_backend.md", + "source_location": "L14", + "_origin": "ast", + "id": "pages_b06_section_b06_backend_\uc694\uccad_\uc751\ub2f5_\ubaa8\ub378", + "community": 57, + "community_name": "2026-09-07 \uc644\ub8cc\u00b7\ubcf4\ub958 \uc694\uc57d", + "norm_label": "\u110b\u116d\u110e\u1165\u11bc\u00b7\u110b\u1173\u11bc\u1103\u1161\u11b8 \u1106\u1169\u1103\u1166\u11af" + }, + { + "label": "\uacc4\uc0b0 \uc5d4\uc9c4", + "file_type": "document", + "source_file": "pages/B06_Section/B06_backend.md", + "source_location": "L24", + "_origin": "ast", + "id": "pages_b06_section_b06_backend_\uacc4\uc0b0_\uc5d4\uc9c4", + "community": 57, + "community_name": "2026-09-07 \uc644\ub8cc\u00b7\ubcf4\ub958 \uc694\uc57d", + "norm_label": "\u1100\u1168\u1109\u1161\u11ab \u110b\u1166\u11ab\u110c\u1175\u11ab" + }, + { + "label": "\ub77c\uc6b0\ud130\u00b7workflow (\uc870\ud68c, \ud655\uc815, \ud0c0 \ud504\ub85c\uc81d\ud2b8 \ubd88\ub7ec\uc624\uae30 \ubc0f \uc7ac\uc0dd\uc131)", + "file_type": "document", + "source_file": "pages/B06_Section/B06_backend.md", + "source_location": "L34", + "_origin": "ast", + "id": "pages_b06_section_b06_backend_\ub77c\uc6b0\ud130_workflow_\uc870\ud68c_\ud655\uc815_\ud0c0_\ud504\ub85c\uc81d\ud2b8_\ubd88\ub7ec\uc624\uae30_\ubc0f_\uc7ac\uc0dd\uc131", + "community": 57, + "community_name": "2026-09-07 \uc644\ub8cc\u00b7\ubcf4\ub958 \uc694\uc57d", + "norm_label": "\u1105\u1161\u110b\u116e\u1110\u1165\u00b7workflow (\u110c\u1169\u1112\u116c, \u1112\u116a\u11a8\u110c\u1165\u11bc, \u1110\u1161 \u1111\u1173\u1105\u1169\u110c\u1166\u11a8\u1110\u1173 \u1107\u116e\u11af\u1105\u1165\u110b\u1169\u1100\u1175 \u1106\u1175\u11be \u110c\u1162\u1109\u1162\u11bc\u1109\u1165\u11bc)" + }, + { + "label": "\ub370\uc774\ud130 \uc601\uad6c \uc800\uc7a5 \ubc0f \ud658\uacbd\uc124\uc815", + "file_type": "document", + "source_file": "pages/B06_Section/B06_backend.md", + "source_location": "L47", + "_origin": "ast", + "id": "pages_b06_section_b06_backend_\ub370\uc774\ud130_\uc601\uad6c_\uc800\uc7a5_\ubc0f_\ud658\uacbd\uc124\uc815", + "community": 57, + "community_name": "2026-09-07 \uc644\ub8cc\u00b7\ubcf4\ub958 \uc694\uc57d", + "norm_label": "\u1103\u1166\u110b\u1175\u1110\u1165 \u110b\u1167\u11bc\u1100\u116e \u110c\u1165\u110c\u1161\u11bc \u1106\u1175\u11be \u1112\u116a\u11ab\u1100\u1167\u11bc\u1109\u1165\u11af\u110c\u1165\u11bc" + }, + { + "label": "B06_cross_design_ui_2026_09.md", + "file_type": "document", + "source_file": "pages/B06_Section/B06_cross_design_ui_2026_09.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b06_section_b06_cross_design_ui_2026_09", + "community": 168, + "community_name": "B06 \ud6a1\ub2e8 \uad00 \ud615\uc0c1\u00b7\uc720\ud1a0\uace1\uc120 \ud6c4\uc18d", + "norm_label": "b06_cross_design_ui_2026_09.md" + }, + { + "label": "B06 \ud6a1\ub2e8 \uacc4\uc0b0 \ubbf8\ub7ec\u00b7\uce74\ub4dc \ud45c\uae30", + "file_type": "document", + "source_file": "pages/B06_Section/B06_cross_design_ui_2026_09.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b06_section_b06_cross_design_ui_2026_09_b06_\ud6a1\ub2e8_\uacc4\uc0b0_\ubbf8\ub7ec_\uce74\ub4dc_\ud45c\uae30", + "community": 168, + "community_name": "B06 \ud6a1\ub2e8 \uad00 \ud615\uc0c1\u00b7\uc720\ud1a0\uace1\uc120 \ud6c4\uc18d", + "norm_label": "b06 \u1112\u116c\u11bc\u1103\u1161\u11ab \u1100\u1168\u1109\u1161\u11ab \u1106\u1175\u1105\u1165\u00b7\u110f\u1161\u1103\u1173 \u1111\u116d\u1100\u1175" + }, + { + "label": "\ud504\ub860\ud2b8 \uacc4\uc0b0 \ubbf8\ub7ec", + "file_type": "document", + "source_file": "pages/B06_Section/B06_cross_design_ui_2026_09.md", + "source_location": "L12", + "_origin": "ast", + "id": "pages_b06_section_b06_cross_design_ui_2026_09_\ud504\ub860\ud2b8_\uacc4\uc0b0_\ubbf8\ub7ec", + "community": 168, + "community_name": "B06 \ud6a1\ub2e8 \uad00 \ud615\uc0c1\u00b7\uc720\ud1a0\uace1\uc120 \ud6c4\uc18d", + "norm_label": "\u1111\u1173\u1105\u1169\u11ab\u1110\u1173 \u1100\u1168\u1109\u1161\u11ab \u1106\u1175\u1105\u1165" + }, + { + "label": "\ud6a1\ub2e8 \uce74\ub4dc \ud45c\uae30", + "file_type": "document", + "source_file": "pages/B06_Section/B06_cross_design_ui_2026_09.md", + "source_location": "L23", + "_origin": "ast", + "id": "pages_b06_section_b06_cross_design_ui_2026_09_\ud6a1\ub2e8_\uce74\ub4dc_\ud45c\uae30", + "community": 168, + "community_name": "B06 \ud6a1\ub2e8 \uad00 \ud615\uc0c1\u00b7\uc720\ud1a0\uace1\uc120 \ud6c4\uc18d", + "norm_label": "\u1112\u116c\u11bc\u1103\u1161\u11ab \u110f\u1161\u1103\u1173 \u1111\u116d\u1100\u1175" + }, + { + "label": "B06_culvert_basin_multitier.md", + "file_type": "document", + "source_file": "pages/B06_Section/B06_culvert_basin_multitier.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b06_section_b06_culvert_basin_multitier", + "community": 39, + "community_name": "B06 \uc9d1\uc218\uc815\u00b7\ub2e4\ub2e8 \uae30\uc2ad\ub9c9\uc774", + "norm_label": "b06_culvert_basin_multitier.md" + }, + { + "label": "B06 \uc9d1\uc218\uc815\u00b7\ub2e4\ub2e8 \uae30\uc2ad\ub9c9\uc774", + "file_type": "document", + "source_file": "pages/B06_Section/B06_culvert_basin_multitier.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b06_section_b06_culvert_basin_multitier_b06_\uc9d1\uc218\uc815_\ub2e4\ub2e8_\uae30\uc2ad\ub9c9\uc774", + "community": 39, + "community_name": "B06 \uc9d1\uc218\uc815\u00b7\ub2e4\ub2e8 \uae30\uc2ad\ub9c9\uc774", + "norm_label": "b06 \u110c\u1175\u11b8\u1109\u116e\u110c\u1165\u11bc\u00b7\u1103\u1161\u1103\u1161\u11ab \u1100\u1175\u1109\u1173\u11b0\u1106\u1161\u11a8\u110b\u1175" + }, + { + "label": "\uc720\uc785 \uad6c\uc870\ubb3c", + "file_type": "document", + "source_file": "pages/B06_Section/B06_culvert_basin_multitier.md", + "source_location": "L12", + "_origin": "ast", + "id": "pages_b06_section_b06_culvert_basin_multitier_\uc720\uc785_\uad6c\uc870\ubb3c", + "community": 39, + "community_name": "B06 \uc9d1\uc218\uc815\u00b7\ub2e4\ub2e8 \uae30\uc2ad\ub9c9\uc774", + "norm_label": "\u110b\u1172\u110b\u1175\u11b8 \u1100\u116e\u110c\u1169\u1106\u116e\u11af" + }, + { + "label": "\uc9d1\uc218\uc815 \uacc4\ub958\uce21 \uc131\ud1a0\ubd80", + "file_type": "document", + "source_file": "pages/B06_Section/B06_culvert_basin_multitier.md", + "source_location": "L27", + "_origin": "ast", + "id": "pages_b06_section_b06_culvert_basin_multitier_\uc9d1\uc218\uc815_\uacc4\ub958\uce21_\uc131\ud1a0\ubd80", + "community": 39, + "community_name": "B06 \uc9d1\uc218\uc815\u00b7\ub2e4\ub2e8 \uae30\uc2ad\ub9c9\uc774", + "norm_label": "\u110c\u1175\u11b8\u1109\u116e\u110c\u1165\u11bc \u1100\u1168\u1105\u1172\u110e\u1173\u11a8 \u1109\u1165\u11bc\u1110\u1169\u1107\u116e" + }, + { + "label": "\uc720\ucd9c \uc131\ud1a0\ubd80\u00b7\ub2e4\ub2e8", + "file_type": "document", + "source_file": "pages/B06_Section/B06_culvert_basin_multitier.md", + "source_location": "L33", + "_origin": "ast", + "id": "pages_b06_section_b06_culvert_basin_multitier_\uc720\ucd9c_\uc131\ud1a0\ubd80_\ub2e4\ub2e8", + "community": 39, + "community_name": "B06 \uc9d1\uc218\uc815\u00b7\ub2e4\ub2e8 \uae30\uc2ad\ub9c9\uc774", + "norm_label": "\u110b\u1172\u110e\u116e\u11af \u1109\u1165\u11bc\u1110\u1169\u1107\u116e\u00b7\u1103\u1161\u1103\u1161\u11ab" + }, + { + "label": "\uc790\uccb4\uac80\uc99d \uae30\ub85d", + "file_type": "document", + "source_file": "pages/B06_Section/B06_culvert_basin_multitier.md", + "source_location": "L45", + "_origin": "ast", + "id": "pages_b06_section_b06_culvert_basin_multitier_\uc790\uccb4\uac80\uc99d_\uae30\ub85d", + "community": 39, + "community_name": "B06 \uc9d1\uc218\uc815\u00b7\ub2e4\ub2e8 \uae30\uc2ad\ub9c9\uc774", + "norm_label": "\u110c\u1161\u110e\u1166\u1100\u1165\u11b7\u110c\u1173\u11bc \u1100\u1175\u1105\u1169\u11a8" + }, + { + "label": "\ubbf8\uacb0", + "file_type": "document", + "source_file": "pages/B06_Section/B06_culvert_basin_multitier.md", + "source_location": "L57", + "_origin": "ast", + "id": "pages_b06_section_b06_culvert_basin_multitier_\ubbf8\uacb0", + "community": 39, + "community_name": "B06 \uc9d1\uc218\uc815\u00b7\ub2e4\ub2e8 \uae30\uc2ad\ub9c9\uc774", + "norm_label": "\u1106\u1175\u1100\u1167\u11af" + }, + { + "label": "B06_culvert_controls.md", + "file_type": "document", + "source_file": "pages/B06_Section/B06_culvert_controls.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b06_section_b06_culvert_controls", + "community": 28, + "community_name": "B06 \ubc30\uc218\uad00 \uad6c\uc870\ubb3c \uc870\uc791\u00b7\ud45c\uc2dc", + "norm_label": "b06_culvert_controls.md" + }, + { + "label": "B06 \ubc30\uc218\uad00 \uad6c\uc870\ubb3c \uc870\uc791\u00b7\ud45c\uc2dc", + "file_type": "document", + "source_file": "pages/B06_Section/B06_culvert_controls.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b06_section_b06_culvert_controls_b06_\ubc30\uc218\uad00_\uad6c\uc870\ubb3c_\uc870\uc791_\ud45c\uc2dc", + "community": 28, + "community_name": "B06 \ubc30\uc218\uad00 \uad6c\uc870\ubb3c \uc870\uc791\u00b7\ud45c\uc2dc", + "norm_label": "b06 \u1107\u1162\u1109\u116e\u1100\u116a\u11ab \u1100\u116e\u110c\u1169\u1106\u116e\u11af \u110c\u1169\u110c\u1161\u11a8\u00b7\u1111\u116d\u1109\u1175" + }, + { + "label": "4\ucd95 \uc870\uc791\uacfc \uc7ac\uc9c8", + "file_type": "document", + "source_file": "pages/B06_Section/B06_culvert_controls.md", + "source_location": "L12", + "_origin": "ast", + "id": "pages_b06_section_b06_culvert_controls_4\ucd95_\uc870\uc791\uacfc_\uc7ac\uc9c8", + "community": 28, + "community_name": "B06 \ubc30\uc218\uad00 \uad6c\uc870\ubb3c \uc870\uc791\u00b7\ud45c\uc2dc", + "norm_label": "4\u110e\u116e\u11a8 \u110c\u1169\u110c\u1161\u11a8\u1100\u116a \u110c\u1162\u110c\u1175\u11af" + }, + { + "label": "\uc870\uc815\ucc3d", + "file_type": "document", + "source_file": "pages/B06_Section/B06_culvert_controls.md", + "source_location": "L23", + "_origin": "ast", + "id": "pages_b06_section_b06_culvert_controls_\uc870\uc815\ucc3d", + "community": 28, + "community_name": "B06 \ubc30\uc218\uad00 \uad6c\uc870\ubb3c \uc870\uc791\u00b7\ud45c\uc2dc", + "norm_label": "\u110c\u1169\u110c\u1165\u11bc\u110e\u1161\u11bc" + }, + { + "label": "\uc9d1\uc218\uc815 9\ud0a4 \uc870\uc791", + "file_type": "document", + "source_file": "pages/B06_Section/B06_culvert_controls.md", + "source_location": "L32", + "_origin": "ast", + "id": "pages_b06_section_b06_culvert_controls_\uc9d1\uc218\uc815_9\ud0a4_\uc870\uc791", + "community": 28, + "community_name": "B06 \ubc30\uc218\uad00 \uad6c\uc870\ubb3c \uc870\uc791\u00b7\ud45c\uc2dc", + "norm_label": "\u110c\u1175\u11b8\u1109\u116e\u110c\u1165\u11bc 9\u110f\u1175 \u110c\u1169\u110c\u1161\u11a8" + }, + { + "label": "\uacc4\uc0b0\u00b7\ubcf4\uae30 \ubd84\ub9ac", + "file_type": "document", + "source_file": "pages/B06_Section/B06_culvert_controls.md", + "source_location": "L43", + "_origin": "ast", + "id": "pages_b06_section_b06_culvert_controls_\uacc4\uc0b0_\ubcf4\uae30_\ubd84\ub9ac", + "community": 28, + "community_name": "B06 \ubc30\uc218\uad00 \uad6c\uc870\ubb3c \uc870\uc791\u00b7\ud45c\uc2dc", + "norm_label": "\u1100\u1168\u1109\u1161\u11ab\u00b7\u1107\u1169\u1100\u1175 \u1107\u116e\u11ab\u1105\u1175" + }, + { + "label": "\uc790\uccb4\uac80\uc99d \uae30\ub85d", + "file_type": "document", + "source_file": "pages/B06_Section/B06_culvert_controls.md", + "source_location": "L50", + "_origin": "ast", + "id": "pages_b06_section_b06_culvert_controls_\uc790\uccb4\uac80\uc99d_\uae30\ub85d", + "community": 28, + "community_name": "B06 \ubc30\uc218\uad00 \uad6c\uc870\ubb3c \uc870\uc791\u00b7\ud45c\uc2dc", + "norm_label": "\u110c\u1161\u110e\u1166\u1100\u1165\u11b7\u110c\u1173\u11bc \u1100\u1175\u1105\u1169\u11a8" + }, + { + "label": "\uad6c\ud604 \ud30c\uc77c", + "file_type": "document", + "source_file": "pages/B06_Section/B06_culvert_controls.md", + "source_location": "L61", + "_origin": "ast", + "id": "pages_b06_section_b06_culvert_controls_\uad6c\ud604_\ud30c\uc77c", + "community": 28, + "community_name": "B06 \ubc30\uc218\uad00 \uad6c\uc870\ubb3c \uc870\uc791\u00b7\ud45c\uc2dc", + "norm_label": "\u1100\u116e\u1112\u1167\u11ab \u1111\u1161\u110b\u1175\u11af" + }, + { + "label": "B06_culvert_geometry_redesign.md", + "file_type": "document", + "source_file": "pages/B06_Section/B06_culvert_geometry_redesign.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b06_section_b06_culvert_geometry_redesign", + "community": 40, + "community_name": "B06 \ubc30\uc218\uad00 \uad6c\uc870\ubb3c \uae30\ud558\u00b7\uc870\uc791 \uccb4\uacc4", + "norm_label": "b06_culvert_geometry_redesign.md" + }, + { + "label": "B06 \ubc30\uc218\uad00 \uad6c\uc870\ubb3c \uae30\ud558\u00b7\uc870\uc791 \uccb4\uacc4", + "file_type": "document", + "source_file": "pages/B06_Section/B06_culvert_geometry_redesign.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b06_section_b06_culvert_geometry_redesign_b06_\ubc30\uc218\uad00_\uad6c\uc870\ubb3c_\uae30\ud558_\uc870\uc791_\uccb4\uacc4", + "community": 40, + "community_name": "B06 \ubc30\uc218\uad00 \uad6c\uc870\ubb3c \uae30\ud558\u00b7\uc870\uc791 \uccb4\uacc4", + "norm_label": "b06 \u1107\u1162\u1109\u116e\u1100\u116a\u11ab \u1100\u116e\u110c\u1169\u1106\u116e\u11af \u1100\u1175\u1112\u1161\u00b7\u110c\u1169\u110c\u1161\u11a8 \u110e\u1166\u1100\u1168" + }, + { + "label": "\uae30\uc2ad\ub9c9\uc774\u00b7\uad00 \ud575\uc2ec \uaddc\uce59", + "file_type": "document", + "source_file": "pages/B06_Section/B06_culvert_geometry_redesign.md", + "source_location": "L14", + "_origin": "ast", + "id": "pages_b06_section_b06_culvert_geometry_redesign_\uae30\uc2ad\ub9c9\uc774_\uad00_\ud575\uc2ec_\uaddc\uce59", + "community": 40, + "community_name": "B06 \ubc30\uc218\uad00 \uad6c\uc870\ubb3c \uae30\ud558\u00b7\uc870\uc791 \uccb4\uacc4", + "norm_label": "\u1100\u1175\u1109\u1173\u11b0\u1106\u1161\u11a8\u110b\u1175\u00b7\u1100\u116a\u11ab \u1112\u1162\u11a8\u1109\u1175\u11b7 \u1100\u1172\u110e\u1175\u11a8" + }, + { + "label": "\uc811\uc18d\uc120", + "file_type": "document", + "source_file": "pages/B06_Section/B06_culvert_geometry_redesign.md", + "source_location": "L27", + "_origin": "ast", + "id": "pages_b06_section_b06_culvert_geometry_redesign_\uc811\uc18d\uc120", + "community": 40, + "community_name": "B06 \ubc30\uc218\uad00 \uad6c\uc870\ubb3c \uae30\ud558\u00b7\uc870\uc791 \uccb4\uacc4", + "norm_label": "\u110c\u1165\u11b8\u1109\u1169\u11a8\u1109\u1165\u11ab" + }, + { + "label": "\uc124\uacc4\uc120 \ud2b8\ub9bc", + "file_type": "document", + "source_file": "pages/B06_Section/B06_culvert_geometry_redesign.md", + "source_location": "L40", + "_origin": "ast", + "id": "pages_b06_section_b06_culvert_geometry_redesign_\uc124\uacc4\uc120_\ud2b8\ub9bc", + "community": 40, + "community_name": "B06 \ubc30\uc218\uad00 \uad6c\uc870\ubb3c \uae30\ud558\u00b7\uc870\uc791 \uccb4\uacc4", + "norm_label": "\u1109\u1165\u11af\u1100\u1168\u1109\u1165\u11ab \u1110\u1173\u1105\u1175\u11b7" + }, + { + "label": "\uad6c\ud604 \ud30c\uc77c", + "file_type": "document", + "source_file": "pages/B06_Section/B06_culvert_geometry_redesign.md", + "source_location": "L44", + "_origin": "ast", + "id": "pages_b06_section_b06_culvert_geometry_redesign_\uad6c\ud604_\ud30c\uc77c", + "community": 40, + "community_name": "B06 \ubc30\uc218\uad00 \uad6c\uc870\ubb3c \uae30\ud558\u00b7\uc870\uc791 \uccb4\uacc4", + "norm_label": "\u1100\u116e\u1112\u1167\u11ab \u1111\u1161\u110b\u1175\u11af" + }, + { + "label": "\uac80\uc99d \uc0c1\ud0dc", + "file_type": "document", + "source_file": "pages/B06_Section/B06_culvert_geometry_redesign.md", + "source_location": "L55", + "_origin": "ast", + "id": "pages_b06_section_b06_culvert_geometry_redesign_\uac80\uc99d_\uc0c1\ud0dc", + "community": 40, + "community_name": "B06 \ubc30\uc218\uad00 \uad6c\uc870\ubb3c \uae30\ud558\u00b7\uc870\uc791 \uccb4\uacc4", + "norm_label": "\u1100\u1165\u11b7\u110c\u1173\u11bc \u1109\u1161\u11bc\u1110\u1162" + }, + { + "label": "B06_culvert_link_trim.md", + "file_type": "document", + "source_file": "pages/B06_Section/B06_culvert_link_trim.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b06_section_b06_culvert_link_trim", + "community": 73, + "community_name": "B06 \uc778\uc811 \uce21\uc810 \uad6c\uc870\ubb3c \ud2b8\ub9bc \uc815\ub9ac", + "norm_label": "b06_culvert_link_trim.md" + }, + { + "label": "B06 \uc778\uc811 \uce21\uc810 \uad6c\uc870\ubb3c \ud2b8\ub9bc \uc815\ub9ac", + "file_type": "document", + "source_file": "pages/B06_Section/B06_culvert_link_trim.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b06_section_b06_culvert_link_trim_b06_\uc778\uc811_\uce21\uc810_\uad6c\uc870\ubb3c_\ud2b8\ub9bc_\uc815\ub9ac", + "community": 73, + "community_name": "B06 \uc778\uc811 \uce21\uc810 \uad6c\uc870\ubb3c \ud2b8\ub9bc \uc815\ub9ac", + "norm_label": "b06 \u110b\u1175\u11ab\u110c\u1165\u11b8 \u110e\u1173\u11a8\u110c\u1165\u11b7 \u1100\u116e\u110c\u1169\u1106\u116e\u11af \u1110\u1173\u1105\u1175\u11b7 \u110c\u1165\u11bc\u1105\u1175" + }, + { + "label": "\ucc98\ub9ac \ud56d\ubaa9", + "file_type": "document", + "source_file": "pages/B06_Section/B06_culvert_link_trim.md", + "source_location": "L14", + "_origin": "ast", + "id": "pages_b06_section_b06_culvert_link_trim_\ucc98\ub9ac_\ud56d\ubaa9", + "community": 73, + "community_name": "B06 \uc778\uc811 \uce21\uc810 \uad6c\uc870\ubb3c \ud2b8\ub9bc \uc815\ub9ac", + "norm_label": "\u110e\u1165\u1105\u1175 \u1112\u1161\u11bc\u1106\u1169\u11a8" + }, + { + "label": "\uc6d0\uc778\uacfc \uacbd\uacc4", + "file_type": "document", + "source_file": "pages/B06_Section/B06_culvert_link_trim.md", + "source_location": "L24", + "_origin": "ast", + "id": "pages_b06_section_b06_culvert_link_trim_\uc6d0\uc778\uacfc_\uacbd\uacc4", + "community": 73, + "community_name": "B06 \uc778\uc811 \uce21\uc810 \uad6c\uc870\ubb3c \ud2b8\ub9bc \uc815\ub9ac", + "norm_label": "\u110b\u116f\u11ab\u110b\u1175\u11ab\u1100\u116a \u1100\u1167\u11bc\u1100\u1168" + }, + { + "label": "\uac80\uc99d", + "file_type": "document", + "source_file": "pages/B06_Section/B06_culvert_link_trim.md", + "source_location": "L30", + "_origin": "ast", + "id": "pages_b06_section_b06_culvert_link_trim_\uac80\uc99d", + "community": 73, + "community_name": "B06 \uc778\uc811 \uce21\uc810 \uad6c\uc870\ubb3c \ud2b8\ub9bc \uc815\ub9ac", + "norm_label": "\u1100\u1165\u11b7\u110c\u1173\u11bc" + }, + { + "label": "B06_culvert_set.md", + "file_type": "document", + "source_file": "pages/B06_Section/B06_culvert_set.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b06_section_b06_culvert_set", + "community": 41, + "community_name": "B06 \ubc30\uc218\uad00 \ud6a1\ub2e8\ub3c4 \uc138\ud2b8", + "norm_label": "b06_culvert_set.md" + }, + { + "label": "B06 \ubc30\uc218\uad00 \ud6a1\ub2e8\ub3c4 \uc138\ud2b8", + "file_type": "document", + "source_file": "pages/B06_Section/B06_culvert_set.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b06_section_b06_culvert_set_b06_\ubc30\uc218\uad00_\ud6a1\ub2e8\ub3c4_\uc138\ud2b8", + "community": 41, + "community_name": "B06 \ubc30\uc218\uad00 \ud6a1\ub2e8\ub3c4 \uc138\ud2b8", + "norm_label": "b06 \u1107\u1162\u1109\u116e\u1100\u116a\u11ab \u1112\u116c\u11bc\u1103\u1161\u11ab\u1103\u1169 \u1109\u1166\u1110\u1173" + }, + { + "label": "\uc785\ub825\u00b7\ud310\uc815", + "file_type": "document", + "source_file": "pages/B06_Section/B06_culvert_set.md", + "source_location": "L16", + "_origin": "ast", + "id": "pages_b06_section_b06_culvert_set_\uc785\ub825_\ud310\uc815", + "community": 41, + "community_name": "B06 \ubc30\uc218\uad00 \ud6a1\ub2e8\ub3c4 \uc138\ud2b8", + "norm_label": "\u110b\u1175\u11b8\u1105\u1167\u11a8\u00b7\u1111\u1161\u11ab\u110c\u1165\u11bc" + }, + { + "label": "\ud615\uc0c1\u00b7\ud45c\uc2dc \uc21c\uc11c (2026-08-20 \uc2a4\ub0c5\uc0f7)", + "file_type": "document", + "source_file": "pages/B06_Section/B06_culvert_set.md", + "source_location": "L27", + "_origin": "ast", + "id": "pages_b06_section_b06_culvert_set_\ud615\uc0c1_\ud45c\uc2dc_\uc21c\uc11c_2026_08_20_\uc2a4\ub0c5\uc0f7", + "community": 41, + "community_name": "B06 \ubc30\uc218\uad00 \ud6a1\ub2e8\ub3c4 \uc138\ud2b8", + "norm_label": "\u1112\u1167\u11bc\u1109\u1161\u11bc\u00b7\u1111\u116d\u1109\u1175 \u1109\u116e\u11ab\u1109\u1165 (2026-08-20 \u1109\u1173\u1102\u1162\u11b8\u1109\u1163\u11ba)" + }, + { + "label": "\uad6c\ud604 \ud56d\ubaa9", + "file_type": "document", + "source_file": "pages/B06_Section/B06_culvert_set.md", + "source_location": "L37", + "_origin": "ast", + "id": "pages_b06_section_b06_culvert_set_\uad6c\ud604_\ud56d\ubaa9", + "community": 41, + "community_name": "B06 \ubc30\uc218\uad00 \ud6a1\ub2e8\ub3c4 \uc138\ud2b8", + "norm_label": "\u1100\u116e\u1112\u1167\u11ab \u1112\u1161\u11bc\u1106\u1169\u11a8" + }, + { + "label": "\uacc4\ud68d\uc120 \uaddc\uce59", + "file_type": "document", + "source_file": "pages/B06_Section/B06_culvert_set.md", + "source_location": "L51", + "_origin": "ast", + "id": "pages_b06_section_b06_culvert_set_\uacc4\ud68d\uc120_\uaddc\uce59", + "community": 41, + "community_name": "B06 \ubc30\uc218\uad00 \ud6a1\ub2e8\ub3c4 \uc138\ud2b8", + "norm_label": "\u1100\u1168\u1112\u116c\u11a8\u1109\u1165\u11ab \u1100\u1172\u110e\u1175\u11a8" + }, + { + "label": "\uac80\uc99d \uadfc\uac70\uc640 \ud6c4\uc18d", + "file_type": "document", + "source_file": "pages/B06_Section/B06_culvert_set.md", + "source_location": "L55", + "_origin": "ast", + "id": "pages_b06_section_b06_culvert_set_\uac80\uc99d_\uadfc\uac70\uc640_\ud6c4\uc18d", + "community": 41, + "community_name": "B06 \ubc30\uc218\uad00 \ud6a1\ub2e8\ub3c4 \uc138\ud2b8", + "norm_label": "\u1100\u1165\u11b7\u110c\u1173\u11bc \u1100\u1173\u11ab\u1100\u1165\u110b\u116a \u1112\u116e\u1109\u1169\u11a8" + }, + { + "label": "B06_db.md", + "file_type": "document", + "source_file": "pages/B06_Section/B06_db.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b06_section_b06_db", + "community": 107, + "community_name": "B06_Section \u2014 DB \uc0ac\uc6a9 \uad00\uacc4", + "norm_label": "b06_db.md" + }, + { + "label": "B06_Section \u2014 DB \uc0ac\uc6a9 \uad00\uacc4", + "file_type": "document", + "source_file": "pages/B06_Section/B06_db.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b06_section_b06_db_b06_section_db_\uc0ac\uc6a9_\uad00\uacc4", + "community": 107, + "community_name": "B06_Section \u2014 DB \uc0ac\uc6a9 \uad00\uacc4", + "norm_label": "b06_section \u2014 db \u1109\u1161\u110b\u116d\u11bc \u1100\u116a\u11ab\u1100\u1168" + }, + { + "label": "Repository \ud568\uc218", + "file_type": "document", + "source_file": "pages/B06_Section/B06_db.md", + "source_location": "L19", + "_origin": "ast", + "id": "pages_b06_section_b06_db_repository_\ud568\uc218", + "community": 107, + "community_name": "B06_Section \u2014 DB \uc0ac\uc6a9 \uad00\uacc4", + "norm_label": "repository \u1112\u1161\u11b7\u1109\u116e" + }, + { + "label": "\ud30c\uc77c \uacbd\ub85c", + "file_type": "document", + "source_file": "pages/B06_Section/B06_db.md", + "source_location": "L29", + "_origin": "ast", + "id": "pages_b06_section_b06_db_\ud30c\uc77c_\uacbd\ub85c", + "community": 107, + "community_name": "B06_Section \u2014 DB \uc0ac\uc6a9 \uad00\uacc4", + "norm_label": "\u1111\u1161\u110b\u1175\u11af \u1100\u1167\u11bc\u1105\u1169" + }, + { + "label": "B06_dependencies.md", + "file_type": "document", + "source_file": "pages/B06_Section/B06_dependencies.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b06_section_b06_dependencies", + "community": 144, + "community_name": "B06_Section \u2014 Dependencies", + "norm_label": "b06_dependencies.md" + }, + { + "label": "B06_Section \u2014 Dependencies", + "file_type": "document", + "source_file": "pages/B06_Section/B06_dependencies.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b06_section_b06_dependencies_b06_section_dependencies", + "community": 144, + "community_name": "B06_Section \u2014 Dependencies", + "norm_label": "b06_section \u2014 dependencies" + }, + { + "label": "\uacf5\ud1b5 \ubaa8\ub4c8", + "file_type": "document", + "source_file": "pages/B06_Section/B06_dependencies.md", + "source_location": "L20", + "_origin": "ast", + "id": "pages_b06_section_b06_dependencies_\uacf5\ud1b5_\ubaa8\ub4c8", + "community": 144, + "community_name": "B06_Section \u2014 Dependencies", + "norm_label": "\u1100\u1169\u11bc\u1110\u1169\u11bc \u1106\u1169\u1103\u1172\u11af" + }, + { + "label": "B06_frontend.md", + "file_type": "document", + "source_file": "pages/B06_Section/B06_frontend.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b06_section_b06_frontend", + "community": 23, + "community_name": "B06_Section \u2014 Frontend", + "norm_label": "b06_frontend.md" + }, + { + "label": "B06_Section \u2014 Frontend", + "file_type": "document", + "source_file": "pages/B06_Section/B06_frontend.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b06_section_b06_frontend_b06_section_frontend", + "community": 23, + "community_name": "B06_Section \u2014 Frontend", + "norm_label": "b06_section \u2014 frontend" + }, + { + "label": "\ud30c\uc77c \uad6c\uc131", + "file_type": "document", + "source_file": "pages/B06_Section/B06_frontend.md", + "source_location": "L14", + "_origin": "ast", + "id": "pages_b06_section_b06_frontend_\ud30c\uc77c_\uad6c\uc131", + "community": 23, + "community_name": "B06_Section \u2014 Frontend", + "norm_label": "\u1111\u1161\u110b\u1175\u11af \u1100\u116e\u1109\u1165\u11bc" + }, + { + "label": "\ud654\uba74\u00b7workflow (\uc870\ud68c \ubc0f \ud655\uc815 \uc804\uc6a9)", + "file_type": "document", + "source_file": "pages/B06_Section/B06_frontend.md", + "source_location": "L39", + "_origin": "ast", + "id": "pages_b06_section_b06_frontend_\ud654\uba74_workflow_\uc870\ud68c_\ubc0f_\ud655\uc815_\uc804\uc6a9", + "community": 23, + "community_name": "B06_Section \u2014 Frontend", + "norm_label": "\u1112\u116a\u1106\u1167\u11ab\u00b7workflow (\u110c\u1169\u1112\u116c \u1106\u1175\u11be \u1112\u116a\u11a8\u110c\u1165\u11bc \u110c\u1165\u11ab\u110b\u116d\u11bc)" + }, + { + "label": "SVG \ub80c\ub354\ub7ec \ubc0f \uc720\ud2f8\ub9ac\ud2f0", + "file_type": "document", + "source_file": "pages/B06_Section/B06_frontend.md", + "source_location": "L47", + "_origin": "ast", + "id": "pages_b06_section_b06_frontend_svg_\ub80c\ub354\ub7ec_\ubc0f_\uc720\ud2f8\ub9ac\ud2f0", + "community": 23, + "community_name": "B06_Section \u2014 Frontend", + "norm_label": "svg \u1105\u1166\u11ab\u1103\u1165\u1105\u1165 \u1106\u1175\u11be \u110b\u1172\u1110\u1175\u11af\u1105\u1175\u1110\u1175" + }, + { + "label": "API \ud074\ub77c\uc774\uc5b8\ud2b8", + "file_type": "document", + "source_file": "pages/B06_Section/B06_frontend.md", + "source_location": "L58", + "_origin": "ast", + "id": "pages_b06_section_b06_frontend_api_\ud074\ub77c\uc774\uc5b8\ud2b8", + "community": 23, + "community_name": "B06_Section \u2014 Frontend", + "norm_label": "api \u110f\u1173\u11af\u1105\u1161\u110b\u1175\u110b\u1165\u11ab\u1110\u1173" + }, + { + "label": "\uc785\ub825 \uc635\uc158 (\ud45c\uc2dc \uc635\uc158 \ubc0f \ud6a1\ub2e8 \ubc18\ud3ed \uc81c\uc5b4)", + "file_type": "document", + "source_file": "pages/B06_Section/B06_frontend.md", + "source_location": "L67", + "_origin": "ast", + "id": "pages_b06_section_b06_frontend_\uc785\ub825_\uc635\uc158_\ud45c\uc2dc_\uc635\uc158_\ubc0f_\ud6a1\ub2e8_\ubc18\ud3ed_\uc81c\uc5b4", + "community": 23, + "community_name": "B06_Section \u2014 Frontend", + "norm_label": "\u110b\u1175\u11b8\u1105\u1167\u11a8 \u110b\u1169\u11b8\u1109\u1167\u11ab (\u1111\u116d\u1109\u1175 \u110b\u1169\u11b8\u1109\u1167\u11ab \u1106\u1175\u11be \u1112\u116c\u11bc\u1103\u1161\u11ab \u1107\u1161\u11ab\u1111\u1169\u11a8 \u110c\u1166\u110b\u1165)" + }, + { + "label": "UI \ud328\ub110 \ud06c\uae30 \ubc0f \ub9ac\uc0ac\uc774\uc800 \uaddc\uce59 (2026-08-02 \uc2e0\uc124)", + "file_type": "document", + "source_file": "pages/B06_Section/B06_frontend.md", + "source_location": "L78", + "_origin": "ast", + "id": "pages_b06_section_b06_frontend_ui_\ud328\ub110_\ud06c\uae30_\ubc0f_\ub9ac\uc0ac\uc774\uc800_\uaddc\uce59_2026_08_02_\uc2e0\uc124", + "community": 23, + "community_name": "B06_Section \u2014 Frontend", + "norm_label": "ui \u1111\u1162\u1102\u1165\u11af \u110f\u1173\u1100\u1175 \u1106\u1175\u11be \u1105\u1175\u1109\u1161\u110b\u1175\u110c\u1165 \u1100\u1172\u110e\u1175\u11a8 (2026-08-02 \u1109\u1175\u11ab\u1109\u1165\u11af)" + }, + { + "label": "\uae30\uc220\ubd80\ucc44 (\ud574\uacb0\ub428)", + "file_type": "document", + "source_file": "pages/B06_Section/B06_frontend.md", + "source_location": "L84", + "_origin": "ast", + "id": "pages_b06_section_b06_frontend_\uae30\uc220\ubd80\ucc44_\ud574\uacb0\ub428", + "community": 23, + "community_name": "B06_Section \u2014 Frontend", + "norm_label": "\u1100\u1175\u1109\u116e\u11af\u1107\u116e\u110e\u1162 (\u1112\u1162\u1100\u1167\u11af\u1103\u116c\u11b7)" + }, + { + "label": "2026-08-22 \ud30c\uc77c \ud55c\uacc4 \uc815\ub9ac", + "file_type": "document", + "source_file": "pages/B06_Section/B06_frontend.md", + "source_location": "L85", + "_origin": "ast", + "id": "pages_b06_section_b06_frontend_2026_08_22_\ud30c\uc77c_\ud55c\uacc4_\uc815\ub9ac", + "community": 23, + "community_name": "B06_Section \u2014 Frontend", + "norm_label": "2026-08-22 \u1111\u1161\u110b\u1175\u11af \u1112\u1161\u11ab\u1100\u1168 \u110c\u1165\u11bc\u1105\u1175" + }, + { + "label": "B06_masshaul_culvert_2026_09.md", + "file_type": "document", + "source_file": "pages/B06_Section/B06_masshaul_culvert_2026_09.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b06_section_b06_masshaul_culvert_2026_09", + "community": 159, + "community_name": "B03 \ud30c\uc77c \uc785\ub825 \ud654\uba74 \uc815\ub9ac", + "norm_label": "b06_masshaul_culvert_2026_09.md" + }, + { + "label": "B06 \ud6a1\ub2e8 \uad00 \ud615\uc0c1\u00b7\uc720\ud1a0\uace1\uc120 \ud6c4\uc18d", + "file_type": "document", + "source_file": "pages/B06_Section/B06_masshaul_culvert_2026_09.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b06_section_b06_masshaul_culvert_2026_09_b06_\ud6a1\ub2e8_\uad00_\ud615\uc0c1_\uc720\ud1a0\uace1\uc120_\ud6c4\uc18d", + "community": 159, + "community_name": "B03 \ud30c\uc77c \uc785\ub825 \ud654\uba74 \uc815\ub9ac", + "norm_label": "b06 \u1112\u116c\u11bc\u1103\u1161\u11ab \u1100\u116a\u11ab \u1112\u1167\u11bc\u1109\u1161\u11bc\u00b7\u110b\u1172\u1110\u1169\u1100\u1169\u11a8\u1109\u1165\u11ab \u1112\u116e\u1109\u1169\u11a8" + }, + { + "label": "I\ud615 \uc9d1\uc218\uc815 \uad00 \ud615\uc0c1", + "file_type": "document", + "source_file": "pages/B06_Section/B06_masshaul_culvert_2026_09.md", + "source_location": "L12", + "_origin": "ast", + "id": "pages_b06_section_b06_masshaul_culvert_2026_09_i\ud615_\uc9d1\uc218\uc815_\uad00_\ud615\uc0c1", + "community": 159, + "community_name": "B03 \ud30c\uc77c \uc785\ub825 \ud654\uba74 \uc815\ub9ac", + "norm_label": "i\u1112\u1167\u11bc \u110c\u1175\u11b8\u1109\u116e\u110c\u1165\u11bc \u1100\u116a\u11ab \u1112\u1167\u11bc\u1109\u1161\u11bc" + }, + { + "label": "\uacc4\uc0b0 \uc0c1\ud0dc\uc640 \uacbd\uace0", + "file_type": "document", + "source_file": "pages/B06_Section/B06_masshaul_culvert_2026_09.md", + "source_location": "L19", + "_origin": "ast", + "id": "pages_b06_section_b06_masshaul_culvert_2026_09_\uacc4\uc0b0_\uc0c1\ud0dc\uc640_\uacbd\uace0", + "community": 159, + "community_name": "B03 \ud30c\uc77c \uc785\ub825 \ud654\uba74 \uc815\ub9ac", + "norm_label": "\u1100\u1168\u1109\u1161\u11ab \u1109\u1161\u11bc\u1110\u1162\u110b\u116a \u1100\u1167\u11bc\u1100\u1169" + }, + { + "label": "\ud30c\uc77c \ucc45\uc784 \ubd84\ub9ac", + "file_type": "document", + "source_file": "pages/B06_Section/B06_masshaul_culvert_2026_09.md", + "source_location": "L29", + "_origin": "ast", + "id": "pages_b06_section_b06_masshaul_culvert_2026_09_\ud30c\uc77c_\ucc45\uc784_\ubd84\ub9ac", + "community": 159, + "community_name": "B03 \ud30c\uc77c \uc785\ub825 \ud654\uba74 \uc815\ub9ac", + "norm_label": "\u1111\u1161\u110b\u1175\u11af \u110e\u1162\u11a8\u110b\u1175\u11b7 \u1107\u116e\u11ab\u1105\u1175" + }, + { + "label": "B06_pavement_revetment.md", + "file_type": "document", + "source_file": "pages/B06_Section/B06_pavement_revetment.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b06_section_b06_pavement_revetment", + "community": 74, + "community_name": "B06 \ubb3c\ub118\uc774\ud3ec\uc7a5\u00b7\ucf58\ud06c\ub9ac\ud2b8 \ud3ec\uc7a5\u00b7\ub3c5\ub9bd \uae30\uc2ad\ub9c9\uc774", + "norm_label": "b06_pavement_revetment.md" + }, + { + "label": "B06 \ubb3c\ub118\uc774\ud3ec\uc7a5\u00b7\ucf58\ud06c\ub9ac\ud2b8 \ud3ec\uc7a5\u00b7\ub3c5\ub9bd \uae30\uc2ad\ub9c9\uc774", + "file_type": "document", + "source_file": "pages/B06_Section/B06_pavement_revetment.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b06_section_b06_pavement_revetment_b06_\ubb3c\ub118\uc774\ud3ec\uc7a5_\ucf58\ud06c\ub9ac\ud2b8_\ud3ec\uc7a5_\ub3c5\ub9bd_\uae30\uc2ad\ub9c9\uc774", + "community": 74, + "community_name": "B06 \ubb3c\ub118\uc774\ud3ec\uc7a5\u00b7\ucf58\ud06c\ub9ac\ud2b8 \ud3ec\uc7a5\u00b7\ub3c5\ub9bd \uae30\uc2ad\ub9c9\uc774", + "norm_label": "b06 \u1106\u116e\u11af\u1102\u1165\u11b7\u110b\u1175\u1111\u1169\u110c\u1161\u11bc\u00b7\u110f\u1169\u11ab\u110f\u1173\u1105\u1175\u1110\u1173 \u1111\u1169\u110c\u1161\u11bc\u00b7\u1103\u1169\u11a8\u1105\u1175\u11b8 \u1100\u1175\u1109\u1173\u11b0\u1106\u1161\u11a8\u110b\u1175" + }, + { + "label": "\ud3ec\uc7a5\uacfc \ubb3c\ub118\uc774", + "file_type": "document", + "source_file": "pages/B06_Section/B06_pavement_revetment.md", + "source_location": "L12", + "_origin": "ast", + "id": "pages_b06_section_b06_pavement_revetment_\ud3ec\uc7a5\uacfc_\ubb3c\ub118\uc774", + "community": 74, + "community_name": "B06 \ubb3c\ub118\uc774\ud3ec\uc7a5\u00b7\ucf58\ud06c\ub9ac\ud2b8 \ud3ec\uc7a5\u00b7\ub3c5\ub9bd \uae30\uc2ad\ub9c9\uc774", + "norm_label": "\u1111\u1169\u110c\u1161\u11bc\u1100\u116a \u1106\u116e\u11af\u1102\u1165\u11b7\u110b\u1175" + }, + { + "label": "\ub3c5\ub9bd \uae30\uc2ad\ub9c9\uc774", + "file_type": "document", + "source_file": "pages/B06_Section/B06_pavement_revetment.md", + "source_location": "L24", + "_origin": "ast", + "id": "pages_b06_section_b06_pavement_revetment_\ub3c5\ub9bd_\uae30\uc2ad\ub9c9\uc774", + "community": 74, + "community_name": "B06 \ubb3c\ub118\uc774\ud3ec\uc7a5\u00b7\ucf58\ud06c\ub9ac\ud2b8 \ud3ec\uc7a5\u00b7\ub3c5\ub9bd \uae30\uc2ad\ub9c9\uc774", + "norm_label": "\u1103\u1169\u11a8\u1105\u1175\u11b8 \u1100\u1175\u1109\u1173\u11b0\u1106\u1161\u11a8\u110b\u1175" + }, + { + "label": "\uac80\uc99d", + "file_type": "document", + "source_file": "pages/B06_Section/B06_pavement_revetment.md", + "source_location": "L34", + "_origin": "ast", + "id": "pages_b06_section_b06_pavement_revetment_\uac80\uc99d", + "community": 74, + "community_name": "B06 \ubb3c\ub118\uc774\ud3ec\uc7a5\u00b7\ucf58\ud06c\ub9ac\ud2b8 \ud3ec\uc7a5\u00b7\ub3c5\ub9bd \uae30\uc2ad\ub9c9\uc774", + "norm_label": "\u1100\u1165\u11b7\u110c\u1173\u11bc" + }, + { + "label": "B06_revetment_link_controls.md", + "file_type": "document", + "source_file": "pages/B06_Section/B06_revetment_link_controls.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b06_section_b06_revetment_link_controls", + "community": 29, + "community_name": "B06 \uae30\uc2ad\ub9c9\uc774 \uc5f0\ub3d9\u00b7\uacbd\uc0ac\u00b7\ub2e8\ubcc4 \uc81c\uc5b4", + "norm_label": "b06_revetment_link_controls.md" + }, + { + "label": "B06 \uae30\uc2ad\ub9c9\uc774 \uc5f0\ub3d9\u00b7\uacbd\uc0ac\u00b7\ub2e8\ubcc4 \uc81c\uc5b4", + "file_type": "document", + "source_file": "pages/B06_Section/B06_revetment_link_controls.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b06_section_b06_revetment_link_controls_b06_\uae30\uc2ad\ub9c9\uc774_\uc5f0\ub3d9_\uacbd\uc0ac_\ub2e8\ubcc4_\uc81c\uc5b4", + "community": 29, + "community_name": "B06 \uae30\uc2ad\ub9c9\uc774 \uc5f0\ub3d9\u00b7\uacbd\uc0ac\u00b7\ub2e8\ubcc4 \uc81c\uc5b4", + "norm_label": "b06 \u1100\u1175\u1109\u1173\u11b0\u1106\u1161\u11a8\u110b\u1175 \u110b\u1167\u11ab\u1103\u1169\u11bc\u00b7\u1100\u1167\u11bc\u1109\u1161\u00b7\u1103\u1161\u11ab\u1107\u1167\u11af \u110c\u1166\u110b\u1165" + }, + { + "label": "\uc815\ubcf8\uacfc \uacf5\uc6a9 \ubaa8\ub378", + "file_type": "document", + "source_file": "pages/B06_Section/B06_revetment_link_controls.md", + "source_location": "L14", + "_origin": "ast", + "id": "pages_b06_section_b06_revetment_link_controls_\uc815\ubcf8\uacfc_\uacf5\uc6a9_\ubaa8\ub378", + "community": 29, + "community_name": "B06 \uae30\uc2ad\ub9c9\uc774 \uc5f0\ub3d9\u00b7\uacbd\uc0ac\u00b7\ub2e8\ubcc4 \uc81c\uc5b4", + "norm_label": "\u110c\u1165\u11bc\u1107\u1169\u11ab\u1100\u116a \u1100\u1169\u11bc\u110b\u116d\u11bc \u1106\u1169\u1103\u1166\u11af" + }, + { + "label": "\ud615\ud0dc\uc640 \uc870\uc815\ucc3d", + "file_type": "document", + "source_file": "pages/B06_Section/B06_revetment_link_controls.md", + "source_location": "L24", + "_origin": "ast", + "id": "pages_b06_section_b06_revetment_link_controls_\ud615\ud0dc\uc640_\uc870\uc815\ucc3d", + "community": 29, + "community_name": "B06 \uae30\uc2ad\ub9c9\uc774 \uc5f0\ub3d9\u00b7\uacbd\uc0ac\u00b7\ub2e8\ubcc4 \uc81c\uc5b4", + "norm_label": "\u1112\u1167\u11bc\u1110\u1162\u110b\u116a \u110c\u1169\u110c\u1165\u11bc\u110e\u1161\u11bc" + }, + { + "label": "\ub2e8\ubcc4 \uad6c\uac04\uac12", + "file_type": "document", + "source_file": "pages/B06_Section/B06_revetment_link_controls.md", + "source_location": "L35", + "_origin": "ast", + "id": "pages_b06_section_b06_revetment_link_controls_\ub2e8\ubcc4_\uad6c\uac04\uac12", + "community": 29, + "community_name": "B06 \uae30\uc2ad\ub9c9\uc774 \uc5f0\ub3d9\u00b7\uacbd\uc0ac\u00b7\ub2e8\ubcc4 \uc81c\uc5b4", + "norm_label": "\u1103\u1161\u11ab\u1107\u1167\u11af \u1100\u116e\u1100\u1161\u11ab\u1100\u1161\u11b9" + }, + { + "label": "\uc5f0\ub3d9\uacfc \uacbd\uc0ac", + "file_type": "document", + "source_file": "pages/B06_Section/B06_revetment_link_controls.md", + "source_location": "L47", + "_origin": "ast", + "id": "pages_b06_section_b06_revetment_link_controls_\uc5f0\ub3d9\uacfc_\uacbd\uc0ac", + "community": 29, + "community_name": "B06 \uae30\uc2ad\ub9c9\uc774 \uc5f0\ub3d9\u00b7\uacbd\uc0ac\u00b7\ub2e8\ubcc4 \uc81c\uc5b4", + "norm_label": "\u110b\u1167\u11ab\u1103\u1169\u11bc\u1100\u116a \u1100\u1167\u11bc\u1109\u1161" + }, + { + "label": "\uc120\ud0dd\uacfc \ud558\uc774\ub77c\uc774\ud2b8", + "file_type": "document", + "source_file": "pages/B06_Section/B06_revetment_link_controls.md", + "source_location": "L58", + "_origin": "ast", + "id": "pages_b06_section_b06_revetment_link_controls_\uc120\ud0dd\uacfc_\ud558\uc774\ub77c\uc774\ud2b8", + "community": 29, + "community_name": "B06 \uae30\uc2ad\ub9c9\uc774 \uc5f0\ub3d9\u00b7\uacbd\uc0ac\u00b7\ub2e8\ubcc4 \uc81c\uc5b4", + "norm_label": "\u1109\u1165\u11ab\u1110\u1162\u11a8\u1100\u116a \u1112\u1161\u110b\u1175\u1105\u1161\u110b\u1175\u1110\u1173" + }, + { + "label": "\uac80\uc99d", + "file_type": "document", + "source_file": "pages/B06_Section/B06_revetment_link_controls.md", + "source_location": "L66", + "_origin": "ast", + "id": "pages_b06_section_b06_revetment_link_controls_\uac80\uc99d", + "community": 29, + "community_name": "B06 \uae30\uc2ad\ub9c9\uc774 \uc5f0\ub3d9\u00b7\uacbd\uc0ac\u00b7\ub2e8\ubcc4 \uc81c\uc5b4", + "norm_label": "\u1100\u1165\u11b7\u110c\u1173\u11bc" + }, + { + "label": "B06_Section_Engine_Areas.md", + "file_type": "document", + "source_file": "pages/B06_Section/backend/B06_Section_Engine_Areas.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b06_section_backend_b06_section_engine_areas", + "community": 75, + "community_name": "B06_Section_Engine_Areas \u2014 \ud6a1\ub2e8 \uba74\uc801 \uc801\ubd84 \uc5f0\uc0b0 \uc5d4\uc9c4", + "norm_label": "b06_section_engine_areas.md" + }, + { + "label": "B06_Section_Engine_Areas \u2014 \ud6a1\ub2e8 \uba74\uc801 \uc801\ubd84 \uc5f0\uc0b0 \uc5d4\uc9c4", + "file_type": "document", + "source_file": "pages/B06_Section/backend/B06_Section_Engine_Areas.md", + "source_location": "L9", + "_origin": "ast", + "id": "pages_b06_section_backend_b06_section_engine_areas_b06_section_engine_areas_\ud6a1\ub2e8_\uba74\uc801_\uc801\ubd84_\uc5f0\uc0b0_\uc5d4\uc9c4", + "community": 75, + "community_name": "B06_Section_Engine_Areas \u2014 \ud6a1\ub2e8 \uba74\uc801 \uc801\ubd84 \uc5f0\uc0b0 \uc5d4\uc9c4", + "norm_label": "b06_section_engine_areas \u2014 \u1112\u116c\u11bc\u1103\u1161\u11ab \u1106\u1167\u11ab\u110c\u1165\u11a8 \u110c\u1165\u11a8\u1107\u116e\u11ab \u110b\u1167\u11ab\u1109\u1161\u11ab \u110b\u1166\u11ab\u110c\u1175\u11ab" + }, + { + "label": "1. \uac1c\uc694 \ubc0f \uc5ed\ud560", + "file_type": "document", + "source_file": "pages/B06_Section/backend/B06_Section_Engine_Areas.md", + "source_location": "L13", + "_origin": "ast", + "id": "pages_b06_section_backend_b06_section_engine_areas_1_\uac1c\uc694_\ubc0f_\uc5ed\ud560", + "community": 75, + "community_name": "B06_Section_Engine_Areas \u2014 \ud6a1\ub2e8 \uba74\uc801 \uc801\ubd84 \uc5f0\uc0b0 \uc5d4\uc9c4", + "norm_label": "1. \u1100\u1162\u110b\u116d \u1106\u1175\u11be \u110b\u1167\u11a8\u1112\u1161\u11af" + }, + { + "label": "2. \uc8fc\uc694 \uae30\ub2a5 \ubc0f \ud568\uc218", + "file_type": "document", + "source_file": "pages/B06_Section/backend/B06_Section_Engine_Areas.md", + "source_location": "L17", + "_origin": "ast", + "id": "pages_b06_section_backend_b06_section_engine_areas_2_\uc8fc\uc694_\uae30\ub2a5_\ubc0f_\ud568\uc218", + "community": 75, + "community_name": "B06_Section_Engine_Areas \u2014 \ud6a1\ub2e8 \uba74\uc801 \uc801\ubd84 \uc5f0\uc0b0 \uc5d4\uc9c4", + "norm_label": "2. \u110c\u116e\u110b\u116d \u1100\u1175\u1102\u1173\u11bc \u1106\u1175\u11be \u1112\u1161\u11b7\u1109\u116e" + }, + { + "label": "3. \uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/B06_Section/backend/B06_Section_Engine_Areas.md", + "source_location": "L23", + "_origin": "ast", + "id": "pages_b06_section_backend_b06_section_engine_areas_3_\uc758\uc874\uc131", + "community": 75, + "community_name": "B06_Section_Engine_Areas \u2014 \ud6a1\ub2e8 \uba74\uc801 \uc801\ubd84 \uc5f0\uc0b0 \uc5d4\uc9c4", + "norm_label": "3. \u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "B06_Section_Router.md", + "file_type": "document", + "source_file": "pages/B06_Section/backend/B06_Section_Router.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b06_section_backend_b06_section_router", + "community": 145, + "community_name": "B06_Section_Router.md", + "norm_label": "b06_section_router.md" + }, + { + "label": "B06_Section_Router.py", + "file_type": "document", + "source_file": "pages/B06_Section/backend/B06_Section_Router.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b06_section_backend_b06_section_router_b06_section_router_py", + "community": 145, + "community_name": "B06_Section_Router.md", + "norm_label": "b06_section_router.py" + }, + { + "label": "\ud83d\udee0\ufe0f \ub77c\uc6b0\ud130 API \ubc0f \uc8fc\uc694 \ud568\uc218 \ubaa9\ub85d", + "file_type": "document", + "source_file": "pages/B06_Section/backend/B06_Section_Router.md", + "source_location": "L14", + "_origin": "ast", + "id": "pages_b06_section_backend_b06_section_router_\ub77c\uc6b0\ud130_api_\ubc0f_\uc8fc\uc694_\ud568\uc218_\ubaa9\ub85d", + "community": 145, + "community_name": "B06_Section_Router.md", + "norm_label": "\ud83d\udee0\ufe0f \u1105\u1161\u110b\u116e\u1110\u1165 api \u1106\u1175\u11be \u110c\u116e\u110b\u116d \u1112\u1161\u11b7\u1109\u116e \u1106\u1169\u11a8\u1105\u1169\u11a8" + }, + { + "label": "\ud83d\udd17 \uc5f0\uad00 \uac1c\ub150 \ubc0f \uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/B06_Section/backend/B06_Section_Router.md", + "source_location": "L25", + "_origin": "ast", + "id": "pages_b06_section_backend_b06_section_router_\uc5f0\uad00_\uac1c\ub150_\ubc0f_\uc758\uc874\uc131", + "community": 145, + "community_name": "B06_Section_Router.md", + "norm_label": "\ud83d\udd17 \u110b\u1167\u11ab\u1100\u116a\u11ab \u1100\u1162\u1102\u1167\u11b7 \u1106\u1175\u11be \u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "B06_Section_Router_Confirm.md", + "file_type": "document", + "source_file": "pages/B06_Section/backend/B06_Section_Router_Confirm.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b06_section_backend_b06_section_router_confirm", + "community": 76, + "community_name": "B06_Section_Router_Confirm \u2014 \uc784\uc2dc \uc800\uc7a5 \ubc0f \ud655\uc815 \ub77c\uc6b0\ud130", + "norm_label": "b06_section_router_confirm.md" + }, + { + "label": "B06_Section_Router_Confirm \u2014 \uc784\uc2dc \uc800\uc7a5 \ubc0f \ud655\uc815 \ub77c\uc6b0\ud130", + "file_type": "document", + "source_file": "pages/B06_Section/backend/B06_Section_Router_Confirm.md", + "source_location": "L9", + "_origin": "ast", + "id": "pages_b06_section_backend_b06_section_router_confirm_b06_section_router_confirm_\uc784\uc2dc_\uc800\uc7a5_\ubc0f_\ud655\uc815_\ub77c\uc6b0\ud130", + "community": 76, + "community_name": "B06_Section_Router_Confirm \u2014 \uc784\uc2dc \uc800\uc7a5 \ubc0f \ud655\uc815 \ub77c\uc6b0\ud130", + "norm_label": "b06_section_router_confirm \u2014 \u110b\u1175\u11b7\u1109\u1175 \u110c\u1165\u110c\u1161\u11bc \u1106\u1175\u11be \u1112\u116a\u11a8\u110c\u1165\u11bc \u1105\u1161\u110b\u116e\u1110\u1165" + }, + { + "label": "1. \uac1c\uc694 \ubc0f \uc5ed\ud560", + "file_type": "document", + "source_file": "pages/B06_Section/backend/B06_Section_Router_Confirm.md", + "source_location": "L11", + "_origin": "ast", + "id": "pages_b06_section_backend_b06_section_router_confirm_1_\uac1c\uc694_\ubc0f_\uc5ed\ud560", + "community": 76, + "community_name": "B06_Section_Router_Confirm \u2014 \uc784\uc2dc \uc800\uc7a5 \ubc0f \ud655\uc815 \ub77c\uc6b0\ud130", + "norm_label": "1. \u1100\u1162\u110b\u116d \u1106\u1175\u11be \u110b\u1167\u11a8\u1112\u1161\u11af" + }, + { + "label": "2. \uc8fc\uc694 \uae30\ub2a5 \ubc0f \uc5d4\ub4dc\ud3ec\uc778\ud2b8", + "file_type": "document", + "source_file": "pages/B06_Section/backend/B06_Section_Router_Confirm.md", + "source_location": "L15", + "_origin": "ast", + "id": "pages_b06_section_backend_b06_section_router_confirm_2_\uc8fc\uc694_\uae30\ub2a5_\ubc0f_\uc5d4\ub4dc\ud3ec\uc778\ud2b8", + "community": 76, + "community_name": "B06_Section_Router_Confirm \u2014 \uc784\uc2dc \uc800\uc7a5 \ubc0f \ud655\uc815 \ub77c\uc6b0\ud130", + "norm_label": "2. \u110c\u116e\u110b\u116d \u1100\u1175\u1102\u1173\u11bc \u1106\u1175\u11be \u110b\u1166\u11ab\u1103\u1173\u1111\u1169\u110b\u1175\u11ab\u1110\u1173" + }, + { + "label": "3. \uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/B06_Section/backend/B06_Section_Router_Confirm.md", + "source_location": "L21", + "_origin": "ast", + "id": "pages_b06_section_backend_b06_section_router_confirm_3_\uc758\uc874\uc131", + "community": 76, + "community_name": "B06_Section_Router_Confirm \u2014 \uc784\uc2dc \uc800\uc7a5 \ubc0f \ud655\uc815 \ub77c\uc6b0\ud130", + "norm_label": "3. \u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "B06_Section_Api_Fetch.md", + "file_type": "document", + "source_file": "pages/B06_Section/frontend/B06_Section_Api_Fetch.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b06_section_frontend_b06_section_api_fetch", + "community": 108, + "community_name": "B06_Section_Api_Fetch \u2014 B06 \ud504\ub860\ud2b8\uc5d4\ub4dc API \ud074\ub77c\uc774\uc5b8\ud2b8", + "norm_label": "b06_section_api_fetch.md" + }, + { + "label": "B06_Section_Api_Fetch \u2014 B06 \ud504\ub860\ud2b8\uc5d4\ub4dc API \ud074\ub77c\uc774\uc5b8\ud2b8", + "file_type": "document", + "source_file": "pages/B06_Section/frontend/B06_Section_Api_Fetch.md", + "source_location": "L9", + "_origin": "ast", + "id": "pages_b06_section_frontend_b06_section_api_fetch_b06_section_api_fetch_b06_\ud504\ub860\ud2b8\uc5d4\ub4dc_api_\ud074\ub77c\uc774\uc5b8\ud2b8", + "community": 108, + "community_name": "B06_Section_Api_Fetch \u2014 B06 \ud504\ub860\ud2b8\uc5d4\ub4dc API \ud074\ub77c\uc774\uc5b8\ud2b8", + "norm_label": "b06_section_api_fetch \u2014 b06 \u1111\u1173\u1105\u1169\u11ab\u1110\u1173\u110b\u1166\u11ab\u1103\u1173 api \u110f\u1173\u11af\u1105\u1161\u110b\u1175\u110b\u1165\u11ab\u1110\u1173" + }, + { + "label": "1. \uac1c\uc694 \ubc0f \uc5ed\ud560", + "file_type": "document", + "source_file": "pages/B06_Section/frontend/B06_Section_Api_Fetch.md", + "source_location": "L11", + "_origin": "ast", + "id": "pages_b06_section_frontend_b06_section_api_fetch_1_\uac1c\uc694_\ubc0f_\uc5ed\ud560", + "community": 108, + "community_name": "B06_Section_Api_Fetch \u2014 B06 \ud504\ub860\ud2b8\uc5d4\ub4dc API \ud074\ub77c\uc774\uc5b8\ud2b8", + "norm_label": "1. \u1100\u1162\u110b\u116d \u1106\u1175\u11be \u110b\u1167\u11a8\u1112\u1161\u11af" + }, + { + "label": "2. \uc8fc\uc694 \uc5f0\ub3d9 API \ud568\uc218", + "file_type": "document", + "source_file": "pages/B06_Section/frontend/B06_Section_Api_Fetch.md", + "source_location": "L15", + "_origin": "ast", + "id": "pages_b06_section_frontend_b06_section_api_fetch_2_\uc8fc\uc694_\uc5f0\ub3d9_api_\ud568\uc218", + "community": 108, + "community_name": "B06_Section_Api_Fetch \u2014 B06 \ud504\ub860\ud2b8\uc5d4\ub4dc API \ud074\ub77c\uc774\uc5b8\ud2b8", + "norm_label": "2. \u110c\u116e\u110b\u116d \u110b\u1167\u11ab\u1103\u1169\u11bc api \u1112\u1161\u11b7\u1109\u116e" + }, + { + "label": "B06_Section_UI_Cross_Areas.md", + "file_type": "document", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_Cross_Areas.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b06_section_frontend_b06_section_ui_cross_areas", + "community": 77, + "community_name": "B06_Section_UI_Cross_Areas \u2014 \ud6a1\ub2e8 \ub2e8\uba74\uc801 \ud45c\uae30 \ubc0f \ubc34\ub4dc \ud558\uc774\ub77c\uc774\ud2b8", + "norm_label": "b06_section_ui_cross_areas.md" + }, + { + "label": "B06_Section_UI_Cross_Areas \u2014 \ud6a1\ub2e8 \ub2e8\uba74\uc801 \ud45c\uae30 \ubc0f \ubc34\ub4dc \ud558\uc774\ub77c\uc774\ud2b8", + "file_type": "document", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_Cross_Areas.md", + "source_location": "L9", + "_origin": "ast", + "id": "pages_b06_section_frontend_b06_section_ui_cross_areas_b06_section_ui_cross_areas_\ud6a1\ub2e8_\ub2e8\uba74\uc801_\ud45c\uae30_\ubc0f_\ubc34\ub4dc_\ud558\uc774\ub77c\uc774\ud2b8", + "community": 77, + "community_name": "B06_Section_UI_Cross_Areas \u2014 \ud6a1\ub2e8 \ub2e8\uba74\uc801 \ud45c\uae30 \ubc0f \ubc34\ub4dc \ud558\uc774\ub77c\uc774\ud2b8", + "norm_label": "b06_section_ui_cross_areas \u2014 \u1112\u116c\u11bc\u1103\u1161\u11ab \u1103\u1161\u11ab\u1106\u1167\u11ab\u110c\u1165\u11a8 \u1111\u116d\u1100\u1175 \u1106\u1175\u11be \u1107\u1162\u11ab\u1103\u1173 \u1112\u1161\u110b\u1175\u1105\u1161\u110b\u1175\u1110\u1173" + }, + { + "label": "1. \uac1c\uc694 \ubc0f \uc5ed\ud560", + "file_type": "document", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_Cross_Areas.md", + "source_location": "L11", + "_origin": "ast", + "id": "pages_b06_section_frontend_b06_section_ui_cross_areas_1_\uac1c\uc694_\ubc0f_\uc5ed\ud560", + "community": 77, + "community_name": "B06_Section_UI_Cross_Areas \u2014 \ud6a1\ub2e8 \ub2e8\uba74\uc801 \ud45c\uae30 \ubc0f \ubc34\ub4dc \ud558\uc774\ub77c\uc774\ud2b8", + "norm_label": "1. \u1100\u1162\u110b\u116d \u1106\u1175\u11be \u110b\u1167\u11a8\u1112\u1161\u11af" + }, + { + "label": "2. \uc8fc\uc694 \uae30\ub2a5 \ubc0f \ud568\uc218", + "file_type": "document", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_Cross_Areas.md", + "source_location": "L15", + "_origin": "ast", + "id": "pages_b06_section_frontend_b06_section_ui_cross_areas_2_\uc8fc\uc694_\uae30\ub2a5_\ubc0f_\ud568\uc218", + "community": 77, + "community_name": "B06_Section_UI_Cross_Areas \u2014 \ud6a1\ub2e8 \ub2e8\uba74\uc801 \ud45c\uae30 \ubc0f \ubc34\ub4dc \ud558\uc774\ub77c\uc774\ud2b8", + "norm_label": "2. \u110c\u116e\u110b\u116d \u1100\u1175\u1102\u1173\u11bc \u1106\u1175\u11be \u1112\u1161\u11b7\u1109\u116e" + }, + { + "label": "3. \uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_Cross_Areas.md", + "source_location": "L23", + "_origin": "ast", + "id": "pages_b06_section_frontend_b06_section_ui_cross_areas_3_\uc758\uc874\uc131", + "community": 77, + "community_name": "B06_Section_UI_Cross_Areas \u2014 \ud6a1\ub2e8 \ub2e8\uba74\uc801 \ud45c\uae30 \ubc0f \ubc34\ub4dc \ud558\uc774\ub77c\uc774\ud2b8", + "norm_label": "3. \u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "B06_Section_UI_Cross_Design.md", + "file_type": "document", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_Cross_Design.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b06_section_frontend_b06_section_ui_cross_design", + "community": 78, + "community_name": "B06_Section_UI_Cross_Design \u2014 \ud6a1\ub2e8 \uce21\uc810\ubcc4 \uc138\ubd80 \uc124\uacc4 \ucee8\ud2b8\ub864", + "norm_label": "b06_section_ui_cross_design.md" + }, + { + "label": "B06_Section_UI_Cross_Design \u2014 \ud6a1\ub2e8 \uce21\uc810\ubcc4 \uc138\ubd80 \uc124\uacc4 \ucee8\ud2b8\ub864", + "file_type": "document", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_Cross_Design.md", + "source_location": "L9", + "_origin": "ast", + "id": "pages_b06_section_frontend_b06_section_ui_cross_design_b06_section_ui_cross_design_\ud6a1\ub2e8_\uce21\uc810\ubcc4_\uc138\ubd80_\uc124\uacc4_\ucee8\ud2b8\ub864", + "community": 78, + "community_name": "B06_Section_UI_Cross_Design \u2014 \ud6a1\ub2e8 \uce21\uc810\ubcc4 \uc138\ubd80 \uc124\uacc4 \ucee8\ud2b8\ub864", + "norm_label": "b06_section_ui_cross_design \u2014 \u1112\u116c\u11bc\u1103\u1161\u11ab \u110e\u1173\u11a8\u110c\u1165\u11b7\u1107\u1167\u11af \u1109\u1166\u1107\u116e \u1109\u1165\u11af\u1100\u1168 \u110f\u1165\u11ab\u1110\u1173\u1105\u1169\u11af" + }, + { + "label": "1. \uac1c\uc694 \ubc0f \uc5ed\ud560", + "file_type": "document", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_Cross_Design.md", + "source_location": "L11", + "_origin": "ast", + "id": "pages_b06_section_frontend_b06_section_ui_cross_design_1_\uac1c\uc694_\ubc0f_\uc5ed\ud560", + "community": 78, + "community_name": "B06_Section_UI_Cross_Design \u2014 \ud6a1\ub2e8 \uce21\uc810\ubcc4 \uc138\ubd80 \uc124\uacc4 \ucee8\ud2b8\ub864", + "norm_label": "1. \u1100\u1162\u110b\u116d \u1106\u1175\u11be \u110b\u1167\u11a8\u1112\u1161\u11af" + }, + { + "label": "2. \uc8fc\uc694 \uae30\ub2a5 \ubc0f \ud568\uc218", + "file_type": "document", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_Cross_Design.md", + "source_location": "L15", + "_origin": "ast", + "id": "pages_b06_section_frontend_b06_section_ui_cross_design_2_\uc8fc\uc694_\uae30\ub2a5_\ubc0f_\ud568\uc218", + "community": 78, + "community_name": "B06_Section_UI_Cross_Design \u2014 \ud6a1\ub2e8 \uce21\uc810\ubcc4 \uc138\ubd80 \uc124\uacc4 \ucee8\ud2b8\ub864", + "norm_label": "2. \u110c\u116e\u110b\u116d \u1100\u1175\u1102\u1173\u11bc \u1106\u1175\u11be \u1112\u1161\u11b7\u1109\u116e" + }, + { + "label": "3. \uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_Cross_Design.md", + "source_location": "L23", + "_origin": "ast", + "id": "pages_b06_section_frontend_b06_section_ui_cross_design_3_\uc758\uc874\uc131", + "community": 78, + "community_name": "B06_Section_UI_Cross_Design \u2014 \ud6a1\ub2e8 \uce21\uc810\ubcc4 \uc138\ubd80 \uc124\uacc4 \ucee8\ud2b8\ub864", + "norm_label": "3. \u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "B06_Section_UI_MassHaul.md", + "file_type": "document", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_MassHaul.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b06_section_frontend_b06_section_ui_masshaul", + "community": 79, + "community_name": "B06_Section_UI_MassHaul \u2014 \uc720\ud1a0\uace1\uc120 \uc801\ubd84 \uacc4\uc0b0 \uc5d4\uc9c4", + "norm_label": "b06_section_ui_masshaul.md" + }, + { + "label": "B06_Section_UI_MassHaul \u2014 \uc720\ud1a0\uace1\uc120 \uc801\ubd84 \uacc4\uc0b0 \uc5d4\uc9c4", + "file_type": "document", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_MassHaul.md", + "source_location": "L9", + "_origin": "ast", + "id": "pages_b06_section_frontend_b06_section_ui_masshaul_b06_section_ui_masshaul_\uc720\ud1a0\uace1\uc120_\uc801\ubd84_\uacc4\uc0b0_\uc5d4\uc9c4", + "community": 79, + "community_name": "B06_Section_UI_MassHaul \u2014 \uc720\ud1a0\uace1\uc120 \uc801\ubd84 \uacc4\uc0b0 \uc5d4\uc9c4", + "norm_label": "b06_section_ui_masshaul \u2014 \u110b\u1172\u1110\u1169\u1100\u1169\u11a8\u1109\u1165\u11ab \u110c\u1165\u11a8\u1107\u116e\u11ab \u1100\u1168\u1109\u1161\u11ab \u110b\u1166\u11ab\u110c\u1175\u11ab" + }, + { + "label": "1. \uac1c\uc694 \ubc0f \uc5ed\ud560", + "file_type": "document", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_MassHaul.md", + "source_location": "L11", + "_origin": "ast", + "id": "pages_b06_section_frontend_b06_section_ui_masshaul_1_\uac1c\uc694_\ubc0f_\uc5ed\ud560", + "community": 79, + "community_name": "B06_Section_UI_MassHaul \u2014 \uc720\ud1a0\uace1\uc120 \uc801\ubd84 \uacc4\uc0b0 \uc5d4\uc9c4", + "norm_label": "1. \u1100\u1162\u110b\u116d \u1106\u1175\u11be \u110b\u1167\u11a8\u1112\u1161\u11af" + }, + { + "label": "2. \uc8fc\uc694 \uae30\ub2a5 \ubc0f \ud568\uc218", + "file_type": "document", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_MassHaul.md", + "source_location": "L15", + "_origin": "ast", + "id": "pages_b06_section_frontend_b06_section_ui_masshaul_2_\uc8fc\uc694_\uae30\ub2a5_\ubc0f_\ud568\uc218", + "community": 79, + "community_name": "B06_Section_UI_MassHaul \u2014 \uc720\ud1a0\uace1\uc120 \uc801\ubd84 \uacc4\uc0b0 \uc5d4\uc9c4", + "norm_label": "2. \u110c\u116e\u110b\u116d \u1100\u1175\u1102\u1173\u11bc \u1106\u1175\u11be \u1112\u1161\u11b7\u1109\u116e" + }, + { + "label": "3. \uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_MassHaul.md", + "source_location": "L24", + "_origin": "ast", + "id": "pages_b06_section_frontend_b06_section_ui_masshaul_3_\uc758\uc874\uc131", + "community": 79, + "community_name": "B06_Section_UI_MassHaul \u2014 \uc720\ud1a0\uace1\uc120 \uc801\ubd84 \uacc4\uc0b0 \uc5d4\uc9c4", + "norm_label": "3. \u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "B06_Section_UI_MassHaul_Balance.md", + "file_type": "document", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_MassHaul_Balance.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b06_section_frontend_b06_section_ui_masshaul_balance", + "community": 80, + "community_name": "B06_Section_UI_MassHaul_Balance \u2014 \ud3c9\ud615\uc120 \ubc0f \uc7a5\ube44 \ub760 \ubd84\ud560 \uc5d4\uc9c4", + "norm_label": "b06_section_ui_masshaul_balance.md" + }, + { + "label": "B06_Section_UI_MassHaul_Balance \u2014 \ud3c9\ud615\uc120 \ubc0f \uc7a5\ube44 \ub760 \ubd84\ud560 \uc5d4\uc9c4", + "file_type": "document", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_MassHaul_Balance.md", + "source_location": "L9", + "_origin": "ast", + "id": "pages_b06_section_frontend_b06_section_ui_masshaul_balance_b06_section_ui_masshaul_balance_\ud3c9\ud615\uc120_\ubc0f_\uc7a5\ube44_\ub760_\ubd84\ud560_\uc5d4\uc9c4", + "community": 80, + "community_name": "B06_Section_UI_MassHaul_Balance \u2014 \ud3c9\ud615\uc120 \ubc0f \uc7a5\ube44 \ub760 \ubd84\ud560 \uc5d4\uc9c4", + "norm_label": "b06_section_ui_masshaul_balance \u2014 \u1111\u1167\u11bc\u1112\u1167\u11bc\u1109\u1165\u11ab \u1106\u1175\u11be \u110c\u1161\u11bc\u1107\u1175 \u1104\u1175 \u1107\u116e\u11ab\u1112\u1161\u11af \u110b\u1166\u11ab\u110c\u1175\u11ab" + }, + { + "label": "1. \uac1c\uc694 \ubc0f \uc5ed\ud560", + "file_type": "document", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_MassHaul_Balance.md", + "source_location": "L11", + "_origin": "ast", + "id": "pages_b06_section_frontend_b06_section_ui_masshaul_balance_1_\uac1c\uc694_\ubc0f_\uc5ed\ud560", + "community": 80, + "community_name": "B06_Section_UI_MassHaul_Balance \u2014 \ud3c9\ud615\uc120 \ubc0f \uc7a5\ube44 \ub760 \ubd84\ud560 \uc5d4\uc9c4", + "norm_label": "1. \u1100\u1162\u110b\u116d \u1106\u1175\u11be \u110b\u1167\u11a8\u1112\u1161\u11af" + }, + { + "label": "2. \uc8fc\uc694 \uae30\ub2a5 \ubc0f \uc54c\uace0\ub9ac\uc998", + "file_type": "document", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_MassHaul_Balance.md", + "source_location": "L15", + "_origin": "ast", + "id": "pages_b06_section_frontend_b06_section_ui_masshaul_balance_2_\uc8fc\uc694_\uae30\ub2a5_\ubc0f_\uc54c\uace0\ub9ac\uc998", + "community": 80, + "community_name": "B06_Section_UI_MassHaul_Balance \u2014 \ud3c9\ud615\uc120 \ubc0f \uc7a5\ube44 \ub760 \ubd84\ud560 \uc5d4\uc9c4", + "norm_label": "2. \u110c\u116e\u110b\u116d \u1100\u1175\u1102\u1173\u11bc \u1106\u1175\u11be \u110b\u1161\u11af\u1100\u1169\u1105\u1175\u110c\u1173\u11b7" + }, + { + "label": "3. \uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_MassHaul_Balance.md", + "source_location": "L24", + "_origin": "ast", + "id": "pages_b06_section_frontend_b06_section_ui_masshaul_balance_3_\uc758\uc874\uc131", + "community": 80, + "community_name": "B06_Section_UI_MassHaul_Balance \u2014 \ud3c9\ud615\uc120 \ubc0f \uc7a5\ube44 \ub760 \ubd84\ud560 \uc5d4\uc9c4", + "norm_label": "3. \u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "B06_Section_UI_MassHaul_Balance_View.md", + "file_type": "document", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_MassHaul_Balance_View.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b06_section_frontend_b06_section_ui_masshaul_balance_view", + "community": 81, + "community_name": "B06_Section_UI_MassHaul_Balance_View \u2014 \uc6b4\ubc18 \ub760 \uc2dc\uac01\ud654 \ub80c\ub354\ub7ec", + "norm_label": "b06_section_ui_masshaul_balance_view.md" + }, + { + "label": "B06_Section_UI_MassHaul_Balance_View \u2014 \uc6b4\ubc18 \ub760 \uc2dc\uac01\ud654 \ub80c\ub354\ub7ec", + "file_type": "document", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_MassHaul_Balance_View.md", + "source_location": "L9", + "_origin": "ast", + "id": "pages_b06_section_frontend_b06_section_ui_masshaul_balance_view_b06_section_ui_masshaul_balance_view_\uc6b4\ubc18_\ub760_\uc2dc\uac01\ud654_\ub80c\ub354\ub7ec", + "community": 81, + "community_name": "B06_Section_UI_MassHaul_Balance_View \u2014 \uc6b4\ubc18 \ub760 \uc2dc\uac01\ud654 \ub80c\ub354\ub7ec", + "norm_label": "b06_section_ui_masshaul_balance_view \u2014 \u110b\u116e\u11ab\u1107\u1161\u11ab \u1104\u1175 \u1109\u1175\u1100\u1161\u11a8\u1112\u116a \u1105\u1166\u11ab\u1103\u1165\u1105\u1165" + }, + { + "label": "1. \uac1c\uc694 \ubc0f \uc5ed\ud560", + "file_type": "document", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_MassHaul_Balance_View.md", + "source_location": "L11", + "_origin": "ast", + "id": "pages_b06_section_frontend_b06_section_ui_masshaul_balance_view_1_\uac1c\uc694_\ubc0f_\uc5ed\ud560", + "community": 81, + "community_name": "B06_Section_UI_MassHaul_Balance_View \u2014 \uc6b4\ubc18 \ub760 \uc2dc\uac01\ud654 \ub80c\ub354\ub7ec", + "norm_label": "1. \u1100\u1162\u110b\u116d \u1106\u1175\u11be \u110b\u1167\u11a8\u1112\u1161\u11af" + }, + { + "label": "2. \uc8fc\uc694 \uae30\ub2a5 \ubc0f \ub80c\ub354\ub9c1", + "file_type": "document", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_MassHaul_Balance_View.md", + "source_location": "L15", + "_origin": "ast", + "id": "pages_b06_section_frontend_b06_section_ui_masshaul_balance_view_2_\uc8fc\uc694_\uae30\ub2a5_\ubc0f_\ub80c\ub354\ub9c1", + "community": 81, + "community_name": "B06_Section_UI_MassHaul_Balance_View \u2014 \uc6b4\ubc18 \ub760 \uc2dc\uac01\ud654 \ub80c\ub354\ub7ec", + "norm_label": "2. \u110c\u116e\u110b\u116d \u1100\u1175\u1102\u1173\u11bc \u1106\u1175\u11be \u1105\u1166\u11ab\u1103\u1165\u1105\u1175\u11bc" + }, + { + "label": "3. \uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_MassHaul_Balance_View.md", + "source_location": "L24", + "_origin": "ast", + "id": "pages_b06_section_frontend_b06_section_ui_masshaul_balance_view_3_\uc758\uc874\uc131", + "community": 81, + "community_name": "B06_Section_UI_MassHaul_Balance_View \u2014 \uc6b4\ubc18 \ub760 \uc2dc\uac01\ud654 \ub80c\ub354\ub7ec", + "norm_label": "3. \u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "B06_Section_UI_MassHaul_Balloon.md", + "file_type": "document", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_MassHaul_Balloon.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b06_section_frontend_b06_section_ui_masshaul_balloon", + "community": 82, + "community_name": "B06_Section_UI_MassHaul_Balloon \u2014 \ubb3c\ub7c9 \ub9d0\ud48d\uc120 \ubc30\uce58 \ubc0f \uc870\uc791", + "norm_label": "b06_section_ui_masshaul_balloon.md" + }, + { + "label": "B06_Section_UI_MassHaul_Balloon \u2014 \ubb3c\ub7c9 \ub9d0\ud48d\uc120 \ubc30\uce58 \ubc0f \uc870\uc791", + "file_type": "document", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_MassHaul_Balloon.md", + "source_location": "L9", + "_origin": "ast", + "id": "pages_b06_section_frontend_b06_section_ui_masshaul_balloon_b06_section_ui_masshaul_balloon_\ubb3c\ub7c9_\ub9d0\ud48d\uc120_\ubc30\uce58_\ubc0f_\uc870\uc791", + "community": 82, + "community_name": "B06_Section_UI_MassHaul_Balloon \u2014 \ubb3c\ub7c9 \ub9d0\ud48d\uc120 \ubc30\uce58 \ubc0f \uc870\uc791", + "norm_label": "b06_section_ui_masshaul_balloon \u2014 \u1106\u116e\u11af\u1105\u1163\u11bc \u1106\u1161\u11af\u1111\u116e\u11bc\u1109\u1165\u11ab \u1107\u1162\u110e\u1175 \u1106\u1175\u11be \u110c\u1169\u110c\u1161\u11a8" + }, + { + "label": "1. \uac1c\uc694 \ubc0f \uc5ed\ud560", + "file_type": "document", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_MassHaul_Balloon.md", + "source_location": "L11", + "_origin": "ast", + "id": "pages_b06_section_frontend_b06_section_ui_masshaul_balloon_1_\uac1c\uc694_\ubc0f_\uc5ed\ud560", + "community": 82, + "community_name": "B06_Section_UI_MassHaul_Balloon \u2014 \ubb3c\ub7c9 \ub9d0\ud48d\uc120 \ubc30\uce58 \ubc0f \uc870\uc791", + "norm_label": "1. \u1100\u1162\u110b\u116d \u1106\u1175\u11be \u110b\u1167\u11a8\u1112\u1161\u11af" + }, + { + "label": "2. \uc8fc\uc694 \uae30\ub2a5 \ubc0f \uc54c\uace0\ub9ac\uc998", + "file_type": "document", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_MassHaul_Balloon.md", + "source_location": "L15", + "_origin": "ast", + "id": "pages_b06_section_frontend_b06_section_ui_masshaul_balloon_2_\uc8fc\uc694_\uae30\ub2a5_\ubc0f_\uc54c\uace0\ub9ac\uc998", + "community": 82, + "community_name": "B06_Section_UI_MassHaul_Balloon \u2014 \ubb3c\ub7c9 \ub9d0\ud48d\uc120 \ubc30\uce58 \ubc0f \uc870\uc791", + "norm_label": "2. \u110c\u116e\u110b\u116d \u1100\u1175\u1102\u1173\u11bc \u1106\u1175\u11be \u110b\u1161\u11af\u1100\u1169\u1105\u1175\u110c\u1173\u11b7" + }, + { + "label": "3. \uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_MassHaul_Balloon.md", + "source_location": "L25", + "_origin": "ast", + "id": "pages_b06_section_frontend_b06_section_ui_masshaul_balloon_3_\uc758\uc874\uc131", + "community": 82, + "community_name": "B06_Section_UI_MassHaul_Balloon \u2014 \ubb3c\ub7c9 \ub9d0\ud48d\uc120 \ubc30\uce58 \ubc0f \uc870\uc791", + "norm_label": "3. \u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "B06_Section_UI_MassHaul_Curve.md", + "file_type": "document", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_MassHaul_Curve.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b06_section_frontend_b06_section_ui_masshaul_curve", + "community": 83, + "community_name": "B06_Section_UI_MassHaul_Curve \u2014 \uc720\ud1a0\uace1\uc120 \uada4\uc801 \ubcf4\uac04 \ubc0f \ub80c\ub354\ub9c1", + "norm_label": "b06_section_ui_masshaul_curve.md" + }, + { + "label": "B06_Section_UI_MassHaul_Curve \u2014 \uc720\ud1a0\uace1\uc120 \uada4\uc801 \ubcf4\uac04 \ubc0f \ub80c\ub354\ub9c1", + "file_type": "document", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_MassHaul_Curve.md", + "source_location": "L9", + "_origin": "ast", + "id": "pages_b06_section_frontend_b06_section_ui_masshaul_curve_b06_section_ui_masshaul_curve_\uc720\ud1a0\uace1\uc120_\uada4\uc801_\ubcf4\uac04_\ubc0f_\ub80c\ub354\ub9c1", + "community": 83, + "community_name": "B06_Section_UI_MassHaul_Curve \u2014 \uc720\ud1a0\uace1\uc120 \uada4\uc801 \ubcf4\uac04 \ubc0f \ub80c\ub354\ub9c1", + "norm_label": "b06_section_ui_masshaul_curve \u2014 \u110b\u1172\u1110\u1169\u1100\u1169\u11a8\u1109\u1165\u11ab \u1100\u1170\u110c\u1165\u11a8 \u1107\u1169\u1100\u1161\u11ab \u1106\u1175\u11be \u1105\u1166\u11ab\u1103\u1165\u1105\u1175\u11bc" + }, + { + "label": "1. \uac1c\uc694 \ubc0f \uc5ed\ud560", + "file_type": "document", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_MassHaul_Curve.md", + "source_location": "L11", + "_origin": "ast", + "id": "pages_b06_section_frontend_b06_section_ui_masshaul_curve_1_\uac1c\uc694_\ubc0f_\uc5ed\ud560", + "community": 83, + "community_name": "B06_Section_UI_MassHaul_Curve \u2014 \uc720\ud1a0\uace1\uc120 \uada4\uc801 \ubcf4\uac04 \ubc0f \ub80c\ub354\ub9c1", + "norm_label": "1. \u1100\u1162\u110b\u116d \u1106\u1175\u11be \u110b\u1167\u11a8\u1112\u1161\u11af" + }, + { + "label": "2. \uc8fc\uc694 \uae30\ub2a5 \ubc0f \uae30\ud558 \uc218\ud559", + "file_type": "document", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_MassHaul_Curve.md", + "source_location": "L15", + "_origin": "ast", + "id": "pages_b06_section_frontend_b06_section_ui_masshaul_curve_2_\uc8fc\uc694_\uae30\ub2a5_\ubc0f_\uae30\ud558_\uc218\ud559", + "community": 83, + "community_name": "B06_Section_UI_MassHaul_Curve \u2014 \uc720\ud1a0\uace1\uc120 \uada4\uc801 \ubcf4\uac04 \ubc0f \ub80c\ub354\ub9c1", + "norm_label": "2. \u110c\u116e\u110b\u116d \u1100\u1175\u1102\u1173\u11bc \u1106\u1175\u11be \u1100\u1175\u1112\u1161 \u1109\u116e\u1112\u1161\u11a8" + }, + { + "label": "3. \uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_MassHaul_Curve.md", + "source_location": "L22", + "_origin": "ast", + "id": "pages_b06_section_frontend_b06_section_ui_masshaul_curve_3_\uc758\uc874\uc131", + "community": 83, + "community_name": "B06_Section_UI_MassHaul_Curve \u2014 \uc720\ud1a0\uace1\uc120 \uada4\uc801 \ubcf4\uac04 \ubc0f \ub80c\ub354\ub9c1", + "norm_label": "3. \u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "B06_Section_UI_MassHaul_Settle.md", + "file_type": "document", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_MassHaul_Settle.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b06_section_frontend_b06_section_ui_masshaul_settle", + "community": 84, + "community_name": "B06_Section_UI_MassHaul_Settle \u2014 \ud1a0\ub7c9 \uc815\uc0b0 \ubc0f \uc7a5\uac70\ub9ac \uc0c1\uc1c4 \uc5d4\uc9c4", + "norm_label": "b06_section_ui_masshaul_settle.md" + }, + { + "label": "B06_Section_UI_MassHaul_Settle \u2014 \ud1a0\ub7c9 \uc815\uc0b0 \ubc0f \uc7a5\uac70\ub9ac \uc0c1\uc1c4 \uc5d4\uc9c4", + "file_type": "document", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_MassHaul_Settle.md", + "source_location": "L9", + "_origin": "ast", + "id": "pages_b06_section_frontend_b06_section_ui_masshaul_settle_b06_section_ui_masshaul_settle_\ud1a0\ub7c9_\uc815\uc0b0_\ubc0f_\uc7a5\uac70\ub9ac_\uc0c1\uc1c4_\uc5d4\uc9c4", + "community": 84, + "community_name": "B06_Section_UI_MassHaul_Settle \u2014 \ud1a0\ub7c9 \uc815\uc0b0 \ubc0f \uc7a5\uac70\ub9ac \uc0c1\uc1c4 \uc5d4\uc9c4", + "norm_label": "b06_section_ui_masshaul_settle \u2014 \u1110\u1169\u1105\u1163\u11bc \u110c\u1165\u11bc\u1109\u1161\u11ab \u1106\u1175\u11be \u110c\u1161\u11bc\u1100\u1165\u1105\u1175 \u1109\u1161\u11bc\u1109\u116b \u110b\u1166\u11ab\u110c\u1175\u11ab" + }, + { + "label": "1. \uac1c\uc694 \ubc0f \uc5ed\ud560", + "file_type": "document", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_MassHaul_Settle.md", + "source_location": "L11", + "_origin": "ast", + "id": "pages_b06_section_frontend_b06_section_ui_masshaul_settle_1_\uac1c\uc694_\ubc0f_\uc5ed\ud560", + "community": 84, + "community_name": "B06_Section_UI_MassHaul_Settle \u2014 \ud1a0\ub7c9 \uc815\uc0b0 \ubc0f \uc7a5\uac70\ub9ac \uc0c1\uc1c4 \uc5d4\uc9c4", + "norm_label": "1. \u1100\u1162\u110b\u116d \u1106\u1175\u11be \u110b\u1167\u11a8\u1112\u1161\u11af" + }, + { + "label": "2. \uc8fc\uc694 \uae30\ub2a5 \ubc0f \ub85c\uc9c1", + "file_type": "document", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_MassHaul_Settle.md", + "source_location": "L15", + "_origin": "ast", + "id": "pages_b06_section_frontend_b06_section_ui_masshaul_settle_2_\uc8fc\uc694_\uae30\ub2a5_\ubc0f_\ub85c\uc9c1", + "community": 84, + "community_name": "B06_Section_UI_MassHaul_Settle \u2014 \ud1a0\ub7c9 \uc815\uc0b0 \ubc0f \uc7a5\uac70\ub9ac \uc0c1\uc1c4 \uc5d4\uc9c4", + "norm_label": "2. \u110c\u116e\u110b\u116d \u1100\u1175\u1102\u1173\u11bc \u1106\u1175\u11be \u1105\u1169\u110c\u1175\u11a8" + }, + { + "label": "3. \uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_MassHaul_Settle.md", + "source_location": "L23", + "_origin": "ast", + "id": "pages_b06_section_frontend_b06_section_ui_masshaul_settle_3_\uc758\uc874\uc131", + "community": 84, + "community_name": "B06_Section_UI_MassHaul_Settle \u2014 \ud1a0\ub7c9 \uc815\uc0b0 \ubc0f \uc7a5\uac70\ub9ac \uc0c1\uc1c4 \uc5d4\uc9c4", + "norm_label": "3. \u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "B06_Section_UI_MassHaul_View.md", + "file_type": "document", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_MassHaul_View.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b06_section_frontend_b06_section_ui_masshaul_view", + "community": 85, + "community_name": "B06_Section_UI_MassHaul_View \u2014 \uc720\ud1a0\uace1\uc120 \uc2dc\uac01\ud654 \ub80c\ub354\ub7ec", + "norm_label": "b06_section_ui_masshaul_view.md" + }, + { + "label": "B06_Section_UI_MassHaul_View \u2014 \uc720\ud1a0\uace1\uc120 \uc2dc\uac01\ud654 \ub80c\ub354\ub7ec", + "file_type": "document", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_MassHaul_View.md", + "source_location": "L9", + "_origin": "ast", + "id": "pages_b06_section_frontend_b06_section_ui_masshaul_view_b06_section_ui_masshaul_view_\uc720\ud1a0\uace1\uc120_\uc2dc\uac01\ud654_\ub80c\ub354\ub7ec", + "community": 85, + "community_name": "B06_Section_UI_MassHaul_View \u2014 \uc720\ud1a0\uace1\uc120 \uc2dc\uac01\ud654 \ub80c\ub354\ub7ec", + "norm_label": "b06_section_ui_masshaul_view \u2014 \u110b\u1172\u1110\u1169\u1100\u1169\u11a8\u1109\u1165\u11ab \u1109\u1175\u1100\u1161\u11a8\u1112\u116a \u1105\u1166\u11ab\u1103\u1165\u1105\u1165" + }, + { + "label": "1. \uac1c\uc694 \ubc0f \uc5ed\ud560", + "file_type": "document", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_MassHaul_View.md", + "source_location": "L11", + "_origin": "ast", + "id": "pages_b06_section_frontend_b06_section_ui_masshaul_view_1_\uac1c\uc694_\ubc0f_\uc5ed\ud560", + "community": 85, + "community_name": "B06_Section_UI_MassHaul_View \u2014 \uc720\ud1a0\uace1\uc120 \uc2dc\uac01\ud654 \ub80c\ub354\ub7ec", + "norm_label": "1. \u1100\u1162\u110b\u116d \u1106\u1175\u11be \u110b\u1167\u11a8\u1112\u1161\u11af" + }, + { + "label": "2. \uc8fc\uc694 \uae30\ub2a5 \ubc0f \ud568\uc218", + "file_type": "document", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_MassHaul_View.md", + "source_location": "L15", + "_origin": "ast", + "id": "pages_b06_section_frontend_b06_section_ui_masshaul_view_2_\uc8fc\uc694_\uae30\ub2a5_\ubc0f_\ud568\uc218", + "community": 85, + "community_name": "B06_Section_UI_MassHaul_View \u2014 \uc720\ud1a0\uace1\uc120 \uc2dc\uac01\ud654 \ub80c\ub354\ub7ec", + "norm_label": "2. \u110c\u116e\u110b\u116d \u1100\u1175\u1102\u1173\u11bc \u1106\u1175\u11be \u1112\u1161\u11b7\u1109\u116e" + }, + { + "label": "3. \uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_MassHaul_View.md", + "source_location": "L23", + "_origin": "ast", + "id": "pages_b06_section_frontend_b06_section_ui_masshaul_view_3_\uc758\uc874\uc131", + "community": 85, + "community_name": "B06_Section_UI_MassHaul_View \u2014 \uc720\ud1a0\uace1\uc120 \uc2dc\uac01\ud654 \ub80c\ub354\ub7ec", + "norm_label": "3. \u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "B06_Section_UI_Page.md", + "file_type": "document", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_Page.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b06_section_frontend_b06_section_ui_page", + "community": 86, + "community_name": "B06_Section_UI_Page \u2014 B06 \uba54\uc778 \ud398\uc774\uc9c0 \uc624\ucf00\uc2a4\ud2b8\ub808\uc774\ud130", + "norm_label": "b06_section_ui_page.md" + }, + { + "label": "B06_Section_UI_Page \u2014 B06 \uba54\uc778 \ud398\uc774\uc9c0 \uc624\ucf00\uc2a4\ud2b8\ub808\uc774\ud130", + "file_type": "document", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_Page.md", + "source_location": "L9", + "_origin": "ast", + "id": "pages_b06_section_frontend_b06_section_ui_page_b06_section_ui_page_b06_\uba54\uc778_\ud398\uc774\uc9c0_\uc624\ucf00\uc2a4\ud2b8\ub808\uc774\ud130", + "community": 86, + "community_name": "B06_Section_UI_Page \u2014 B06 \uba54\uc778 \ud398\uc774\uc9c0 \uc624\ucf00\uc2a4\ud2b8\ub808\uc774\ud130", + "norm_label": "b06_section_ui_page \u2014 b06 \u1106\u1166\u110b\u1175\u11ab \u1111\u1166\u110b\u1175\u110c\u1175 \u110b\u1169\u110f\u1166\u1109\u1173\u1110\u1173\u1105\u1166\u110b\u1175\u1110\u1165" + }, + { + "label": "1. \uac1c\uc694 \ubc0f \uc5ed\ud560", + "file_type": "document", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_Page.md", + "source_location": "L11", + "_origin": "ast", + "id": "pages_b06_section_frontend_b06_section_ui_page_1_\uac1c\uc694_\ubc0f_\uc5ed\ud560", + "community": 86, + "community_name": "B06_Section_UI_Page \u2014 B06 \uba54\uc778 \ud398\uc774\uc9c0 \uc624\ucf00\uc2a4\ud2b8\ub808\uc774\ud130", + "norm_label": "1. \u1100\u1162\u110b\u116d \u1106\u1175\u11be \u110b\u1167\u11a8\u1112\u1161\u11af" + }, + { + "label": "2. \uc8fc\uc694 \uae30\ub2a5 \ubc0f \ud568\uc218", + "file_type": "document", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_Page.md", + "source_location": "L15", + "_origin": "ast", + "id": "pages_b06_section_frontend_b06_section_ui_page_2_\uc8fc\uc694_\uae30\ub2a5_\ubc0f_\ud568\uc218", + "community": 86, + "community_name": "B06_Section_UI_Page \u2014 B06 \uba54\uc778 \ud398\uc774\uc9c0 \uc624\ucf00\uc2a4\ud2b8\ub808\uc774\ud130", + "norm_label": "2. \u110c\u116e\u110b\u116d \u1100\u1175\u1102\u1173\u11bc \u1106\u1175\u11be \u1112\u1161\u11b7\u1109\u116e" + }, + { + "label": "3. \uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_Page.md", + "source_location": "L27", + "_origin": "ast", + "id": "pages_b06_section_frontend_b06_section_ui_page_3_\uc758\uc874\uc131", + "community": 86, + "community_name": "B06_Section_UI_Page \u2014 B06 \uba54\uc778 \ud398\uc774\uc9c0 \uc624\ucf00\uc2a4\ud2b8\ub808\uc774\ud130", + "norm_label": "3. \u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "B06_Section_UI_Section_View.md", + "file_type": "document", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_Section_View.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b06_section_frontend_b06_section_ui_section_view", + "community": 87, + "community_name": "B06_Section_UI_Section_View \u2014 \uc885/\ud6a1\ub2e8 \ubc0f \uc720\ud1a0\uace1\uc120 \ubdf0 \uc870\ub9bd", + "norm_label": "b06_section_ui_section_view.md" + }, + { + "label": "B06_Section_UI_Section_View \u2014 \uc885/\ud6a1\ub2e8 \ubc0f \uc720\ud1a0\uace1\uc120 \ubdf0 \uc870\ub9bd", + "file_type": "document", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_Section_View.md", + "source_location": "L9", + "_origin": "ast", + "id": "pages_b06_section_frontend_b06_section_ui_section_view_b06_section_ui_section_view_\uc885_\ud6a1\ub2e8_\ubc0f_\uc720\ud1a0\uace1\uc120_\ubdf0_\uc870\ub9bd", + "community": 87, + "community_name": "B06_Section_UI_Section_View \u2014 \uc885/\ud6a1\ub2e8 \ubc0f \uc720\ud1a0\uace1\uc120 \ubdf0 \uc870\ub9bd", + "norm_label": "b06_section_ui_section_view \u2014 \u110c\u1169\u11bc/\u1112\u116c\u11bc\u1103\u1161\u11ab \u1106\u1175\u11be \u110b\u1172\u1110\u1169\u1100\u1169\u11a8\u1109\u1165\u11ab \u1107\u1172 \u110c\u1169\u1105\u1175\u11b8" + }, + { + "label": "1. \uac1c\uc694 \ubc0f \uc5ed\ud560", + "file_type": "document", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_Section_View.md", + "source_location": "L11", + "_origin": "ast", + "id": "pages_b06_section_frontend_b06_section_ui_section_view_1_\uac1c\uc694_\ubc0f_\uc5ed\ud560", + "community": 87, + "community_name": "B06_Section_UI_Section_View \u2014 \uc885/\ud6a1\ub2e8 \ubc0f \uc720\ud1a0\uace1\uc120 \ubdf0 \uc870\ub9bd", + "norm_label": "1. \u1100\u1162\u110b\u116d \u1106\u1175\u11be \u110b\u1167\u11a8\u1112\u1161\u11af" + }, + { + "label": "2. \uc8fc\uc694 \uae30\ub2a5 \ubc0f \ud568\uc218", + "file_type": "document", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_Section_View.md", + "source_location": "L15", + "_origin": "ast", + "id": "pages_b06_section_frontend_b06_section_ui_section_view_2_\uc8fc\uc694_\uae30\ub2a5_\ubc0f_\ud568\uc218", + "community": 87, + "community_name": "B06_Section_UI_Section_View \u2014 \uc885/\ud6a1\ub2e8 \ubc0f \uc720\ud1a0\uace1\uc120 \ubdf0 \uc870\ub9bd", + "norm_label": "2. \u110c\u116e\u110b\u116d \u1100\u1175\u1102\u1173\u11bc \u1106\u1175\u11be \u1112\u1161\u11b7\u1109\u116e" + }, + { + "label": "3. \uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_Section_View.md", + "source_location": "L28", + "_origin": "ast", + "id": "pages_b06_section_frontend_b06_section_ui_section_view_3_\uc758\uc874\uc131", + "community": 87, + "community_name": "B06_Section_UI_Section_View \u2014 \uc885/\ud6a1\ub2e8 \ubc0f \uc720\ud1a0\uace1\uc120 \ubdf0 \uc870\ub9bd", + "norm_label": "3. \u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "B06_Section_UI_Standard_Diagram.md", + "file_type": "document", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_Standard_Diagram.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b06_section_frontend_b06_section_ui_standard_diagram", + "community": 109, + "community_name": "B06_Section_UI_Standard_Diagram \u2014 \ud45c\uc900\ub2e8\uba74 \ubaa8\uc2dd\ub3c4 \ucef4\ud3ec\ub10c\ud2b8", + "norm_label": "b06_section_ui_standard_diagram.md" + }, + { + "label": "B06_Section_UI_Standard_Diagram \u2014 \ud45c\uc900\ub2e8\uba74 \ubaa8\uc2dd\ub3c4 \ucef4\ud3ec\ub10c\ud2b8", + "file_type": "document", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_Standard_Diagram.md", + "source_location": "L9", + "_origin": "ast", + "id": "pages_b06_section_frontend_b06_section_ui_standard_diagram_b06_section_ui_standard_diagram_\ud45c\uc900\ub2e8\uba74_\ubaa8\uc2dd\ub3c4_\ucef4\ud3ec\ub10c\ud2b8", + "community": 109, + "community_name": "B06_Section_UI_Standard_Diagram \u2014 \ud45c\uc900\ub2e8\uba74 \ubaa8\uc2dd\ub3c4 \ucef4\ud3ec\ub10c\ud2b8", + "norm_label": "b06_section_ui_standard_diagram \u2014 \u1111\u116d\u110c\u116e\u11ab\u1103\u1161\u11ab\u1106\u1167\u11ab \u1106\u1169\u1109\u1175\u11a8\u1103\u1169 \u110f\u1165\u11b7\u1111\u1169\u1102\u1165\u11ab\u1110\u1173" + }, + { + "label": "1. \uac1c\uc694 \ubc0f \uc5ed\ud560", + "file_type": "document", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_Standard_Diagram.md", + "source_location": "L11", + "_origin": "ast", + "id": "pages_b06_section_frontend_b06_section_ui_standard_diagram_1_\uac1c\uc694_\ubc0f_\uc5ed\ud560", + "community": 109, + "community_name": "B06_Section_UI_Standard_Diagram \u2014 \ud45c\uc900\ub2e8\uba74 \ubaa8\uc2dd\ub3c4 \ucef4\ud3ec\ub10c\ud2b8", + "norm_label": "1. \u1100\u1162\u110b\u116d \u1106\u1175\u11be \u110b\u1167\u11a8\u1112\u1161\u11af" + }, + { + "label": "2. \uc8fc\uc694 \uae30\ub2a5", + "file_type": "document", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_Standard_Diagram.md", + "source_location": "L15", + "_origin": "ast", + "id": "pages_b06_section_frontend_b06_section_ui_standard_diagram_2_\uc8fc\uc694_\uae30\ub2a5", + "community": 109, + "community_name": "B06_Section_UI_Standard_Diagram \u2014 \ud45c\uc900\ub2e8\uba74 \ubaa8\uc2dd\ub3c4 \ucef4\ud3ec\ub10c\ud2b8", + "norm_label": "2. \u110c\u116e\u110b\u116d \u1100\u1175\u1102\u1173\u11bc" + }, + { + "label": "B06_Section_UI_Standard_Panel.md", + "file_type": "document", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_Standard_Panel.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b06_section_frontend_b06_section_ui_standard_panel", + "community": 110, + "community_name": "B06_Section_UI_Standard_Panel \u2014 \ud45c\uc900\ub2e8\uba74 \uc785\ub825 \ubc0f \uc81c\uc5b4 \ud328\ub110", + "norm_label": "b06_section_ui_standard_panel.md" + }, + { + "label": "B06_Section_UI_Standard_Panel \u2014 \ud45c\uc900\ub2e8\uba74 \uc785\ub825 \ubc0f \uc81c\uc5b4 \ud328\ub110", + "file_type": "document", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_Standard_Panel.md", + "source_location": "L9", + "_origin": "ast", + "id": "pages_b06_section_frontend_b06_section_ui_standard_panel_b06_section_ui_standard_panel_\ud45c\uc900\ub2e8\uba74_\uc785\ub825_\ubc0f_\uc81c\uc5b4_\ud328\ub110", + "community": 110, + "community_name": "B06_Section_UI_Standard_Panel \u2014 \ud45c\uc900\ub2e8\uba74 \uc785\ub825 \ubc0f \uc81c\uc5b4 \ud328\ub110", + "norm_label": "b06_section_ui_standard_panel \u2014 \u1111\u116d\u110c\u116e\u11ab\u1103\u1161\u11ab\u1106\u1167\u11ab \u110b\u1175\u11b8\u1105\u1167\u11a8 \u1106\u1175\u11be \u110c\u1166\u110b\u1165 \u1111\u1162\u1102\u1165\u11af" + }, + { + "label": "1. \uac1c\uc694 \ubc0f \uc5ed\ud560", + "file_type": "document", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_Standard_Panel.md", + "source_location": "L11", + "_origin": "ast", + "id": "pages_b06_section_frontend_b06_section_ui_standard_panel_1_\uac1c\uc694_\ubc0f_\uc5ed\ud560", + "community": 110, + "community_name": "B06_Section_UI_Standard_Panel \u2014 \ud45c\uc900\ub2e8\uba74 \uc785\ub825 \ubc0f \uc81c\uc5b4 \ud328\ub110", + "norm_label": "1. \u1100\u1162\u110b\u116d \u1106\u1175\u11be \u110b\u1167\u11a8\u1112\u1161\u11af" + }, + { + "label": "2. \uc8fc\uc694 \uae30\ub2a5", + "file_type": "document", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_Standard_Panel.md", + "source_location": "L15", + "_origin": "ast", + "id": "pages_b06_section_frontend_b06_section_ui_standard_panel_2_\uc8fc\uc694_\uae30\ub2a5", + "community": 110, + "community_name": "B06_Section_UI_Standard_Panel \u2014 \ud45c\uc900\ub2e8\uba74 \uc785\ub825 \ubc0f \uc81c\uc5b4 \ud328\ub110", + "norm_label": "2. \u110c\u116e\u110b\u116d \u1100\u1175\u1102\u1173\u11bc" + }, + { + "label": "B07_frontend.md", + "file_type": "document", + "source_file": "pages/B07_DesignDetail/B07_frontend.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b07_designdetail_b07_frontend", + "community": 33, + "community_name": "\ud604\uc7ac \uad6c\ud604 \ud604\ud669 \u2014 \uc18c\uc2a4 \uc77d\uae30 \uac10\uc0ac", + "norm_label": "b07_frontend.md" + }, + { + "label": "B07 DesignDetail \u2014 \ud604\uc7ac \ucc45\uc784", + "file_type": "document", + "source_file": "pages/B07_DesignDetail/B07_frontend.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b07_designdetail_b07_frontend_b07_designdetail_\ud604\uc7ac_\ucc45\uc784", + "community": 33, + "community_name": "\ud604\uc7ac \uad6c\ud604 \ud604\ud669 \u2014 \uc18c\uc2a4 \uc77d\uae30 \uac10\uc0ac", + "norm_label": "b07 designdetail \u2014 \u1112\u1167\u11ab\u110c\u1162 \u110e\u1162\u11a8\u110b\u1175\u11b7" + }, + { + "label": "B07_standard_drawings_2026_09.md", + "file_type": "document", + "source_file": "pages/B07_DesignDetail/B07_standard_drawings_2026_09.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b07_designdetail_b07_standard_drawings_2026_09", + "community": 46, + "community_name": "\uc784\ub3c4\uae30\uc220\uad50\ubcf8 \uc6d0\ubb38 md \ucd94\ucd9c \ud488\uc9c8 \uacb0\ud568", + "norm_label": "b07_standard_drawings_2026_09.md" + }, + { + "label": "B07 \uad6c\uc870\ubb3c \ud45c\uc900\ub3c4 \u2014 \uc870\uc0ac\u00b7\ud569\uc758\uc640 \ud604\uc7ac \ud1b5\ub85c", + "file_type": "document", + "source_file": "pages/B07_DesignDetail/B07_standard_drawings_2026_09.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b07_designdetail_b07_standard_drawings_2026_09_b07_\uad6c\uc870\ubb3c_\ud45c\uc900\ub3c4_\uc870\uc0ac_\ud569\uc758\uc640_\ud604\uc7ac_\ud1b5\ub85c", + "community": 46, + "community_name": "\uc784\ub3c4\uae30\uc220\uad50\ubcf8 \uc6d0\ubb38 md \ucd94\ucd9c \ud488\uc9c8 \uacb0\ud568", + "norm_label": "b07 \u1100\u116e\u110c\u1169\u1106\u116e\u11af \u1111\u116d\u110c\u116e\u11ab\u1103\u1169 \u2014 \u110c\u1169\u1109\u1161\u00b7\u1112\u1161\u11b8\u110b\u1174\u110b\u116a \u1112\u1167\u11ab\u110c\u1162 \u1110\u1169\u11bc\u1105\u1169" + }, + { + "label": "\ub370\uc774\ud130 \ud750\ub984", + "file_type": "document", + "source_file": "pages/B07_DesignDetail/B07_standard_drawings_2026_09.md", + "source_location": "L14", + "_origin": "ast", + "id": "pages_b07_designdetail_b07_standard_drawings_2026_09_\ub370\uc774\ud130_\ud750\ub984", + "community": 46, + "community_name": "\uc784\ub3c4\uae30\uc220\uad50\ubcf8 \uc6d0\ubb38 md \ucd94\ucd9c \ud488\uc9c8 \uacb0\ud568", + "norm_label": "\u1103\u1166\u110b\u1175\u1110\u1165 \u1112\u1173\u1105\u1173\u11b7" + }, + { + "label": "\uad6c\ud604 \uc9c4\uc785\uc810", + "file_type": "document", + "source_file": "pages/B07_DesignDetail/B07_standard_drawings_2026_09.md", + "source_location": "L24", + "_origin": "ast", + "id": "pages_b07_designdetail_b07_standard_drawings_2026_09_\uad6c\ud604_\uc9c4\uc785\uc810", + "community": 46, + "community_name": "\uc784\ub3c4\uae30\uc220\uad50\ubcf8 \uc6d0\ubb38 md \ucd94\ucd9c \ud488\uc9c8 \uacb0\ud568", + "norm_label": "\u1100\u116e\u1112\u1167\u11ab \u110c\u1175\u11ab\u110b\u1175\u11b8\u110c\u1165\u11b7" + }, + { + "label": "\uc870\uc0ac\ub85c \ud655\uc778\ub41c \uc124\uacc4 \uc6d0\uce59", + "file_type": "document", + "source_file": "pages/B07_DesignDetail/B07_standard_drawings_2026_09.md", + "source_location": "L35", + "_origin": "ast", + "id": "pages_b07_designdetail_b07_standard_drawings_2026_09_\uc870\uc0ac\ub85c_\ud655\uc778\ub41c_\uc124\uacc4_\uc6d0\uce59", + "community": 46, + "community_name": "\uc784\ub3c4\uae30\uc220\uad50\ubcf8 \uc6d0\ubb38 md \ucd94\ucd9c \ud488\uc9c8 \uacb0\ud568", + "norm_label": "\u110c\u1169\u1109\u1161\u1105\u1169 \u1112\u116a\u11a8\u110b\u1175\u11ab\u1103\u116c\u11ab \u1109\u1165\u11af\u1100\u1168 \u110b\u116f\u11ab\u110e\u1175\u11a8" + }, + { + "label": "\uadfc\uac70\uc640 \ub0a8\uc740 \ubd88\ud655\uc2e4\uc131", + "file_type": "document", + "source_file": "pages/B07_DesignDetail/B07_standard_drawings_2026_09.md", + "source_location": "L43", + "_origin": "ast", + "id": "pages_b07_designdetail_b07_standard_drawings_2026_09_\uadfc\uac70\uc640_\ub0a8\uc740_\ubd88\ud655\uc2e4\uc131", + "community": 46, + "community_name": "\uc784\ub3c4\uae30\uc220\uad50\ubcf8 \uc6d0\ubb38 md \ucd94\ucd9c \ud488\uc9c8 \uacb0\ud568", + "norm_label": "\u1100\u1173\u11ab\u1100\u1165\u110b\u116a \u1102\u1161\u11b7\u110b\u1173\u11ab \u1107\u116e\u11af\u1112\u116a\u11a8\u1109\u1175\u11af\u1109\u1165\u11bc" + }, + { + "label": "9\uc6d4 9\uc77c \uad6c\ud604\u00b7\uc2e4\uce21 \ubcf4\uac15", + "file_type": "document", + "source_file": "pages/B07_DesignDetail/B07_standard_drawings_2026_09.md", + "source_location": "L49", + "_origin": "ast", + "id": "pages_b07_designdetail_b07_standard_drawings_2026_09_9\uc6d4_9\uc77c_\uad6c\ud604_\uc2e4\uce21_\ubcf4\uac15", + "community": 46, + "community_name": "\uc784\ub3c4\uae30\uc220\uad50\ubcf8 \uc6d0\ubb38 md \ucd94\ucd9c \ud488\uc9c8 \uacb0\ud568", + "norm_label": "9\u110b\u116f\u11af 9\u110b\u1175\u11af \u1100\u116e\u1112\u1167\u11ab\u00b7\u1109\u1175\u11af\u110e\u1173\u11a8 \u1107\u1169\u1100\u1161\u11bc" + }, + { + "label": "B07_backend.md", + "file_type": "document", + "source_file": "pages/B07_Quantity/B07_backend.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b07_quantity_b07_backend", + "community": 88, + "community_name": "B07 Quantity \u2014 Backend", + "norm_label": "b07_backend.md" + }, + { + "label": "B07 Quantity \u2014 Backend", + "file_type": "document", + "source_file": "pages/B07_Quantity/B07_backend.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b07_quantity_b07_backend_b07_quantity_backend", + "community": 88, + "community_name": "B07 Quantity \u2014 Backend", + "norm_label": "b07 quantity \u2014 backend" + }, + { + "label": "\uad6c\ud604\ub41c \ud56d\ubaa9", + "file_type": "document", + "source_file": "pages/B07_Quantity/B07_backend.md", + "source_location": "L14", + "_origin": "ast", + "id": "pages_b07_quantity_b07_backend_\uad6c\ud604\ub41c_\ud56d\ubaa9", + "community": 88, + "community_name": "B07 Quantity \u2014 Backend", + "norm_label": "\u1100\u116e\u1112\u1167\u11ab\u1103\u116c\u11ab \u1112\u1161\u11bc\u1106\u1169\u11a8" + }, + { + "label": "\uad6c\ud604\ub418\uc9c0 \uc54a\uc740 \ud56d\ubaa9", + "file_type": "document", + "source_file": "pages/B07_Quantity/B07_backend.md", + "source_location": "L21", + "_origin": "ast", + "id": "pages_b07_quantity_b07_backend_\uad6c\ud604\ub418\uc9c0_\uc54a\uc740_\ud56d\ubaa9", + "community": 88, + "community_name": "B07 Quantity \u2014 Backend", + "norm_label": "\u1100\u116e\u1112\u1167\u11ab\u1103\u116c\u110c\u1175 \u110b\u1161\u11ad\u110b\u1173\u11ab \u1112\u1161\u11bc\u1106\u1169\u11a8" + }, + { + "label": "\ucc45\uc784 \uacbd\uacc4 \ubbf8\uacb0", + "file_type": "document", + "source_file": "pages/B07_Quantity/B07_backend.md", + "source_location": "L30", + "_origin": "ast", + "id": "pages_b07_quantity_b07_backend_\ucc45\uc784_\uacbd\uacc4_\ubbf8\uacb0", + "community": 88, + "community_name": "B07 Quantity \u2014 Backend", + "norm_label": "\u110e\u1162\u11a8\u110b\u1175\u11b7 \u1100\u1167\u11bc\u1100\u1168 \u1106\u1175\u1100\u1167\u11af" + }, + { + "label": "B07_db.md", + "file_type": "document", + "source_file": "pages/B07_Quantity/B07_db.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b07_quantity_b07_db", + "community": 153, + "community_name": "B07_db.md", + "norm_label": "b07_db.md" + }, + { + "label": "B07 Quantity \u2014 DB", + "file_type": "document", + "source_file": "pages/B07_Quantity/B07_db.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b07_quantity_b07_db_b07_quantity_db", + "community": 153, + "community_name": "B07_db.md", + "norm_label": "b07 quantity \u2014 db" + }, + { + "label": "B07_frontend.md", + "file_type": "document", + "source_file": "pages/B07_Quantity/B07_frontend.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b07_quantity_b07_frontend", + "community": 57, + "community_name": "2026-09-07 \uc644\ub8cc\u00b7\ubcf4\ub958 \uc694\uc57d", + "norm_label": "b07_frontend.md" + }, + { + "label": "B07 Quantity \u2014 Frontend", + "file_type": "document", + "source_file": "pages/B07_Quantity/B07_frontend.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b07_quantity_b07_frontend_b07_quantity_frontend", + "community": 57, + "community_name": "2026-09-07 \uc644\ub8cc\u00b7\ubcf4\ub958 \uc694\uc57d", + "norm_label": "b07 quantity \u2014 frontend" + }, + { + "label": "\ud604\uc7ac \uc0ac\uc6a9\uc790 \ub3d9\uc791", + "file_type": "document", + "source_file": "pages/B07_Quantity/B07_frontend.md", + "source_location": "L23", + "_origin": "ast", + "id": "pages_b07_quantity_b07_frontend_\ud604\uc7ac_\uc0ac\uc6a9\uc790_\ub3d9\uc791", + "community": 57, + "community_name": "2026-09-07 \uc644\ub8cc\u00b7\ubcf4\ub958 \uc694\uc57d", + "norm_label": "\u1112\u1167\u11ab\u110c\u1162 \u1109\u1161\u110b\u116d\u11bc\u110c\u1161 \u1103\u1169\u11bc\u110c\u1161\u11a8" + }, + { + "label": "B07_Quantity_Router.md", + "file_type": "document", + "source_file": "pages/B07_Quantity/backend/B07_Quantity_Router.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b07_quantity_backend_b07_quantity_router", + "community": 191, + "community_name": "B07_Quantity_Router.md", + "norm_label": "b07_quantity_router.md" + }, + { + "label": "B07_Quantity_Router.py", + "file_type": "document", + "source_file": "pages/B07_Quantity/backend/B07_Quantity_Router.md", + "source_location": "L11", + "_origin": "ast", + "id": "pages_b07_quantity_backend_b07_quantity_router_b07_quantity_router_py", + "community": 191, + "community_name": "B07_Quantity_Router.md", + "norm_label": "b07_quantity_router.py" + }, + { + "label": "B08_CAD_blocks.md", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_CAD_blocks.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_cad_blocks", + "community": 89, + "community_name": "B08 CAD \ube14\ub85d \ub77c\uc774\ube0c\ub7ec\ub9ac\u00b7\uc0ac\uc9c4", + "norm_label": "b08_cad_blocks.md" + }, + { + "label": "B08 CAD \ube14\ub85d \ub77c\uc774\ube0c\ub7ec\ub9ac\u00b7\uc0ac\uc9c4", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_CAD_blocks.md", + "source_location": "L9", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_cad_blocks_b08_cad_\ube14\ub85d_\ub77c\uc774\ube0c\ub7ec\ub9ac_\uc0ac\uc9c4", + "community": 89, + "community_name": "B08 CAD \ube14\ub85d \ub77c\uc774\ube0c\ub7ec\ub9ac\u00b7\uc0ac\uc9c4", + "norm_label": "b08 cad \u1107\u1173\u11af\u1105\u1169\u11a8 \u1105\u1161\u110b\u1175\u1107\u1173\u1105\u1165\u1105\u1175\u00b7\u1109\u1161\u110c\u1175\u11ab" + }, + { + "label": "\uad6c\ud604", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_CAD_blocks.md", + "source_location": "L11", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_cad_blocks_\uad6c\ud604", + "community": 89, + "community_name": "B08 CAD \ube14\ub85d \ub77c\uc774\ube0c\ub7ec\ub9ac\u00b7\uc0ac\uc9c4", + "norm_label": "\u1100\u116e\u1112\u1167\u11ab" + }, + { + "label": "\ubc94\uc704 \uacb0\uc815", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_CAD_blocks.md", + "source_location": "L23", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_cad_blocks_\ubc94\uc704_\uacb0\uc815", + "community": 89, + "community_name": "B08 CAD \ube14\ub85d \ub77c\uc774\ube0c\ub7ec\ub9ac\u00b7\uc0ac\uc9c4", + "norm_label": "\u1107\u1165\u11b7\u110b\u1171 \u1100\u1167\u11af\u110c\u1165\u11bc" + }, + { + "label": "\uac80\uc99d", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_CAD_blocks.md", + "source_location": "L29", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_cad_blocks_\uac80\uc99d", + "community": 89, + "community_name": "B08 CAD \ube14\ub85d \ub77c\uc774\ube0c\ub7ec\ub9ac\u00b7\uc0ac\uc9c4", + "norm_label": "\u1100\u1165\u11b7\u110c\u1173\u11bc" + }, + { + "label": "B08_CAD_commands.md", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_CAD_commands.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_cad_commands", + "community": 90, + "community_name": "B08 OpenWebCAD \uba85\ub839 \uccb4\uacc4", + "norm_label": "b08_cad_commands.md" + }, + { + "label": "B08 OpenWebCAD \uba85\ub839 \uccb4\uacc4", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_CAD_commands.md", + "source_location": "L9", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_cad_commands_b08_openwebcad_\uba85\ub839_\uccb4\uacc4", + "community": 90, + "community_name": "B08 OpenWebCAD \uba85\ub839 \uccb4\uacc4", + "norm_label": "b08 openwebcad \u1106\u1167\u11bc\u1105\u1167\u11bc \u110e\u1166\u1100\u1168" + }, + { + "label": "\uad6c\ud604 \ubc94\uc704", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_CAD_commands.md", + "source_location": "L11", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_cad_commands_\uad6c\ud604_\ubc94\uc704", + "community": 90, + "community_name": "B08 OpenWebCAD \uba85\ub839 \uccb4\uacc4", + "norm_label": "\u1100\u116e\u1112\u1167\u11ab \u1107\u1165\u11b7\u110b\u1171" + }, + { + "label": "\ud575\uc2ec \uad6c\uc131", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_CAD_commands.md", + "source_location": "L21", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_cad_commands_\ud575\uc2ec_\uad6c\uc131", + "community": 90, + "community_name": "B08 OpenWebCAD \uba85\ub839 \uccb4\uacc4", + "norm_label": "\u1112\u1162\u11a8\u1109\u1175\u11b7 \u1100\u116e\u1109\u1165\u11bc" + }, + { + "label": "\uac80\uc99d\u00b7\uc81c\ud55c", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_CAD_commands.md", + "source_location": "L30", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_cad_commands_\uac80\uc99d_\uc81c\ud55c", + "community": 90, + "community_name": "B08 OpenWebCAD \uba85\ub839 \uccb4\uacc4", + "norm_label": "\u1100\u1165\u11b7\u110c\u1173\u11bc\u00b7\u110c\u1166\u1112\u1161\u11ab" + }, + { + "label": "B08_CAD_interaction.md", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_CAD_interaction.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_cad_interaction", + "community": 160, + "community_name": "B04 3D \ubc29\uc704\u00b7\uc88c\ud45c\uacc4 \ucd5c\uc2e0 \uacb0\uc815", + "norm_label": "b08_cad_interaction.md" + }, + { + "label": "B08 CAD \uae30\ubcf8 \uc870\uc791", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_CAD_interaction.md", + "source_location": "L9", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_cad_interaction_b08_cad_\uae30\ubcf8_\uc870\uc791", + "community": 160, + "community_name": "B04 3D \ubc29\uc704\u00b7\uc88c\ud45c\uacc4 \ucd5c\uc2e0 \uacb0\uc815", + "norm_label": "b08 cad \u1100\u1175\u1107\u1169\u11ab \u110c\u1169\u110c\u1161\u11a8" + }, + { + "label": "\uc785\ub825\u00b7\uc0c1\ud0dc", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_CAD_interaction.md", + "source_location": "L11", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_cad_interaction_\uc785\ub825_\uc0c1\ud0dc", + "community": 160, + "community_name": "B04 3D \ubc29\uc704\u00b7\uc88c\ud45c\uacc4 \ucd5c\uc2e0 \uacb0\uc815", + "norm_label": "\u110b\u1175\u11b8\u1105\u1167\u11a8\u00b7\u1109\u1161\u11bc\u1110\u1162" + }, + { + "label": "\uc120\ud0dd\u00b7\ud3b8\uc9d1", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_CAD_interaction.md", + "source_location": "L20", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_cad_interaction_\uc120\ud0dd_\ud3b8\uc9d1", + "community": 160, + "community_name": "B04 3D \ubc29\uc704\u00b7\uc88c\ud45c\uacc4 \ucd5c\uc2e0 \uacb0\uc815", + "norm_label": "\u1109\u1165\u11ab\u1110\u1162\u11a8\u00b7\u1111\u1167\u11ab\u110c\u1175\u11b8" + }, + { + "label": "\uac80\uc99d\u00b7\uc81c\uc678", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_CAD_interaction.md", + "source_location": "L31", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_cad_interaction_\uac80\uc99d_\uc81c\uc678", + "community": 160, + "community_name": "B04 3D \ubc29\uc704\u00b7\uc88c\ud45c\uacc4 \ucd5c\uc2e0 \uacb0\uc815", + "norm_label": "\u1100\u1165\u11b7\u110c\u1173\u11bc\u00b7\u110c\u1166\u110b\u116c" + }, + { + "label": "B08_CAD_table_entity.md", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_CAD_table_entity.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_cad_table_entity", + "community": 91, + "community_name": "B08_CAD_table_entity.md", + "norm_label": "b08_cad_table_entity.md" + }, + { + "label": "B08 CAD TableEntity", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_CAD_table_entity.md", + "source_location": "L9", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_cad_table_entity_b08_cad_tableentity", + "community": 91, + "community_name": "B08_CAD_table_entity.md", + "norm_label": "b08 cad tableentity" + }, + { + "label": "\ubaa8\ub378", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_CAD_table_entity.md", + "source_location": "L11", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_cad_table_entity_\ubaa8\ub378", + "community": 91, + "community_name": "B08_CAD_table_entity.md", + "norm_label": "\u1106\u1169\u1103\u1166\u11af" + }, + { + "label": "\uae30\ub2a5", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_CAD_table_entity.md", + "source_location": "L21", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_cad_table_entity_\uae30\ub2a5", + "community": 91, + "community_name": "B08_CAD_table_entity.md", + "norm_label": "\u1100\u1175\u1102\u1173\u11bc" + }, + { + "label": "\uc774\uad00 \ubc94\uc704", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_CAD_table_entity.md", + "source_location": "L30", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_cad_table_entity_\uc774\uad00_\ubc94\uc704", + "community": 91, + "community_name": "B08_CAD_table_entity.md", + "norm_label": "\u110b\u1175\u1100\u116a\u11ab \u1107\u1165\u11b7\u110b\u1171" + }, + { + "label": "\uac80\uc99d\u00b7\ud6c4\uc18d", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_CAD_table_entity.md", + "source_location": "L36", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_cad_table_entity_\uac80\uc99d_\ud6c4\uc18d", + "community": 91, + "community_name": "B08_CAD_table_entity.md", + "norm_label": "\u1100\u1165\u11b7\u110c\u1173\u11bc\u00b7\u1112\u116e\u1109\u1169\u11a8" + }, + { + "label": "B08_CAD_title_block.md", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_CAD_title_block.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_cad_title_block", + "community": 161, + "community_name": "B04 \uc138\ubd80\uc720\uc5ed\u00b7\ubc29\uc704\u00b7\uc88c\ud45c\uacc4", + "norm_label": "b08_cad_title_block.md" + }, + { + "label": "B08 CAD \ub3c4\uac01\u00b7\ud45c\uc81c\ub780", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_CAD_title_block.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_cad_title_block_b08_cad_\ub3c4\uac01_\ud45c\uc81c\ub780", + "community": 161, + "community_name": "B04 \uc138\ubd80\uc720\uc5ed\u00b7\ubc29\uc704\u00b7\uc88c\ud45c\uacc4", + "norm_label": "b08 cad \u1103\u1169\u1100\u1161\u11a8\u00b7\u1111\u116d\u110c\u1166\u1105\u1161\u11ab" + }, + { + "label": "\uac12 \uacf5\uae09", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_CAD_title_block.md", + "source_location": "L12", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_cad_title_block_\uac12_\uacf5\uae09", + "community": 161, + "community_name": "B04 \uc138\ubd80\uc720\uc5ed\u00b7\ubc29\uc704\u00b7\uc88c\ud45c\uacc4", + "norm_label": "\u1100\u1161\u11b9 \u1100\u1169\u11bc\u1100\u1173\u11b8" + }, + { + "label": "\ud68c\uc0ac \uc790\uc0b0\uacfc \ub2f4\ub2f9\uc790", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_CAD_title_block.md", + "source_location": "L23", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_cad_title_block_\ud68c\uc0ac_\uc790\uc0b0\uacfc_\ub2f4\ub2f9\uc790", + "community": 161, + "community_name": "B04 \uc138\ubd80\uc720\uc5ed\u00b7\ubc29\uc704\u00b7\uc88c\ud45c\uacc4", + "norm_label": "\u1112\u116c\u1109\u1161 \u110c\u1161\u1109\u1161\u11ab\u1100\u116a \u1103\u1161\u11b7\u1103\u1161\u11bc\u110c\u1161" + }, + { + "label": "\ub3c4\uac01 \ud3b8\uc9d1\u00b7\ubcf4\uc874", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_CAD_title_block.md", + "source_location": "L33", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_cad_title_block_\ub3c4\uac01_\ud3b8\uc9d1_\ubcf4\uc874", + "community": 161, + "community_name": "B04 \uc138\ubd80\uc720\uc5ed\u00b7\ubc29\uc704\u00b7\uc88c\ud45c\uacc4", + "norm_label": "\u1103\u1169\u1100\u1161\u11a8 \u1111\u1167\u11ab\u110c\u1175\u11b8\u00b7\u1107\u1169\u110c\u1169\u11ab" + }, + { + "label": "B08_CAD_usability_2026-09-01.md", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_CAD_usability_2026-09-01.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_cad_usability_2026_09_01", + "community": 162, + "community_name": "B05 \uad6c\uc870\ubb3c \uad6c\uac04 \uc808\ucde8\u00b7\uce21\ubcbd\u00b7\uc131\ud1a0 \ud328\uce58", + "norm_label": "b08_cad_usability_2026-09-01.md" + }, + { + "label": "B08 CAD \uc0ac\uc6a9\uc790 \ud3b8\uc758\uc131 \uc815\ub9ac", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_CAD_usability_2026-09-01.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_cad_usability_2026_09_01_b08_cad_\uc0ac\uc6a9\uc790_\ud3b8\uc758\uc131_\uc815\ub9ac", + "community": 162, + "community_name": "B05 \uad6c\uc870\ubb3c \uad6c\uac04 \uc808\ucde8\u00b7\uce21\ubcbd\u00b7\uc131\ud1a0 \ud328\uce58", + "norm_label": "b08 cad \u1109\u1161\u110b\u116d\u11bc\u110c\u1161 \u1111\u1167\u11ab\u110b\u1174\u1109\u1165\u11bc \u110c\u1165\u11bc\u1105\u1175" + }, + { + "label": "\uad6c\ud604 \uae30\ub85d", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_CAD_usability_2026-09-01.md", + "source_location": "L16", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_cad_usability_2026_09_01_\uad6c\ud604_\uae30\ub85d", + "community": 162, + "community_name": "B05 \uad6c\uc870\ubb3c \uad6c\uac04 \uc808\ucde8\u00b7\uce21\ubcbd\u00b7\uc131\ud1a0 \ud328\uce58", + "norm_label": "\u1100\u116e\u1112\u1167\u11ab \u1100\u1175\u1105\u1169\u11a8" + }, + { + "label": "\uc0ac\uc6a9\uc790 \ud750\ub984", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_CAD_usability_2026-09-01.md", + "source_location": "L30", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_cad_usability_2026_09_01_\uc0ac\uc6a9\uc790_\ud750\ub984", + "community": 162, + "community_name": "B05 \uad6c\uc870\ubb3c \uad6c\uac04 \uc808\ucde8\u00b7\uce21\ubcbd\u00b7\uc131\ud1a0 \ud328\uce58", + "norm_label": "\u1109\u1161\u110b\u116d\u11bc\u110c\u1161 \u1112\u1173\u1105\u1173\u11b7" + }, + { + "label": "\uac80\uc99d \uc0c1\ud0dc", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_CAD_usability_2026-09-01.md", + "source_location": "L39", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_cad_usability_2026_09_01_\uac80\uc99d_\uc0c1\ud0dc", + "community": 162, + "community_name": "B05 \uad6c\uc870\ubb3c \uad6c\uac04 \uc808\ucde8\u00b7\uce21\ubcbd\u00b7\uc131\ud1a0 \ud328\uce58", + "norm_label": "\u1100\u1165\u11b7\u110c\u1173\u11bc \u1109\u1161\u11bc\u1110\u1162" + }, + { + "label": "B08_api.md", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_api.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_api", + "community": 147, + "community_name": "B08_DesignDetail \u2014 API", + "norm_label": "b08_api.md" + }, + { + "label": "B08_DesignDetail \u2014 API", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_api.md", + "source_location": "L9", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_api_b08_designdetail_api", + "community": 147, + "community_name": "B08_DesignDetail \u2014 API", + "norm_label": "b08_designdetail \u2014 api" + }, + { + "label": "API \uc5d4\ub4dc\ud3ec\uc778\ud2b8", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_api.md", + "source_location": "L11", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_api_api_\uc5d4\ub4dc\ud3ec\uc778\ud2b8", + "community": 147, + "community_name": "B08_DesignDetail \u2014 API", + "norm_label": "api \u110b\u1166\u11ab\u1103\u1173\u1111\u1169\u110b\u1175\u11ab\u1110\u1173" + }, + { + "label": "B08_backend.md", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_backend.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_backend", + "community": 30, + "community_name": "B08_DesignDetail \u2014 Backend", + "norm_label": "b08_backend.md" + }, + { + "label": "B08_DesignDetail \u2014 Backend", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_backend.md", + "source_location": "L9", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_backend_b08_designdetail_backend", + "community": 30, + "community_name": "B08_DesignDetail \u2014 Backend", + "norm_label": "b08_designdetail \u2014 backend" + }, + { + "label": "\ub3c4\uba74 \uad00\ub9ac, \uc885\ub2e8 30\uce21\uc810 \ubd84\ud560, CAD \uc218\ub7c9\uc0b0\ucd9c\ud45c \ubc0f \ub3c4\uba74 \ud15c\ud50c\ub9bf \ud30c\uc774\ud504\ub77c\uc778", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_backend.md", + "source_location": "L11", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_backend_\ub3c4\uba74_\uad00\ub9ac_\uc885\ub2e8_30\uce21\uc810_\ubd84\ud560_cad_\uc218\ub7c9\uc0b0\ucd9c\ud45c_\ubc0f_\ub3c4\uba74_\ud15c\ud50c\ub9bf_\ud30c\uc774\ud504\ub77c\uc778", + "community": 30, + "community_name": "B08_DesignDetail \u2014 Backend", + "norm_label": "\u1103\u1169\u1106\u1167\u11ab \u1100\u116a\u11ab\u1105\u1175, \u110c\u1169\u11bc\u1103\u1161\u11ab 30\u110e\u1173\u11a8\u110c\u1165\u11b7 \u1107\u116e\u11ab\u1112\u1161\u11af, cad \u1109\u116e\u1105\u1163\u11bc\u1109\u1161\u11ab\u110e\u116e\u11af\u1111\u116d \u1106\u1175\u11be \u1103\u1169\u1106\u1167\u11ab \u1110\u1166\u11b7\u1111\u1173\u11af\u1105\u1175\u11ba \u1111\u1161\u110b\u1175\u1111\u1173\u1105\u1161\u110b\u1175\u11ab" + }, + { + "label": "\ub3c4\uac01 \ud15c\ud50c\ub9bf \ubcc0\ud658 \ubc0f \uc885\ub2e8\ub3c4 A1 \ub3c4\uac01 \ubcd1\ud569 (2026-07-26)", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_backend.md", + "source_location": "L27", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_backend_\ub3c4\uac01_\ud15c\ud50c\ub9bf_\ubcc0\ud658_\ubc0f_\uc885\ub2e8\ub3c4_a1_\ub3c4\uac01_\ubcd1\ud569_2026_07_26", + "community": 30, + "community_name": "B08_DesignDetail \u2014 Backend", + "norm_label": "\u1103\u1169\u1100\u1161\u11a8 \u1110\u1166\u11b7\u1111\u1173\u11af\u1105\u1175\u11ba \u1107\u1167\u11ab\u1112\u116a\u11ab \u1106\u1175\u11be \u110c\u1169\u11bc\u1103\u1161\u11ab\u1103\u1169 a1 \u1103\u1169\u1100\u1161\u11a8 \u1107\u1167\u11bc\u1112\u1161\u11b8 (2026-07-26)" + }, + { + "label": "\uc885\ub2e8\ub3c4 30\uce21\uc810 N\ubd84\ud560 \ubc0f \ub0a9\ud488 \uc591\uc2dd \uce21\uc810 \ud14c\uc774\ube14 (2026-07-25 N-1-1)", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_backend.md", + "source_location": "L31", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_backend_\uc885\ub2e8\ub3c4_30\uce21\uc810_n\ubd84\ud560_\ubc0f_\ub0a9\ud488_\uc591\uc2dd_\uce21\uc810_\ud14c\uc774\ube14_2026_07_25_n_1_1", + "community": 30, + "community_name": "B08_DesignDetail \u2014 Backend", + "norm_label": "\u110c\u1169\u11bc\u1103\u1161\u11ab\u1103\u1169 30\u110e\u1173\u11a8\u110c\u1165\u11b7 n\u1107\u116e\u11ab\u1112\u1161\u11af \u1106\u1175\u11be \u1102\u1161\u11b8\u1111\u116e\u11b7 \u110b\u1163\u11bc\u1109\u1175\u11a8 \u110e\u1173\u11a8\u110c\u1165\u11b7 \u1110\u1166\u110b\u1175\u1107\u1173\u11af (2026-07-25 n-1-1)" + }, + { + "label": "\ud6a1\ub2e8\ub3c4 4\uac1c \uc120\ubcc4 \ub808\uc774\uc5b4 \ubc0f CAD \uc218\ub7c9\uc0b0\ucd9c\ud45c (2026-07-25 N-1-2/N-1-3)", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_backend.md", + "source_location": "L35", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_backend_\ud6a1\ub2e8\ub3c4_4\uac1c_\uc120\ubcc4_\ub808\uc774\uc5b4_\ubc0f_cad_\uc218\ub7c9\uc0b0\ucd9c\ud45c_2026_07_25_n_1_2_n_1_3", + "community": 30, + "community_name": "B08_DesignDetail \u2014 Backend", + "norm_label": "\u1112\u116c\u11bc\u1103\u1161\u11ab\u1103\u1169 4\u1100\u1162 \u1109\u1165\u11ab\u1107\u1167\u11af \u1105\u1166\u110b\u1175\u110b\u1165 \u1106\u1175\u11be cad \u1109\u116e\u1105\u1163\u11bc\u1109\u1161\u11ab\u110e\u116e\u11af\u1111\u116d (2026-07-25 n-1-2/n-1-3)" + }, + { + "label": "\uc6cc\ud06c\ud50c\ub85c\uc6b0 \uac8c\uc774\ud305 \uc5f0\ub3d9", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_backend.md", + "source_location": "L39", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_backend_\uc6cc\ud06c\ud50c\ub85c\uc6b0_\uac8c\uc774\ud305_\uc5f0\ub3d9", + "community": 30, + "community_name": "B08_DesignDetail \u2014 Backend", + "norm_label": "\u110b\u116f\u110f\u1173\u1111\u1173\u11af\u1105\u1169\u110b\u116e \u1100\u1166\u110b\u1175\u1110\u1175\u11bc \u110b\u1167\u11ab\u1103\u1169\u11bc" + }, + { + "label": "\ud604\uc7ac \ucc45\uc784 \uacbd\uacc4", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_backend.md", + "source_location": "L43", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_backend_\ud604\uc7ac_\ucc45\uc784_\uacbd\uacc4", + "community": 30, + "community_name": "B08_DesignDetail \u2014 Backend", + "norm_label": "\u1112\u1167\u11ab\u110c\u1162 \u110e\u1162\u11a8\u110b\u1175\u11b7 \u1100\u1167\u11bc\u1100\u1168" + }, + { + "label": "B08_cad_delivery_2026_09.md", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_cad_delivery_2026_09.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_cad_delivery_2026_09", + "community": 171, + "community_name": "B08 CAD\u00b7\ub0a9\ud488 \ub3c4\uba74 \ud6c4\uc18d", + "norm_label": "b08_cad_delivery_2026_09.md" + }, + { + "label": "B08 CAD\u00b7\ub0a9\ud488 \ub3c4\uba74 \ud6c4\uc18d", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_cad_delivery_2026_09.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_cad_delivery_2026_09_b08_cad_\ub0a9\ud488_\ub3c4\uba74_\ud6c4\uc18d", + "community": 171, + "community_name": "B08 CAD\u00b7\ub0a9\ud488 \ub3c4\uba74 \ud6c4\uc18d", + "norm_label": "b08 cad\u00b7\u1102\u1161\u11b8\u1111\u116e\u11b7 \u1103\u1169\u1106\u1167\u11ab \u1112\u116e\u1109\u1169\u11a8" + }, + { + "label": "CAD \ud3b8\uc9d1\u00b7\ud655\uc815", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_cad_delivery_2026_09.md", + "source_location": "L12", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_cad_delivery_2026_09_cad_\ud3b8\uc9d1_\ud655\uc815", + "community": 171, + "community_name": "B08 CAD\u00b7\ub0a9\ud488 \ub3c4\uba74 \ud6c4\uc18d", + "norm_label": "cad \u1111\u1167\u11ab\u110c\u1175\u11b8\u00b7\u1112\u116a\u11a8\u110c\u1165\u11bc" + }, + { + "label": "\ud1a0\uc801\ub3c4\u00b7\uc720\uc5ed\ub3c4", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_cad_delivery_2026_09.md", + "source_location": "L23", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_cad_delivery_2026_09_\ud1a0\uc801\ub3c4_\uc720\uc5ed\ub3c4", + "community": 171, + "community_name": "B08 CAD\u00b7\ub0a9\ud488 \ub3c4\uba74 \ud6c4\uc18d", + "norm_label": "\u1110\u1169\u110c\u1165\u11a8\u1103\u1169\u00b7\u110b\u1172\u110b\u1167\u11a8\u1103\u1169" + }, + { + "label": "B08_cross_structure_sheets.md", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_cross_structure_sheets.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_cross_structure_sheets", + "community": 56, + "community_name": "B08 \ud6a1\ub2e8\ub3c4 \uad6c\uc870\ubb3c\u00b7\uc7a5 \ubc30\uce58", + "norm_label": "b08_cross_structure_sheets.md" + }, + { + "label": "B08 \ud6a1\ub2e8\ub3c4 \uad6c\uc870\ubb3c\u00b7\uc7a5 \ubc30\uce58", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_cross_structure_sheets.md", + "source_location": "L9", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_cross_structure_sheets_b08_\ud6a1\ub2e8\ub3c4_\uad6c\uc870\ubb3c_\uc7a5_\ubc30\uce58", + "community": 56, + "community_name": "B08 \ud6a1\ub2e8\ub3c4 \uad6c\uc870\ubb3c\u00b7\uc7a5 \ubc30\uce58", + "norm_label": "b08 \u1112\u116c\u11bc\u1103\u1161\u11ab\u1103\u1169 \u1100\u116e\u110c\u1169\u1106\u116e\u11af\u00b7\u110c\u1161\u11bc \u1107\u1162\u110e\u1175" + }, + { + "label": "\ubb38\uc81c\uc640 \uacb0\uc815", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_cross_structure_sheets.md", + "source_location": "L11", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_cross_structure_sheets_\ubb38\uc81c\uc640_\uacb0\uc815", + "community": 56, + "community_name": "B08 \ud6a1\ub2e8\ub3c4 \uad6c\uc870\ubb3c\u00b7\uc7a5 \ubc30\uce58", + "norm_label": "\u1106\u116e\u11ab\u110c\u1166\u110b\u116a \u1100\u1167\u11af\u110c\u1165\u11bc" + }, + { + "label": "\ub370\uc774\ud130\u00b7\uad6c\ud604 \ud750\ub984", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_cross_structure_sheets.md", + "source_location": "L15", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_cross_structure_sheets_\ub370\uc774\ud130_\uad6c\ud604_\ud750\ub984", + "community": 56, + "community_name": "B08 \ud6a1\ub2e8\ub3c4 \uad6c\uc870\ubb3c\u00b7\uc7a5 \ubc30\uce58", + "norm_label": "\u1103\u1166\u110b\u1175\u1110\u1165\u00b7\u1100\u116e\u1112\u1167\u11ab \u1112\u1173\u1105\u1173\u11b7" + }, + { + "label": "\uacb0\uacfc", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_cross_structure_sheets.md", + "source_location": "L26", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_cross_structure_sheets_\uacb0\uacfc", + "community": 56, + "community_name": "B08 \ud6a1\ub2e8\ub3c4 \uad6c\uc870\ubb3c\u00b7\uc7a5 \ubc30\uce58", + "norm_label": "\u1100\u1167\u11af\u1100\u116a" + }, + { + "label": "\ud55c\uacc4", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_cross_structure_sheets.md", + "source_location": "L33", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_cross_structure_sheets_\ud55c\uacc4", + "community": 56, + "community_name": "B08 \ud6a1\ub2e8\ub3c4 \uad6c\uc870\ubb3c\u00b7\uc7a5 \ubc30\uce58", + "norm_label": "\u1112\u1161\u11ab\u1100\u1168" + }, + { + "label": "B08_dependencies.md", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_dependencies.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_dependencies", + "community": 111, + "community_name": "B08_DesignDetail \u2014 Dependencies", + "norm_label": "b08_dependencies.md" + }, + { + "label": "B08_DesignDetail \u2014 Dependencies", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_dependencies.md", + "source_location": "L9", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_dependencies_b08_designdetail_dependencies", + "community": 111, + "community_name": "B08_DesignDetail \u2014 Dependencies", + "norm_label": "b08_designdetail \u2014 dependencies" + }, + { + "label": "Frontend (package.json / tsconfig.json)", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_dependencies.md", + "source_location": "L15", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_dependencies_frontend_package_json_tsconfig_json", + "community": 111, + "community_name": "B08_DesignDetail \u2014 Dependencies", + "norm_label": "frontend (package.json / tsconfig.json)" + }, + { + "label": "Backend (requirements.txt)", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_dependencies.md", + "source_location": "L25", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_dependencies_backend_requirements_txt", + "community": 111, + "community_name": "B08_DesignDetail \u2014 Dependencies", + "norm_label": "backend (requirements.txt)" + }, + { + "label": "B08_drawing_masshaul_watershed.md", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_drawing_masshaul_watershed.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_drawing_masshaul_watershed", + "community": 31, + "community_name": "B08 \ud1a0\uc801\ub3c4\u00b7\uc218\ub9ac\uc9d1\uc218\uba74\uc801\uc720\uc5ed\ub3c4", + "norm_label": "b08_drawing_masshaul_watershed.md" + }, + { + "label": "B08 \ud1a0\uc801\ub3c4\u00b7\uc218\ub9ac\uc9d1\uc218\uba74\uc801\uc720\uc5ed\ub3c4", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_drawing_masshaul_watershed.md", + "source_location": "L9", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_drawing_masshaul_watershed_b08_\ud1a0\uc801\ub3c4_\uc218\ub9ac\uc9d1\uc218\uba74\uc801\uc720\uc5ed\ub3c4", + "community": 31, + "community_name": "B08 \ud1a0\uc801\ub3c4\u00b7\uc218\ub9ac\uc9d1\uc218\uba74\uc801\uc720\uc5ed\ub3c4", + "norm_label": "b08 \u1110\u1169\u110c\u1165\u11a8\u1103\u1169\u00b7\u1109\u116e\u1105\u1175\u110c\u1175\u11b8\u1109\u116e\u1106\u1167\u11ab\u110c\u1165\u11a8\u110b\u1172\u110b\u1167\u11a8\u1103\u1169" + }, + { + "label": "\ub3c4\uba74 \uae30\uc900", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_drawing_masshaul_watershed.md", + "source_location": "L11", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_drawing_masshaul_watershed_\ub3c4\uba74_\uae30\uc900", + "community": 31, + "community_name": "B08 \ud1a0\uc801\ub3c4\u00b7\uc218\ub9ac\uc9d1\uc218\uba74\uc801\uc720\uc5ed\ub3c4", + "norm_label": "\u1103\u1169\u1106\u1167\u11ab \u1100\u1175\u110c\u116e\u11ab" + }, + { + "label": "\ub370\uc774\ud130 \ud750\ub984", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_drawing_masshaul_watershed.md", + "source_location": "L20", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_drawing_masshaul_watershed_\ub370\uc774\ud130_\ud750\ub984", + "community": 31, + "community_name": "B08 \ud1a0\uc801\ub3c4\u00b7\uc218\ub9ac\uc9d1\uc218\uba74\uc801\uc720\uc5ed\ub3c4", + "norm_label": "\u1103\u1166\u110b\u1175\u1110\u1165 \u1112\u1173\u1105\u1173\u11b7" + }, + { + "label": "\uc720\uc5ed \uc815\ubcf4\ud45c", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_drawing_masshaul_watershed.md", + "source_location": "L30", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_drawing_masshaul_watershed_\uc720\uc5ed_\uc815\ubcf4\ud45c", + "community": 31, + "community_name": "B08 \ud1a0\uc801\ub3c4\u00b7\uc218\ub9ac\uc9d1\uc218\uba74\uc801\uc720\uc5ed\ub3c4", + "norm_label": "\u110b\u1172\u110b\u1167\u11a8 \u110c\u1165\u11bc\u1107\u1169\u1111\u116d" + }, + { + "label": "\uad6c\ud604\u00b7\uac80\uc99d \uc644\ub8cc", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_drawing_masshaul_watershed.md", + "source_location": "L38", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_drawing_masshaul_watershed_\uad6c\ud604_\uac80\uc99d_\uc644\ub8cc", + "community": 31, + "community_name": "B08 \ud1a0\uc801\ub3c4\u00b7\uc218\ub9ac\uc9d1\uc218\uba74\uc801\uc720\uc5ed\ub3c4", + "norm_label": "\u1100\u116e\u1112\u1167\u11ab\u00b7\u1100\u1165\u11b7\u110c\u1173\u11bc \u110b\u116a\u11ab\u1105\u116d" + }, + { + "label": "\uac80\uc99d \ud55c\uacc4", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_drawing_masshaul_watershed.md", + "source_location": "L51", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_drawing_masshaul_watershed_\uac80\uc99d_\ud55c\uacc4", + "community": 31, + "community_name": "B08 \ud1a0\uc801\ub3c4\u00b7\uc218\ub9ac\uc9d1\uc218\uba74\uc801\uc720\uc5ed\ub3c4", + "norm_label": "\u1100\u1165\u11b7\u110c\u1173\u11bc \u1112\u1161\u11ab\u1100\u1168" + }, + { + "label": "\ub0a8\uc740 \uacb0\uc815", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_drawing_masshaul_watershed.md", + "source_location": "L56", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_drawing_masshaul_watershed_\ub0a8\uc740_\uacb0\uc815", + "community": 31, + "community_name": "B08 \ud1a0\uc801\ub3c4\u00b7\uc218\ub9ac\uc9d1\uc218\uba74\uc801\uc720\uc5ed\ub3c4", + "norm_label": "\u1102\u1161\u11b7\u110b\u1173\u11ab \u1100\u1167\u11af\u110c\u1165\u11bc" + }, + { + "label": "B08_frontend.md", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_frontend.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_frontend", + "community": 4, + "community_name": "\ubc30\uc218\uc720\uc5ed \ud574\uc11d \ubc0f \uc138\ubd80\uc124\uacc4 (Drainage Watershed)", + "norm_label": "b08_frontend.md" + }, + { + "label": "B08_DesignDetail \u2014 Frontend", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_frontend.md", + "source_location": "L9", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_frontend_b08_designdetail_frontend", + "community": 4, + "community_name": "\ubc30\uc218\uc720\uc5ed \ud574\uc11d \ubc0f \uc138\ubd80\uc124\uacc4 (Drainage Watershed)", + "norm_label": "b08_designdetail \u2014 frontend" + }, + { + "label": "\ud30c\uc77c \uad6c\uc870", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_frontend.md", + "source_location": "L16", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_frontend_\ud30c\uc77c_\uad6c\uc870", + "community": 4, + "community_name": "\ubc30\uc218\uc720\uc5ed \ud574\uc11d \ubc0f \uc138\ubd80\uc124\uacc4 (Drainage Watershed)", + "norm_label": "\u1111\u1161\u110b\u1175\u11af \u1100\u116e\u110c\u1169" + }, + { + "label": "\ub3c5\ub9bd\ud615 CAD \uc784\ubca0\ub4dc \ubc0f \ub370\uc774\ud130 \uc5f0\ub3d9 \uc544\ud0a4\ud14d\ucc98", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_frontend.md", + "source_location": "L29", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_frontend_\ub3c5\ub9bd\ud615_cad_\uc784\ubca0\ub4dc_\ubc0f_\ub370\uc774\ud130_\uc5f0\ub3d9_\uc544\ud0a4\ud14d\ucc98", + "community": 4, + "community_name": "\ubc30\uc218\uc720\uc5ed \ud574\uc11d \ubc0f \uc138\ubd80\uc124\uacc4 (Drainage Watershed)", + "norm_label": "\u1103\u1169\u11a8\u1105\u1175\u11b8\u1112\u1167\u11bc cad \u110b\u1175\u11b7\u1107\u1166\u1103\u1173 \u1106\u1175\u11be \u1103\u1166\u110b\u1175\u1110\u1165 \u110b\u1167\u11ab\u1103\u1169\u11bc \u110b\u1161\u110f\u1175\u1110\u1166\u11a8\u110e\u1165" + }, + { + "label": "openwebcad \ub2e8\uc704 \uc815\ud569, \uc120 \ud2b9\uc131/\ud3f0\ud2b8 UI \ubc0f Fit-in-all (2026-07-20)", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_frontend.md", + "source_location": "L37", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_frontend_openwebcad_\ub2e8\uc704_\uc815\ud569_\uc120_\ud2b9\uc131_\ud3f0\ud2b8_ui_\ubc0f_fit_in_all_2026_07_20", + "community": 4, + "community_name": "\ubc30\uc218\uc720\uc5ed \ud574\uc11d \ubc0f \uc138\ubd80\uc124\uacc4 (Drainage Watershed)", + "norm_label": "openwebcad \u1103\u1161\u11ab\u110b\u1171 \u110c\u1165\u11bc\u1112\u1161\u11b8, \u1109\u1165\u11ab \u1110\u1173\u11a8\u1109\u1165\u11bc/\u1111\u1169\u11ab\u1110\u1173 ui \u1106\u1175\u11be fit-in-all (2026-07-20)" + }, + { + "label": "CAD \uacc4\ud68d\uc120 \ub808\uc774\uc5b4 \uc5f0\ub3d9 \ubc0f \ud3b8\uc9d1 \uc9c0\uc6d0 (2026-07-22)", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_frontend.md", + "source_location": "L43", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_frontend_cad_\uacc4\ud68d\uc120_\ub808\uc774\uc5b4_\uc5f0\ub3d9_\ubc0f_\ud3b8\uc9d1_\uc9c0\uc6d0_2026_07_22", + "community": 4, + "community_name": "\ubc30\uc218\uc720\uc5ed \ud574\uc11d \ubc0f \uc138\ubd80\uc124\uacc4 (Drainage Watershed)", + "norm_label": "cad \u1100\u1168\u1112\u116c\u11a8\u1109\u1165\u11ab \u1105\u1166\u110b\u1175\u110b\u1165 \u110b\u1167\u11ab\u1103\u1169\u11bc \u1106\u1175\u11be \u1111\u1167\u11ab\u110c\u1175\u11b8 \u110c\u1175\u110b\u116f\u11ab (2026-07-22)" + }, + { + "label": "\uc8fc\uc694 \ucef4\ud3ec\ub10c\ud2b8 / \ud568\uc218", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_frontend.md", + "source_location": "L47", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_frontend_\uc8fc\uc694_\ucef4\ud3ec\ub10c\ud2b8_\ud568\uc218", + "community": 4, + "community_name": "\ubc30\uc218\uc720\uc5ed \ud574\uc11d \ubc0f \uc138\ubd80\uc124\uacc4 (Drainage Watershed)", + "norm_label": "\u110c\u116e\u110b\u116d \u110f\u1165\u11b7\u1111\u1169\u1102\u1165\u11ab\u1110\u1173 / \u1112\u1161\u11b7\u1109\u116e" + }, + { + "label": "\uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/B08_frontend.md", + "source_location": "L55", + "_origin": "ast", + "id": "pages_b08_designdetail_b08_frontend_\uc758\uc874\uc131", + "community": 4, + "community_name": "\ubc30\uc218\uc720\uc5ed \ud574\uc11d \ubc0f \uc138\ubd80\uc124\uacc4 (Drainage Watershed)", + "norm_label": "\u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "B08_DesignDetail_Router.md", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/backend/B08_DesignDetail_Router.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b08_designdetail_backend_b08_designdetail_router", + "community": 154, + "community_name": "B08_DesignDetail_Router.md", + "norm_label": "b08_designdetail_router.md" + }, + { + "label": "B08_DesignDetail_Router.py", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/backend/B08_DesignDetail_Router.md", + "source_location": "L11", + "_origin": "ast", + "id": "pages_b08_designdetail_backend_b08_designdetail_router_b08_designdetail_router_py", + "community": 154, + "community_name": "B08_DesignDetail_Router.md", + "norm_label": "b08_designdetail_router.py" + }, + { + "label": "\uc2e4\uc81c API", + "file_type": "document", + "source_file": "pages/B08_DesignDetail/backend/B08_DesignDetail_Router.md", + "source_location": "L20", + "_origin": "ast", + "id": "pages_b08_designdetail_backend_b08_designdetail_router_\uc2e4\uc81c_api", + "community": 154, + "community_name": "B08_DesignDetail_Router.md", + "norm_label": "\u1109\u1175\u11af\u110c\u1166 api" + }, + { + "label": "B08_2026_09_09_completion.md", + "file_type": "document", + "source_file": "pages/B08_Quantity/B08_2026_09_09_completion.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b08_quantity_b08_2026_09_09_completion", + "community": 93, + "community_name": "\uacf5\uc720 \uc790\uc6d0 \uc601\ud5a5 \uc9c0\ub3c4", + "norm_label": "b08_2026_09_09_completion.md" + }, + { + "label": "B08 \uc218\ub7c9\uc0b0\ucd9c \u2014 2026-09-09 \uc644\ub8cc \uadfc\uac70", + "file_type": "document", + "source_file": "pages/B08_Quantity/B08_2026_09_09_completion.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b08_quantity_b08_2026_09_09_completion_b08_\uc218\ub7c9\uc0b0\ucd9c_2026_09_09_\uc644\ub8cc_\uadfc\uac70", + "community": 93, + "community_name": "\uacf5\uc720 \uc790\uc6d0 \uc601\ud5a5 \uc9c0\ub3c4", + "norm_label": "b08 \u1109\u116e\u1105\u1163\u11bc\u1109\u1161\u11ab\u110e\u116e\u11af \u2014 2026-09-09 \u110b\u116a\u11ab\u1105\u116d \u1100\u1173\u11ab\u1100\u1165" + }, + { + "label": "\ubc11\uc218\uc640 \uc778\uacc4", + "file_type": "document", + "source_file": "pages/B08_Quantity/B08_2026_09_09_completion.md", + "source_location": "L14", + "_origin": "ast", + "id": "pages_b08_quantity_b08_2026_09_09_completion_\ubc11\uc218\uc640_\uc778\uacc4", + "community": 93, + "community_name": "\uacf5\uc720 \uc790\uc6d0 \uc601\ud5a5 \uc9c0\ub3c4", + "norm_label": "\u1106\u1175\u11c0\u1109\u116e\u110b\u116a \u110b\u1175\u11ab\u1100\u1168" + }, + { + "label": "\uad6c\uc870\ubb3c\u00b7\uc218\ub7c9 \ud45c\uc2dc", + "file_type": "document", + "source_file": "pages/B08_Quantity/B08_2026_09_09_completion.md", + "source_location": "L21", + "_origin": "ast", + "id": "pages_b08_quantity_b08_2026_09_09_completion_\uad6c\uc870\ubb3c_\uc218\ub7c9_\ud45c\uc2dc", + "community": 93, + "community_name": "\uacf5\uc720 \uc790\uc6d0 \uc601\ud5a5 \uc9c0\ub3c4", + "norm_label": "\u1100\u116e\u110c\u1169\u1106\u116e\u11af\u00b7\u1109\u116e\u1105\u1163\u11bc \u1111\u116d\u1109\u1175" + }, + { + "label": "\uac80\uc99d \uae30\ub85d", + "file_type": "document", + "source_file": "pages/B08_Quantity/B08_2026_09_09_completion.md", + "source_location": "L28", + "_origin": "ast", + "id": "pages_b08_quantity_b08_2026_09_09_completion_\uac80\uc99d_\uae30\ub85d", + "community": 93, + "community_name": "\uacf5\uc720 \uc790\uc6d0 \uc601\ud5a5 \uc9c0\ub3c4", + "norm_label": "\u1100\u1165\u11b7\u110c\u1173\u11bc \u1100\u1175\u1105\u1169\u11a8" + }, + { + "label": "\ub0a8\uc740 \uacbd\uacc4", + "file_type": "document", + "source_file": "pages/B08_Quantity/B08_2026_09_09_completion.md", + "source_location": "L37", + "_origin": "ast", + "id": "pages_b08_quantity_b08_2026_09_09_completion_\ub0a8\uc740_\uacbd\uacc4", + "community": 93, + "community_name": "\uacf5\uc720 \uc790\uc6d0 \uc601\ud5a5 \uc9c0\ub3c4", + "norm_label": "\u1102\u1161\u11b7\u110b\u1173\u11ab \u1100\u1167\u11bc\u1100\u1168" + }, + { + "label": "B08_overview_2026_09.md", + "file_type": "document", + "source_file": "pages/B08_Quantity/B08_overview_2026_09.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b08_quantity_b08_overview_2026_09", + "community": 26, + "community_name": "\uc720\ud1a0\uace1\uc120 (Mass Haul Diagram) \uacc4\uc0b0 \uba85\uc138", + "norm_label": "b08_overview_2026_09.md" + }, + { + "label": "B08 Quantity \u2014 2026-09 \uc218\ub7c9\uc0b0\ucd9c", + "file_type": "document", + "source_file": "pages/B08_Quantity/B08_overview_2026_09.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b08_quantity_b08_overview_2026_09_b08_quantity_2026_09_\uc218\ub7c9\uc0b0\ucd9c", + "community": 26, + "community_name": "\uc720\ud1a0\uace1\uc120 (Mass Haul Diagram) \uacc4\uc0b0 \uba85\uc138", + "norm_label": "b08 quantity \u2014 2026-09 \u1109\u116e\u1105\u1163\u11bc\u1109\u1161\u11ab\u110e\u116e\u11af" + }, + { + "label": "\uad6c\ud604 \uad6c\uc131", + "file_type": "document", + "source_file": "pages/B08_Quantity/B08_overview_2026_09.md", + "source_location": "L14", + "_origin": "ast", + "id": "pages_b08_quantity_b08_overview_2026_09_\uad6c\ud604_\uad6c\uc131", + "community": 26, + "community_name": "\uc720\ud1a0\uace1\uc120 (Mass Haul Diagram) \uacc4\uc0b0 \uba85\uc138", + "norm_label": "\u1100\u116e\u1112\u1167\u11ab \u1100\u116e\u1109\u1165\u11bc" + }, + { + "label": "\uac80\uc99d\ub41c \ud750\ub984", + "file_type": "document", + "source_file": "pages/B08_Quantity/B08_overview_2026_09.md", + "source_location": "L26", + "_origin": "ast", + "id": "pages_b08_quantity_b08_overview_2026_09_\uac80\uc99d\ub41c_\ud750\ub984", + "community": 26, + "community_name": "\uc720\ud1a0\uace1\uc120 (Mass Haul Diagram) \uacc4\uc0b0 \uba85\uc138", + "norm_label": "\u1100\u1165\u11b7\u110c\u1173\u11bc\u1103\u116c\u11ab \u1112\u1173\u1105\u1173\u11b7" + }, + { + "label": "\uc644\ub8cc\u00b7\uc81c\ud55c", + "file_type": "document", + "source_file": "pages/B08_Quantity/B08_overview_2026_09.md", + "source_location": "L34", + "_origin": "ast", + "id": "pages_b08_quantity_b08_overview_2026_09_\uc644\ub8cc_\uc81c\ud55c", + "community": 26, + "community_name": "\uc720\ud1a0\uace1\uc120 (Mass Haul Diagram) \uacc4\uc0b0 \uba85\uc138", + "norm_label": "\u110b\u116a\u11ab\u1105\u116d\u00b7\u110c\u1166\u1112\u1161\u11ab" + }, + { + "label": "B09_2026_09_09_completion.md", + "file_type": "document", + "source_file": "pages/B09_Estimation/B09_2026_09_09_completion.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b09_estimation_b09_2026_09_09_completion", + "community": 92, + "community_name": "\uacf5\uac1c\u00b7\uc778\uc99d\u00b7\uad00\ub9ac \uc601\uc5ed \uc9c0\ub3c4", + "norm_label": "b09_2026_09_09_completion.md" + }, + { + "label": "B09 \uc6d0\uac00\uacc4\uc0b0 \u2014 2026-09-09 \uc644\ub8cc \uadfc\uac70", + "file_type": "document", + "source_file": "pages/B09_Estimation/B09_2026_09_09_completion.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b09_estimation_b09_2026_09_09_completion_b09_\uc6d0\uac00\uacc4\uc0b0_2026_09_09_\uc644\ub8cc_\uadfc\uac70", + "community": 92, + "community_name": "\uacf5\uac1c\u00b7\uc778\uc99d\u00b7\uad00\ub9ac \uc601\uc5ed \uc9c0\ub3c4", + "norm_label": "b09 \u110b\u116f\u11ab\u1100\u1161\u1100\u1168\u1109\u1161\u11ab \u2014 2026-09-09 \u110b\u116a\u11ab\u1105\u116d \u1100\u1173\u11ab\u1100\u1165" + }, + { + "label": "\ub2e8\uac00\u00b7\ubc11\uc218 \uc644\uc131", + "file_type": "document", + "source_file": "pages/B09_Estimation/B09_2026_09_09_completion.md", + "source_location": "L14", + "_origin": "ast", + "id": "pages_b09_estimation_b09_2026_09_09_completion_\ub2e8\uac00_\ubc11\uc218_\uc644\uc131", + "community": 92, + "community_name": "\uacf5\uac1c\u00b7\uc778\uc99d\u00b7\uad00\ub9ac \uc601\uc5ed \uc9c0\ub3c4", + "norm_label": "\u1103\u1161\u11ab\u1100\u1161\u00b7\u1106\u1175\u11c0\u1109\u116e \u110b\u116a\u11ab\u1109\u1165\u11bc" + }, + { + "label": "\uac00\uaca9\u00b7\uc870\uac74 \uc785\ub825", + "file_type": "document", + "source_file": "pages/B09_Estimation/B09_2026_09_09_completion.md", + "source_location": "L22", + "_origin": "ast", + "id": "pages_b09_estimation_b09_2026_09_09_completion_\uac00\uaca9_\uc870\uac74_\uc785\ub825", + "community": 92, + "community_name": "\uacf5\uac1c\u00b7\uc778\uc99d\u00b7\uad00\ub9ac \uc601\uc5ed \uc9c0\ub3c4", + "norm_label": "\u1100\u1161\u1100\u1167\u11a8\u00b7\u110c\u1169\u1100\u1165\u11ab \u110b\u1175\u11b8\u1105\u1167\u11a8" + }, + { + "label": "\uae30\uacc4\u00b7\uc81c\ube44\uc728\u00b7\uc0b0\ucd9c\ubb3c", + "file_type": "document", + "source_file": "pages/B09_Estimation/B09_2026_09_09_completion.md", + "source_location": "L30", + "_origin": "ast", + "id": "pages_b09_estimation_b09_2026_09_09_completion_\uae30\uacc4_\uc81c\ube44\uc728_\uc0b0\ucd9c\ubb3c", + "community": 92, + "community_name": "\uacf5\uac1c\u00b7\uc778\uc99d\u00b7\uad00\ub9ac \uc601\uc5ed \uc9c0\ub3c4", + "norm_label": "\u1100\u1175\u1100\u1168\u00b7\u110c\u1166\u1107\u1175\u110b\u1172\u11af\u00b7\u1109\u1161\u11ab\u110e\u116e\u11af\u1106\u116e\u11af" + }, + { + "label": "\uac80\uc99d \uae30\ub85d", + "file_type": "document", + "source_file": "pages/B09_Estimation/B09_2026_09_09_completion.md", + "source_location": "L38", + "_origin": "ast", + "id": "pages_b09_estimation_b09_2026_09_09_completion_\uac80\uc99d_\uae30\ub85d", + "community": 92, + "community_name": "\uacf5\uac1c\u00b7\uc778\uc99d\u00b7\uad00\ub9ac \uc601\uc5ed \uc9c0\ub3c4", + "norm_label": "\u1100\u1165\u11b7\u110c\u1173\u11bc \u1100\u1175\u1105\u1169\u11a8" + }, + { + "label": "\ub0a8\uc740 \uacbd\uacc4", + "file_type": "document", + "source_file": "pages/B09_Estimation/B09_2026_09_09_completion.md", + "source_location": "L50", + "_origin": "ast", + "id": "pages_b09_estimation_b09_2026_09_09_completion_\ub0a8\uc740_\uacbd\uacc4", + "community": 92, + "community_name": "\uacf5\uac1c\u00b7\uc778\uc99d\u00b7\uad00\ub9ac \uc601\uc5ed \uc9c0\ub3c4", + "norm_label": "\u1102\u1161\u11b7\u110b\u1173\u11ab \u1100\u1167\u11bc\u1100\u1168" + }, + { + "label": "B09_frontend.md", + "file_type": "document", + "source_file": "pages/B09_Estimation/B09_frontend.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b09_estimation_b09_frontend", + "community": 32, + "community_name": "B09_Estimation \u2014 Frontend", + "norm_label": "b09_frontend.md" + }, + { + "label": "B09_Estimation \u2014 Frontend", + "file_type": "document", + "source_file": "pages/B09_Estimation/B09_frontend.md", + "source_location": "L8", + "_origin": "ast", + "id": "pages_b09_estimation_b09_frontend_b09_estimation_frontend", + "community": 32, + "community_name": "B09_Estimation \u2014 Frontend", + "norm_label": "b09_estimation \u2014 frontend" + }, + { + "label": "\ud30c\uc77c \uad6c\uc870", + "file_type": "document", + "source_file": "pages/B09_Estimation/B09_frontend.md", + "source_location": "L14", + "_origin": "ast", + "id": "pages_b09_estimation_b09_frontend_\ud30c\uc77c_\uad6c\uc870", + "community": 32, + "community_name": "B09_Estimation \u2014 Frontend", + "norm_label": "\u1111\u1161\u110b\u1175\u11af \u1100\u116e\u110c\u1169" + }, + { + "label": "\ucef4\ud3ec\ub10c\ud2b8 / \ud568\uc218", + "file_type": "document", + "source_file": "pages/B09_Estimation/B09_frontend.md", + "source_location": "L20", + "_origin": "ast", + "id": "pages_b09_estimation_b09_frontend_\ucef4\ud3ec\ub10c\ud2b8_\ud568\uc218", + "community": 32, + "community_name": "B09_Estimation \u2014 Frontend", + "norm_label": "\u110f\u1165\u11b7\u1111\u1169\u1102\u1165\u11ab\u1110\u1173 / \u1112\u1161\u11b7\u1109\u116e" + }, + { + "label": "\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", + "file_type": "document", + "source_file": "pages/B09_Estimation/B09_frontend.md", + "source_location": "L26", + "_origin": "ast", + "id": "pages_b09_estimation_b09_frontend_\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", + "community": 32, + "community_name": "B09_Estimation \u2014 Frontend", + "norm_label": "\u1105\u1169\u110f\u1165\u11af\u1105\u1161\u110b\u1175\u110c\u1166\u110b\u1175\u1109\u1167\u11ab" + }, + { + "label": "\uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/B09_Estimation/B09_frontend.md", + "source_location": "L32", + "_origin": "ast", + "id": "pages_b09_estimation_b09_frontend_\uc758\uc874\uc131", + "community": 32, + "community_name": "B09_Estimation \u2014 Frontend", + "norm_label": "\u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "\ubc31\uc5d4\ub4dc/DB \u2014 \ubbf8\ucc29\uc218", + "file_type": "document", + "source_file": "pages/B09_Estimation/B09_frontend.md", + "source_location": "L37", + "_origin": "ast", + "id": "pages_b09_estimation_b09_frontend_\ubc31\uc5d4\ub4dc_db_\ubbf8\ucc29\uc218", + "community": 32, + "community_name": "B09_Estimation \u2014 Frontend", + "norm_label": "\u1107\u1162\u11a8\u110b\u1166\u11ab\u1103\u1173/db \u2014 \u1106\u1175\u110e\u1161\u11a8\u1109\u116e" + }, + { + "label": "\ucc38\uace0", + "file_type": "document", + "source_file": "pages/B09_Estimation/B09_frontend.md", + "source_location": "L44", + "_origin": "ast", + "id": "pages_b09_estimation_b09_frontend_\ucc38\uace0", + "community": 32, + "community_name": "B09_Estimation \u2014 Frontend", + "norm_label": "\u110e\u1161\u11b7\u1100\u1169" + }, + { + "label": "B09_overview_2026_09.md", + "file_type": "document", + "source_file": "pages/B09_Estimation/B09_overview_2026_09.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b09_estimation_b09_overview_2026_09", + "community": 46, + "community_name": "\uc784\ub3c4\uae30\uc220\uad50\ubcf8 \uc6d0\ubb38 md \ucd94\ucd9c \ud488\uc9c8 \uacb0\ud568", + "norm_label": "b09_overview_2026_09.md" + }, + { + "label": "B09 Estimation \u2014 2026-09 \uc6d0\uac00\uacc4\uc0b0", + "file_type": "document", + "source_file": "pages/B09_Estimation/B09_overview_2026_09.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b09_estimation_b09_overview_2026_09_b09_estimation_2026_09_\uc6d0\uac00\uacc4\uc0b0", + "community": 46, + "community_name": "\uc784\ub3c4\uae30\uc220\uad50\ubcf8 \uc6d0\ubb38 md \ucd94\ucd9c \ud488\uc9c8 \uacb0\ud568", + "norm_label": "b09 estimation \u2014 2026-09 \u110b\u116f\u11ab\u1100\u1161\u1100\u1168\u1109\u1161\u11ab" + }, + { + "label": "\uad6c\ud604 \uad6c\uc131", + "file_type": "document", + "source_file": "pages/B09_Estimation/B09_overview_2026_09.md", + "source_location": "L14", + "_origin": "ast", + "id": "pages_b09_estimation_b09_overview_2026_09_\uad6c\ud604_\uad6c\uc131", + "community": 46, + "community_name": "\uc784\ub3c4\uae30\uc220\uad50\ubcf8 \uc6d0\ubb38 md \ucd94\ucd9c \ud488\uc9c8 \uacb0\ud568", + "norm_label": "\u1100\u116e\u1112\u1167\u11ab \u1100\u116e\u1109\u1165\u11bc" + }, + { + "label": "\ub9c8\uac10 \uae30\ub85d", + "file_type": "document", + "source_file": "pages/B09_Estimation/B09_overview_2026_09.md", + "source_location": "L26", + "_origin": "ast", + "id": "pages_b09_estimation_b09_overview_2026_09_\ub9c8\uac10_\uae30\ub85d", + "community": 46, + "community_name": "\uc784\ub3c4\uae30\uc220\uad50\ubcf8 \uc6d0\ubb38 md \ucd94\ucd9c \ud488\uc9c8 \uacb0\ud568", + "norm_label": "\u1106\u1161\u1100\u1161\u11b7 \u1100\u1175\u1105\u1169\u11a8" + }, + { + "label": "\uc644\ub8cc \uacbd\uacc4", + "file_type": "document", + "source_file": "pages/B09_Estimation/B09_overview_2026_09.md", + "source_location": "L35", + "_origin": "ast", + "id": "pages_b09_estimation_b09_overview_2026_09_\uc644\ub8cc_\uacbd\uacc4", + "community": 46, + "community_name": "\uc784\ub3c4\uae30\uc220\uad50\ubcf8 \uc6d0\ubb38 md \ucd94\ucd9c \ud488\uc9c8 \uacb0\ud568", + "norm_label": "\u110b\u116a\u11ab\u1105\u116d \u1100\u1167\u11bc\u1100\u1168" + }, + { + "label": "B09_Estimation_UI_Page.md", + "file_type": "document", + "source_file": "pages/B09_Estimation/frontend/B09_Estimation_UI_Page.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b09_estimation_frontend_b09_estimation_ui_page", + "community": 155, + "community_name": "B09_Estimation_UI_Page.md", + "norm_label": "b09_estimation_ui_page.md" + }, + { + "label": "B09_Estimation_UI_Page.ts", + "file_type": "document", + "source_file": "pages/B09_Estimation/frontend/B09_Estimation_UI_Page.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b09_estimation_frontend_b09_estimation_ui_page_b09_estimation_ui_page_ts", + "community": 155, + "community_name": "B09_Estimation_UI_Page.md", + "norm_label": "b09_estimation_ui_page.ts" + }, + { + "label": "\ud83d\udee0\ufe0f \uc8fc\uc694 \ud568\uc218 \ubaa9\ub85d", + "file_type": "document", + "source_file": "pages/B09_Estimation/frontend/B09_Estimation_UI_Page.md", + "source_location": "L14", + "_origin": "ast", + "id": "pages_b09_estimation_frontend_b09_estimation_ui_page_\uc8fc\uc694_\ud568\uc218_\ubaa9\ub85d", + "community": 155, + "community_name": "B09_Estimation_UI_Page.md", + "norm_label": "\ud83d\udee0\ufe0f \u110c\u116e\u110b\u116d \u1112\u1161\u11b7\u1109\u116e \u1106\u1169\u11a8\u1105\u1169\u11a8" + }, + { + "label": "B10_frontend.md", + "file_type": "document", + "source_file": "pages/B10_Payment/B10_frontend.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b10_payment_b10_frontend", + "community": 42, + "community_name": "B10_Payment \u2014 Frontend", + "norm_label": "b10_frontend.md" + }, + { + "label": "B10_Payment \u2014 Frontend", + "file_type": "document", + "source_file": "pages/B10_Payment/B10_frontend.md", + "source_location": "L9", + "_origin": "ast", + "id": "pages_b10_payment_b10_frontend_b10_payment_frontend", + "community": 42, + "community_name": "B10_Payment \u2014 Frontend", + "norm_label": "b10_payment \u2014 frontend" + }, + { + "label": "\ud30c\uc77c \uad6c\uc870", + "file_type": "document", + "source_file": "pages/B10_Payment/B10_frontend.md", + "source_location": "L13", + "_origin": "ast", + "id": "pages_b10_payment_b10_frontend_\ud30c\uc77c_\uad6c\uc870", + "community": 42, + "community_name": "B10_Payment \u2014 Frontend", + "norm_label": "\u1111\u1161\u110b\u1175\u11af \u1100\u116e\u110c\u1169" + }, + { + "label": "\uc8fc\uc694 \ucef4\ud3ec\ub10c\ud2b8 \ubc0f \ud568\uc218 (Mockup)", + "file_type": "document", + "source_file": "pages/B10_Payment/B10_frontend.md", + "source_location": "L20", + "_origin": "ast", + "id": "pages_b10_payment_b10_frontend_\uc8fc\uc694_\ucef4\ud3ec\ub10c\ud2b8_\ubc0f_\ud568\uc218_mockup", + "community": 42, + "community_name": "B10_Payment \u2014 Frontend", + "norm_label": "\u110c\u116e\u110b\u116d \u110f\u1165\u11b7\u1111\u1169\u1102\u1165\u11ab\u1110\u1173 \u1106\u1175\u11be \u1112\u1161\u11b7\u1109\u116e (mockup)" + }, + { + "label": "\ube44\uc988\ub2c8\uc2a4 \ub85c\uc9c1 \uc804\uc81c (\ubaa9\uc5c5)", + "file_type": "document", + "source_file": "pages/B10_Payment/B10_frontend.md", + "source_location": "L27", + "_origin": "ast", + "id": "pages_b10_payment_b10_frontend_\ube44\uc988\ub2c8\uc2a4_\ub85c\uc9c1_\uc804\uc81c_\ubaa9\uc5c5", + "community": 42, + "community_name": "B10_Payment \u2014 Frontend", + "norm_label": "\u1107\u1175\u110c\u1173\u1102\u1175\u1109\u1173 \u1105\u1169\u110c\u1175\u11a8 \u110c\u1165\u11ab\u110c\u1166 (\u1106\u1169\u11a8\u110b\u1165\u11b8)" + }, + { + "label": "\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", + "file_type": "document", + "source_file": "pages/B10_Payment/B10_frontend.md", + "source_location": "L32", + "_origin": "ast", + "id": "pages_b10_payment_b10_frontend_\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", + "community": 42, + "community_name": "B10_Payment \u2014 Frontend", + "norm_label": "\u1105\u1169\u110f\u1165\u11af\u1105\u1161\u110b\u1175\u110c\u1166\u110b\u1175\u1109\u1167\u11ab" + }, + { + "label": "\uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/B10_Payment/B10_frontend.md", + "source_location": "L41", + "_origin": "ast", + "id": "pages_b10_payment_b10_frontend_\uc758\uc874\uc131", + "community": 42, + "community_name": "B10_Payment \u2014 Frontend", + "norm_label": "\u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "B10_Payment_UI_Page.md", + "file_type": "document", + "source_file": "pages/B10_Payment/frontend/B10_Payment_UI_Page.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b10_payment_frontend_b10_payment_ui_page", + "community": 156, + "community_name": "B10_Payment_UI_Page.md", + "norm_label": "b10_payment_ui_page.md" + }, + { + "label": "B10_Payment_UI_Page.ts", + "file_type": "document", + "source_file": "pages/B10_Payment/frontend/B10_Payment_UI_Page.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b10_payment_frontend_b10_payment_ui_page_b10_payment_ui_page_ts", + "community": 156, + "community_name": "B10_Payment_UI_Page.md", + "norm_label": "b10_payment_ui_page.ts" + }, + { + "label": "\ud83d\udee0\ufe0f \uc8fc\uc694 \ud568\uc218 \ubaa9\ub85d", + "file_type": "document", + "source_file": "pages/B10_Payment/frontend/B10_Payment_UI_Page.md", + "source_location": "L14", + "_origin": "ast", + "id": "pages_b10_payment_frontend_b10_payment_ui_page_\uc8fc\uc694_\ud568\uc218_\ubaa9\ub85d", + "community": 156, + "community_name": "B10_Payment_UI_Page.md", + "norm_label": "\ud83d\udee0\ufe0f \u110c\u116e\u110b\u116d \u1112\u1161\u11b7\u1109\u116e \u1106\u1169\u11a8\u1105\u1169\u11a8" + }, + { + "label": "B11_frontend.md", + "file_type": "document", + "source_file": "pages/B11_Status/B11_frontend.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b11_status_b11_frontend", + "community": 43, + "community_name": "B11_Status \u2014 Frontend", + "norm_label": "b11_frontend.md" + }, + { + "label": "B11_Status \u2014 Frontend", + "file_type": "document", + "source_file": "pages/B11_Status/B11_frontend.md", + "source_location": "L9", + "_origin": "ast", + "id": "pages_b11_status_b11_frontend_b11_status_frontend", + "community": 43, + "community_name": "B11_Status \u2014 Frontend", + "norm_label": "b11_status \u2014 frontend" + }, + { + "label": "\ud30c\uc77c \uad6c\uc870", + "file_type": "document", + "source_file": "pages/B11_Status/B11_frontend.md", + "source_location": "L13", + "_origin": "ast", + "id": "pages_b11_status_b11_frontend_\ud30c\uc77c_\uad6c\uc870", + "community": 43, + "community_name": "B11_Status \u2014 Frontend", + "norm_label": "\u1111\u1161\u110b\u1175\u11af \u1100\u116e\u110c\u1169" + }, + { + "label": "\uc8fc\uc694 \ucef4\ud3ec\ub10c\ud2b8 \ubc0f \uae30\ub2a5 (Mockup)", + "file_type": "document", + "source_file": "pages/B11_Status/B11_frontend.md", + "source_location": "L21", + "_origin": "ast", + "id": "pages_b11_status_b11_frontend_\uc8fc\uc694_\ucef4\ud3ec\ub10c\ud2b8_\ubc0f_\uae30\ub2a5_mockup", + "community": 43, + "community_name": "B11_Status \u2014 Frontend", + "norm_label": "\u110c\u116e\u110b\u116d \u110f\u1165\u11b7\u1111\u1169\u1102\u1165\u11ab\u1110\u1173 \u1106\u1175\u11be \u1100\u1175\u1102\u1173\u11bc (mockup)" + }, + { + "label": "\uacb0\uc7ac \uc0c1\ud0dc \ud750\ub984 (Payment Flow Status)", + "file_type": "document", + "source_file": "pages/B11_Status/B11_frontend.md", + "source_location": "L29", + "_origin": "ast", + "id": "pages_b11_status_b11_frontend_\uacb0\uc7ac_\uc0c1\ud0dc_\ud750\ub984_payment_flow_status", + "community": 43, + "community_name": "B11_Status \u2014 Frontend", + "norm_label": "\u1100\u1167\u11af\u110c\u1162 \u1109\u1161\u11bc\u1110\u1162 \u1112\u1173\u1105\u1173\u11b7 (payment flow status)" + }, + { + "label": "\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", + "file_type": "document", + "source_file": "pages/B11_Status/B11_frontend.md", + "source_location": "L35", + "_origin": "ast", + "id": "pages_b11_status_b11_frontend_\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", + "community": 43, + "community_name": "B11_Status \u2014 Frontend", + "norm_label": "\u1105\u1169\u110f\u1165\u11af\u1105\u1161\u110b\u1175\u110c\u1166\u110b\u1175\u1109\u1167\u11ab" + }, + { + "label": "\uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/B11_Status/B11_frontend.md", + "source_location": "L44", + "_origin": "ast", + "id": "pages_b11_status_b11_frontend_\uc758\uc874\uc131", + "community": 43, + "community_name": "B11_Status \u2014 Frontend", + "norm_label": "\u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "B11_Status_UI_Page.md", + "file_type": "document", + "source_file": "pages/B11_Status/frontend/B11_Status_UI_Page.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b11_status_frontend_b11_status_ui_page", + "community": 157, + "community_name": "B11_Status_UI_Page.md", + "norm_label": "b11_status_ui_page.md" + }, + { + "label": "B11_Status_UI_Page.ts", + "file_type": "document", + "source_file": "pages/B11_Status/frontend/B11_Status_UI_Page.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b11_status_frontend_b11_status_ui_page_b11_status_ui_page_ts", + "community": 157, + "community_name": "B11_Status_UI_Page.md", + "norm_label": "b11_status_ui_page.ts" + }, + { + "label": "\ud83d\udee0\ufe0f \uc8fc\uc694 \ud568\uc218 \ubaa9\ub85d", + "file_type": "document", + "source_file": "pages/B11_Status/frontend/B11_Status_UI_Page.md", + "source_location": "L14", + "_origin": "ast", + "id": "pages_b11_status_frontend_b11_status_ui_page_\uc8fc\uc694_\ud568\uc218_\ubaa9\ub85d", + "community": 157, + "community_name": "B11_Status_UI_Page.md", + "norm_label": "\ud83d\udee0\ufe0f \u110c\u116e\u110b\u116d \u1112\u1161\u11b7\u1109\u116e \u1106\u1169\u11a8\u1105\u1169\u11a8" + }, + { + "label": "Query: \ubc30\uc218\uad00 \ub9e4\uc124 \uac01\ub3c4 \uc81c\uc57d\uc870\uac74 (\uc784\ub3c4)", + "file_type": "document", + "source_file": "graphify-out/memory/query_20260821_070423_\ubc30\uc218\uad00_\ub9e4\uc124\uc2dc_\uac01\ub3c4\uc758_\uc81c\uc57d\uc870\uac74\uc774_\uc788\ub294\uc9c0_\ud655\uc778\ud574\uc918__\uc784\ub3c4\uc5d0\uc11c.md", + "community": 195, + "norm_label": "query: \u1107\u1162\u1109\u116e\u1100\u116a\u11ab \u1106\u1162\u1109\u1165\u11af \u1100\u1161\u11a8\u1103\u1169 \u110c\u1166\u110b\u1163\u11a8\u110c\u1169\u1100\u1165\u11ab (\u110b\u1175\u11b7\u1103\u1169)", + "community_name": "Query: \ubc30\uc218\uad00 \ub9e4\uc124 \uac01\ub3c4 \uc81c\uc57d\uc870\uac74 (\uc784\ub3c4)", + "id": "query_20260821_070423_\ubc30\uc218\uad00_\ub9e4\uc124\uc2dc_\uac01\ub3c4\uc758_\uc81c\uc57d\uc870\uac74\uc774_\uc788\ub294\uc9c0_\ud655\uc778\ud574\uc918__\uc784\ub3c4_md_query" + }, + { + "label": "Query: \uc784\ub3c4 \uc9d1\uc218\uc815 \ud615\ud0dc\uc815\ubcf4", + "file_type": "document", + "source_file": "graphify-out/memory/query_20260821_101018_\uc784\ub3c4_\uae30\uc220\uc815\ubcf4db\uc5d0\uc11c_\uc9d1\uc218\uc815\uc758_\ud615\ud0dc\uc815\ubcf4\ub294_\uc5b4\ub5a4\uac8c_\uc788\ub294\uc9c0_\ud655\uc778\ud574\uc918.md", + "community": 185, + "norm_label": "query: \u110b\u1175\u11b7\u1103\u1169 \u110c\u1175\u11b8\u1109\u116e\u110c\u1165\u11bc \u1112\u1167\u11bc\u1110\u1162\u110c\u1165\u11bc\u1107\u1169", + "community_name": "Query: \uc784\ub3c4 \uc9d1\uc218\uc815 \ud615\ud0dc\uc815\ubcf4", + "id": "graphify_out_memory_query_20260821_101018_\uc784\ub3c4_\uae30\uc220\uc815\ubcf4db\uc5d0\uc11c_\uc9d1\uc218\uc815\uc758_\ud615\ud0dc\uc815\ubcf4\ub294_\uc5b4\ub5a4\uac8c_\uc788\ub294\uc9c0_\ud655\uc778\ud574\uc918_md_query" + }, + { + "label": "B08_DesignDetail_Engine_Cad_MassHaul.py", + "file_type": "code", + "source_file": "pages/B08_DesignDetail/B08_drawing_masshaul_watershed.md", + "community": 170, + "norm_label": "b08_designdetail_engine_cad_masshaul.py", + "community_name": "B08_DesignDetail_Engine_Cad_MassHaul.py", + "id": "b08_designdetail_b08_designdetail_engine_cad_masshaul_py" + }, + { + "label": "B08_DesignDetail_Engine_Cad_Basin.py", + "file_type": "code", + "source_file": "pages/B08_DesignDetail/B08_drawing_masshaul_watershed.md", + "community": 169, + "norm_label": "b08_designdetail_engine_cad_basin.py", + "community_name": "B08_DesignDetail_Engine_Cad_Basin.py", + "id": "b08_designdetail_b08_designdetail_engine_cad_basin_py" + }, + { + "label": "common_util_mass_haul_settle.ts", + "file_type": "code", + "source_file": "pages/B08_DesignDetail/B08_drawing_masshaul_watershed.md", + "community": 177, + "norm_label": "common_util_mass_haul_settle.ts", + "community_name": "common_util_mass_haul_settle.ts", + "id": "common_util_common_util_mass_haul_settle_ts" + }, + { + "label": "Mass Haul Diagram (\ud1a0\uc801\ub3c4)", + "file_type": "concept", + "source_file": "pages/B08_DesignDetail/B08_drawing_masshaul_watershed.md", + "community": 179, + "norm_label": "mass haul diagram (\u1110\u1169\u110c\u1165\u11a8\u1103\u1169)", + "community_name": "Mass Haul Diagram (\ud1a0\uc801\ub3c4)", + "id": "concept_mass_haul_diagram" + }, + { + "label": "Drainage Watershed (\uc720\uc5ed\ub3c4)", + "file_type": "concept", + "source_file": "pages/B08_DesignDetail/B08_drawing_masshaul_watershed.md", + "community": 178, + "norm_label": "drainage watershed (\u110b\u1172\u110b\u1167\u11a8\u1103\u1169)", + "community_name": "Drainage Watershed (\uc720\uc5ed\ub3c4)", + "id": "concept_drainage_watershed" + }, + { + "label": "OpenWebCAD Core", + "file_type": "code", + "source_file": "B08_DesignDetail/openwebcad", + "community": 176, + "norm_label": "openwebcad core", + "community_name": "OpenWebCAD Core", + "id": "b08_designdetail_openwebcad_app" + }, + { + "label": "B03 File Input Backend", + "file_type": "code", + "source_file": "pages/B03_FileInput/B03_backend.md", + "community": 187, + "norm_label": "b03 file input backend", + "community_name": "B03 File Input Backend", + "id": "pages_b03_fileinput_backend" + }, + { + "label": "B03 File Input Frontend", + "file_type": "code", + "source_file": "pages/B03_FileInput/B03_frontend.md", + "community": 188, + "norm_label": "b03 file input frontend", + "community_name": "B03 File Input Frontend", + "id": "pages_b03_fileinput_frontend" + }, + { + "label": "B04 PreProcess Backend", + "file_type": "code", + "source_file": "pages/B04_PreProcess/B04_backend.md", + "community": 189, + "norm_label": "b04 preprocess backend", + "community_name": "B04 PreProcess Backend", + "id": "pages_b04_preprocess_backend" + }, + { + "label": "B04 PreProcess Frontend", + "file_type": "code", + "source_file": "pages/B04_PreProcess/B04_frontend.md", + "community": 190, + "norm_label": "b04 preprocess frontend", + "community_name": "B04 PreProcess Frontend", + "id": "pages_b04_preprocess_frontend" + }, + { + "label": "B08 CAD Blocks Library", + "file_type": "code", + "source_file": "pages/B08_DesignDetail/B08_CAD_blocks.md", + "community": 192, + "norm_label": "b08 cad blocks library", + "community_name": "B08 CAD Blocks Library", + "id": "pages_b08_designdetail_cad_blocks" + }, + { + "label": "B08 CAD Table Entity", + "file_type": "code", + "source_file": "pages/B08_DesignDetail/B08_CAD_table_entity.md", + "community": 193, + "norm_label": "b08 cad table entity", + "community_name": "B08 CAD Table Entity", + "id": "pages_b08_designdetail_cad_table_entity" + }, + { + "label": "B08 Cross Section Structure Sheets", + "file_type": "code", + "source_file": "pages/B08_DesignDetail/B08_cross_structure_sheets.md", + "community": 194, + "norm_label": "b08 cross section structure sheets", + "community_name": "B08 Cross Section Structure Sheets", + "id": "pages_b08_designdetail_cross_structure_sheets" + } + ], + "links": [ + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "architecture/implementation_status.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "architecture_implementation_status", + "target": "architecture_implementation_status_\ud604\uc7ac_\uad6c\ud604_\ud604\ud669_\uc18c\uc2a4_\uc77d\uae30_\uac10\uc0ac", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "index.md", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast", + "source": "index", + "target": "architecture_implementation_status", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "architecture/implementation_status.md", + "source_location": "L40", + "weight": 1.0, + "_origin": "ast", + "source": "architecture_implementation_status_\ud604\uc7ac_\uad6c\ud604_\ud604\ud669_\uc18c\uc2a4_\uc77d\uae30_\uac10\uc0ac", + "target": "architecture_implementation_status_\uad6c\ud604_\uc0c1\ud0dc_\uc6a9\uc5b4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "architecture/implementation_status.md", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast", + "source": "architecture_implementation_status_\ud604\uc7ac_\uad6c\ud604_\ud604\ud669_\uc18c\uc2a4_\uc77d\uae30_\uac10\uc0ac", + "target": "architecture_implementation_status_\ub2e8\uacc4\ubcc4_\ud310\uc815", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "architecture/implementation_status.md", + "source_location": "L61", + "weight": 1.0, + "_origin": "ast", + "source": "architecture_implementation_status_\ud604\uc7ac_\uad6c\ud604_\ud604\ud669_\uc18c\uc2a4_\uc77d\uae30_\uac10\uc0ac", + "target": "architecture_implementation_status_\ubbf8\uacb0_\uc124\uacc4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "architecture/implementation_status.md", + "source_location": "L50", + "weight": 1.0, + "_origin": "ast", + "source": "architecture_implementation_status_\ud604\uc7ac_\uad6c\ud604_\ud604\ud669_\uc18c\uc2a4_\uc77d\uae30_\uac10\uc0ac", + "target": "architecture_implementation_status_\ubc18\ub4dc\uc2dc_\uc720\uc9c0\ud560_\uad6c\ubd84", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "architecture/implementation_status.md", + "source_location": "L25", + "weight": 1.0, + "_origin": "ast", + "source": "architecture_implementation_status_\ud604\uc7ac_\uad6c\ud604_\ud604\ud669_\uc18c\uc2a4_\uc77d\uae30_\uac10\uc0ac", + "target": "architecture_implementation_status_\ube44\uc6cc\ud06c\ud50c\ub85c_\uc601\uc5ed_\ud310\uc815", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "architecture/project_map.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "architecture_project_map", + "target": "architecture_project_map_aislo_\ud504\ub85c\uc81d\ud2b8_\uc9c0\ub3c4", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "index.md", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast", + "source": "index", + "target": "architecture_project_map", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "weight": 1.0, + "source_file": "pages/B07_DesignDetail/B07_frontend.md", + "source_location": "wikilink", + "_origin": "curated", + "source": "pages_b07_designdetail_b07_frontend_b07_designdetail_\ud604\uc7ac_\ucc45\uc784", + "target": "architecture_project_map" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "architecture/project_map.md", + "source_location": "L39", + "weight": 1.0, + "_origin": "ast", + "source": "architecture_project_map_aislo_\ud504\ub85c\uc81d\ud2b8_\uc9c0\ub3c4", + "target": "architecture_project_map_\uba85\uce6d_\ud310\uc815", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "architecture/project_map.md", + "source_location": "L29", + "weight": 1.0, + "_origin": "ast", + "source": "architecture_project_map_aislo_\ud504\ub85c\uc81d\ud2b8_\uc9c0\ub3c4", + "target": "architecture_project_map_\ud0d0\uc0c9_\uc21c\uc11c", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "architecture/project_map.md", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast", + "source": "architecture_project_map_aislo_\ud504\ub85c\uc81d\ud2b8_\uc9c0\ub3c4", + "target": "architecture_project_map_\ud604\uc7ac_\uba85\uce6d\uacfc_\ucc45\uc784", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "architecture/public_admin_map.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "architecture_public_admin_map", + "target": "architecture_public_admin_map_\uacf5\uac1c_\uc778\uc99d_\uad00\ub9ac_\uc601\uc5ed_\uc9c0\ub3c4", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "index.md", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast", + "source": "index", + "target": "architecture_public_admin_map", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "architecture/public_admin_map.md", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast", + "source": "architecture_public_admin_map_\uacf5\uac1c_\uc778\uc99d_\uad00\ub9ac_\uc601\uc5ed_\uc9c0\ub3c4", + "target": "architecture_public_admin_map_\uacf5\ud1b5_\uc758\uc874", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "architecture/public_admin_map.md", + "source_location": "L34", + "weight": 1.0, + "_origin": "ast", + "source": "architecture_public_admin_map_\uacf5\uac1c_\uc778\uc99d_\uad00\ub9ac_\uc601\uc5ed_\uc9c0\ub3c4", + "target": "architecture_public_admin_map_\uc9c1\uc811_\uad6c\ud604_\uad00\uacc4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "architecture/shared_resources.md", + "source_location": "L8", + "weight": 1.0, + "_origin": "ast", + "source": "architecture_shared_resources", + "target": "architecture_shared_resources_\uacf5\uc720_\uc790\uc6d0_\uc601\ud5a5_\uc9c0\ub3c4", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "index.md", + "source_location": "L16", + "weight": 1.0, + "_origin": "ast", + "source": "index", + "target": "architecture_shared_resources", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "architecture/shared_resources.md", + "source_location": "L29", + "weight": 1.0, + "_origin": "ast", + "source": "architecture_shared_resources_\uacf5\uc720_\uc790\uc6d0_\uc601\ud5a5_\uc9c0\ub3c4", + "target": "architecture_shared_resources_\ub2e8\uacc4\ubcc4_\uc9c1\uc811_\uc5f0\uacb0", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "architecture/shared_resources.md", + "source_location": "L41", + "weight": 1.0, + "_origin": "ast", + "source": "architecture_shared_resources_\uacf5\uc720_\uc790\uc6d0_\uc601\ud5a5_\uc9c0\ub3c4", + "target": "architecture_shared_resources_\uc601\ud5a5_\ubd84\uc11d_\uaddc\uce59", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "architecture/workflow_data_flow.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "architecture_workflow_data_flow", + "target": "architecture_workflow_data_flow_b01_b09_workflow_\ub370\uc774\ud130_\ud750\ub984", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "weight": 1.0, + "source_file": "concepts/completed_2026-09-07.md", + "source_location": "wikilink", + "_origin": "curated", + "source": "concepts_completed_2026_09_07", + "target": "architecture_workflow_data_flow" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "weight": 1.0, + "source_file": "concepts/quantity_cost_contract.md", + "source_location": "wikilink", + "_origin": "curated", + "source": "concepts_quantity_cost_contract", + "target": "architecture_workflow_data_flow" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "index.md", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "index", + "target": "architecture_workflow_data_flow", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "weight": 1.0, + "source_file": "pages/B07_DesignDetail/B07_frontend.md", + "source_location": "wikilink", + "_origin": "curated", + "source": "pages_b07_designdetail_b07_frontend_b07_designdetail_\ud604\uc7ac_\ucc45\uc784", + "target": "architecture_workflow_data_flow" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "architecture/workflow_data_flow.md", + "source_location": "L25", + "weight": 1.0, + "_origin": "ast", + "source": "architecture_workflow_data_flow_b01_b09_workflow_\ub370\uc774\ud130_\ud750\ub984", + "target": "architecture_workflow_data_flow_b04_b06_\uc790\ub3d9_\uacc4\uc0b0\uacfc_\uc7ac\uc124\uacc4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "architecture/workflow_data_flow.md", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast", + "source": "architecture_workflow_data_flow_b01_b09_workflow_\ub370\uc774\ud130_\ud750\ub984", + "target": "architecture_workflow_data_flow_\ub2e8\uacc4_\uad00\uacc4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "architecture/workflow_data_flow.md", + "source_location": "L35", + "weight": 1.0, + "_origin": "ast", + "source": "architecture_workflow_data_flow_b01_b09_workflow_\ub370\uc774\ud130_\ud750\ub984", + "target": "architecture_workflow_data_flow_\uc0c1\ud0dc\uc640_\uc0b0\ucd9c\ubb3c_\ubb34\ud6a8\ud654", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "architecture/workflow_data_flow.md", + "source_location": "L43", + "weight": 1.0, + "_origin": "ast", + "source": "architecture_workflow_data_flow_b01_b09_workflow_\ub370\uc774\ud130_\ud750\ub984", + "target": "architecture_workflow_data_flow_\uc815\ubcf8_\uc704\uce58", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/a00_app_shell_framework.md", + "source_location": "L8", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_a00_app_shell_framework", + "target": "concepts_a00_app_shell_framework_a00_common_app_shell_framework", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "concepts/a00_app_shell_framework.md", + "source_location": "L41", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_a00_app_shell_framework", + "target": "concepts_a00_app_shell_framework_scaffold", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "concepts/dependencies.md", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_dependencies", + "target": "concepts_a00_app_shell_framework", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/a00_app_shell_framework.md", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_a00_app_shell_framework_a00_common_app_shell_framework", + "target": "concepts_a00_app_shell_framework_app_shell_\uad6c\uc131\uc694\uc18c", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/a00_app_shell_framework.md", + "source_location": "L32", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_a00_app_shell_framework_a00_common_app_shell_framework", + "target": "concepts_a00_app_shell_framework_router_\ub77c\uc6b0\ud305_\ud14c\uc774\ube14", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/a00_app_shell_framework.md", + "source_location": "L40", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_a00_app_shell_framework_a00_common_app_shell_framework", + "target": "concepts_a00_app_shell_framework_\uc138\ubd80_\uc2a4\uce90\ud3f4\ub4dc_css_\uc885\uc18d\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/a00_app_shell_framework.md", + "source_location": "L36", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_a00_app_shell_framework_a00_common_app_shell_framework", + "target": "concepts_a00_app_shell_framework_\uc778\uc99d_\uac00\ub4dc", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/a00_app_shell_framework.md", + "source_location": "L12", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_a00_app_shell_framework_a00_common_app_shell_framework", + "target": "concepts_a00_app_shell_framework_\ud30c\uc77c_\uad6c\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/a00_app_shell_framework.md", + "source_location": "L22", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_a00_app_shell_framework_app_shell_\uad6c\uc131\uc694\uc18c", + "target": "concepts_a00_app_shell_framework_\ud14c\ub9c8_\uc5b8\uc5b4_\uad00\ub9ac", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/a00_app_shell_framework.md", + "source_location": "L27", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_a00_app_shell_framework_app_shell_\uad6c\uc131\uc694\uc18c", + "target": "concepts_a00_app_shell_framework_\ud5e4\ub354_\uad6c\uc131_64px_\ub192\uc774_sticky", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/a00_app_shell_framework_scaffold.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_a00_app_shell_framework_scaffold", + "target": "concepts_a00_app_shell_framework_scaffold_a00_common_\uc2a4\uce90\ud3f4\ub4dc_css_\uc885\uc18d\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/a00_app_shell_framework_scaffold.md", + "source_location": "L12", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_a00_app_shell_framework_scaffold_a00_common_\uc2a4\uce90\ud3f4\ub4dc_css_\uc885\uc18d\uc131", + "target": "concepts_a00_app_shell_framework_scaffold_b_page_scaffold", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/a00_app_shell_framework_scaffold.md", + "source_location": "L19", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_a00_app_shell_framework_scaffold_a00_common_\uc2a4\uce90\ud3f4\ub4dc_css_\uc885\uc18d\uc131", + "target": "concepts_a00_app_shell_framework_scaffold_css_\uc778\uc81d\uc158", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/a00_app_shell_framework_scaffold.md", + "source_location": "L34", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_a00_app_shell_framework_scaffold_a00_common_\uc2a4\uce90\ud3f4\ub4dc_css_\uc885\uc18d\uc131", + "target": "concepts_a00_app_shell_framework_scaffold_\uc0ac\uc6a9\ucc98", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/a00_app_shell_framework_scaffold.md", + "source_location": "L26", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_a00_app_shell_framework_scaffold_a00_common_\uc2a4\uce90\ud3f4\ub4dc_css_\uc885\uc18d\uc131", + "target": "concepts_a00_app_shell_framework_scaffold_\uc885\uc18d\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/api_common.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_api_common", + "target": "concepts_api_common_api_\uacf5\ud1b5_\uc5ec\ub7ec_\ud398\uc774\uc9c0\uac00_\uacf5\uc720\ud558\ub294_\uc5d4\ub4dc\ud3ec\uc778\ud2b8", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "concepts/api_common.md", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_api_common", + "target": "concepts_schema_common", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "concepts/api_common.md", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_api_common", + "target": "concepts_workflow_state", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/api_common.md", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_api_common_api_\uacf5\ud1b5_\uc5ec\ub7ec_\ud398\uc774\uc9c0\uac00_\uacf5\uc720\ud558\ub294_\uc5d4\ub4dc\ud3ec\uc778\ud2b8", + "target": "concepts_api_common_\uacf5\ud1b5_\uc624\ub958_\uc751\ub2f5_\ud3ec\ub9f7_\uc804_\ub77c\uc6b0\ud130", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/api_common.md", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_api_common_api_\uacf5\ud1b5_\uc5ec\ub7ec_\ud398\uc774\uc9c0\uac00_\uacf5\uc720\ud558\ub294_\uc5d4\ub4dc\ud3ec\uc778\ud2b8", + "target": "concepts_api_common_\uc6cc\ud06c\ud50c\ub85c\uc6b0_\uc0c1\ud0dc_\uc870\ud68c", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/api_common.md", + "source_location": "L25", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_api_common_api_\uacf5\ud1b5_\uc5ec\ub7ec_\ud398\uc774\uc9c0\uac00_\uacf5\uc720\ud558\ub294_\uc5d4\ub4dc\ud3ec\uc778\ud2b8", + "target": "concepts_api_common_\ud3f4\ub9c1_\ud328\ud134_legacy_workflow_json_\uc124\uacc4_\ud604\uc7ac_\uad6c\ud604\uc740_workflow_state_api_\uc0ac\uc6a9", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/auth_rbac.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_auth_rbac", + "target": "concepts_auth_rbac_\uc778\uc99d_rbac", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "concepts/auth_rbac.md", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_auth_rbac", + "target": "concepts_db_schema_users_auth", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "concepts/common_util.md", + "source_location": "L4", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_common_util", + "target": "concepts_auth_rbac", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/auth_rbac.md", + "source_location": "L18", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_auth_rbac_\uc778\uc99d_rbac", + "target": "concepts_auth_rbac_otp_\ube44\ubc00\ubc88\ud638_\ubc0f_\ub514\ubc14\uc774\uc2a4_\uc2e0\ub8b0", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/auth_rbac.md", + "source_location": "L46", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_auth_rbac_\uc778\uc99d_rbac", + "target": "concepts_auth_rbac_\uad8c\ud55c_\uac80\uc99d_\ud5ec\ud37c_b01_dashboard", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/auth_rbac.md", + "source_location": "L61", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_auth_rbac_\uc778\uc99d_rbac", + "target": "concepts_auth_rbac_\ub77c\uc6b0\ud305_\uac00\ub4dc_frontend_md_5_2", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/auth_rbac.md", + "source_location": "L27", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_auth_rbac_\uc778\uc99d_rbac", + "target": "concepts_auth_rbac_\uc0ac\uc6a9\uc790_\uc0c1\ud0dc_\uc0dd\uba85\uc8fc\uae30", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/auth_rbac.md", + "source_location": "L64", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_auth_rbac_\uc778\uc99d_rbac", + "target": "concepts_auth_rbac_\uc0ac\uc6a9\ucc98_\uc5ed\ucc38\uc870", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/auth_rbac.md", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_auth_rbac_\uc778\uc99d_rbac", + "target": "concepts_auth_rbac_\uc138\uc158_\uc778\uc99d_backend_md_6_3", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/auth_rbac.md", + "source_location": "L37", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_auth_rbac_\uc778\uc99d_rbac", + "target": "concepts_auth_rbac_\uc5ed\ud560_users_role", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/auth_rbac.md", + "source_location": "L57", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_auth_rbac_\uc778\uc99d_rbac", + "target": "concepts_auth_rbac_\uc778\uc99d_\uac31\uc2e0_\ubc0f_\ub9cc\ub8cc_\uc77c\uc6d0\ud654", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/b07_external_webcad_demos.md", + "source_location": "L8", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_b07_external_webcad_demos", + "target": "concepts_b07_external_webcad_demos_b07_\uc678\ubd80_webcad_\ube44\uad50_\uc2e4\ud589\ud658\uacbd", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/b07_external_webcad_demos.md", + "source_location": "L24", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_b07_external_webcad_demos_b07_\uc678\ubd80_webcad_\ube44\uad50_\uc2e4\ud589\ud658\uacbd", + "target": "concepts_b07_external_webcad_demos_\uac80\uc99d_\uc0c1\ud0dc", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/b07_external_webcad_demos.md", + "source_location": "L31", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_b07_external_webcad_demos_b07_\uc678\ubd80_webcad_\ube44\uad50_\uc2e4\ud589\ud658\uacbd", + "target": "concepts_b07_external_webcad_demos_\ub77c\uc774\uc120\uc2a4_\uc8fc\uc758", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/b07_external_webcad_demos.md", + "source_location": "L18", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_b07_external_webcad_demos_b07_\uc678\ubd80_webcad_\ube44\uad50_\uc2e4\ud589\ud658\uacbd", + "target": "concepts_b07_external_webcad_demos_\uc2e4\ud589\uacfc_\uc885\ub8cc", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/common_util.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_common_util", + "target": "concepts_common_util_\uacf5\ud1b5_\uc720\ud2f8_common_util", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "concepts/common_util.md", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_common_util", + "target": "concepts_storage_paths", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "concepts/common_util.md", + "source_location": "L25", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_common_util", + "target": "concepts_workflow_state", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "concepts/completed_2026-09-04.md", + "source_location": "L4", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_completed_2026_09_04", + "target": "concepts_common_util", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/common_util.md", + "source_location": "L43", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_common_util_\uacf5\ud1b5_\uc720\ud2f8_common_util", + "target": "concepts_common_util_\ub9ac\uc18c\uc2a4_\ubaa8\ub2c8\ud130\ub9c1_common_util_resource_monitor_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/common_util.md", + "source_location": "L39", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_common_util_\uacf5\ud1b5_\uc720\ud2f8_common_util", + "target": "concepts_common_util_\uc774\uba54\uc77c_\ubc1c\uc1a1_common_util_email_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/common_util/common_util_project_delete.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_common_util_common_util_project_delete", + "target": "concepts_common_util_common_util_project_delete_common_util_project_delete_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/common_util/common_util_project_delete.md", + "source_location": "L19", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_common_util_common_util_project_delete_common_util_project_delete_py", + "target": "concepts_common_util_common_util_project_delete_\uc5ed\ucc38\uc870_\uc0ac\uc6a9\ucc98", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/common_util/common_util_project_delete.md", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_common_util_common_util_project_delete_common_util_project_delete_py", + "target": "concepts_common_util_common_util_project_delete_\uc8fc\uc694_\ud568\uc218_\ubaa9\ub85d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/common_util/common_util_storage.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_common_util_common_util_storage", + "target": "concepts_common_util_common_util_storage_common_util_storage_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/common_util/common_util_storage.md", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_common_util_common_util_storage_common_util_storage_py", + "target": "concepts_common_util_common_util_storage_\uc5ed\ucc38\uc870_\uc0ac\uc6a9\ucc98", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/common_util/common_util_storage.md", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_common_util_common_util_storage_common_util_storage_py", + "target": "concepts_common_util_common_util_storage_\uc8fc\uc694_\ud568\uc218_\ubaa9\ub85d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/common_util/common_util_workflow_state.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_common_util_common_util_workflow_state", + "target": "concepts_common_util_common_util_workflow_state_common_util_workflow_state_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/common_util/common_util_workflow_state.md", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_common_util_common_util_workflow_state_common_util_workflow_state_py", + "target": "concepts_common_util_common_util_workflow_state_\uc5ed\ucc38\uc870_\uc0ac\uc6a9\ucc98", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/common_util/common_util_workflow_state.md", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_common_util_common_util_workflow_state_common_util_workflow_state_py", + "target": "concepts_common_util_common_util_workflow_state_\uc8fc\uc694_\ud568\uc218_\ubaa9\ub85d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/completed_2026-08-29.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_completed_2026_08_29", + "target": "concepts_completed_2026_08_29_2026_08_29_\uc644\ub8cc_\ubc18\uc601", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "concepts/completed_2026-09-01_followups.md", + "source_location": "L4", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_completed_2026_09_01_followups", + "target": "concepts_completed_2026_08_29", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/completed_2026-08-29.md", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_completed_2026_08_29_2026_08_29_\uc644\ub8cc_\ubc18\uc601", + "target": "concepts_completed_2026_08_29_b03_\uc7ac\uc5c5\ub85c\ub4dc_b05_\ucd5c\uc2e0_\uc870\ud68c", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/completed_2026-08-29.md", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_completed_2026_08_29_2026_08_29_\uc644\ub8cc_\ubc18\uc601", + "target": "concepts_completed_2026_08_29_b05_b06_\uad6c\uc870\ubb3c_ui_\ud1b5\ud569", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/completed_2026-08-29.md", + "source_location": "L62", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_completed_2026_08_29_2026_08_29_\uc644\ub8cc_\ubc18\uc601", + "target": "concepts_completed_2026_08_29_b07_b08_\uc21c\uc11c", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/completed_2026-08-29.md", + "source_location": "L32", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_completed_2026_08_29_2026_08_29_\uc644\ub8cc_\ubc18\uc601", + "target": "concepts_completed_2026_08_29_b07_cad_\uace0\uc815_\ucc99\ub3c4_\ud6a1\ub2e8_\uc7a5_\ubc30\uce58", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/completed_2026-08-29.md", + "source_location": "L43", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_completed_2026_08_29_2026_08_29_\uc644\ub8cc_\ubc18\uc601", + "target": "concepts_completed_2026_08_29_b07_cad_\ud14c\ub9c8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/completed_2026-08-29.md", + "source_location": "L53", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_completed_2026_08_29_2026_08_29_\uc644\ub8cc_\ubc18\uc601", + "target": "concepts_completed_2026_08_29_b07_cad_\ud655\ub300_\ud32c", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/completed_2026-08-29.md", + "source_location": "L92", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_completed_2026_08_29_2026_08_29_\uc644\ub8cc_\ubc18\uc601", + "target": "concepts_completed_2026_08_29_\ubc30\uc218\uc2dc\uc124_\ucd94\ucc9c_\uae30\uc900", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/completed_2026-08-29.md", + "source_location": "L72", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_completed_2026_08_29_2026_08_29_\uc644\ub8cc_\ubc18\uc601", + "target": "concepts_completed_2026_08_29_\ucd08\uae30\uac12_\ubcf4\uc804", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/completed_2026-08-29.md", + "source_location": "L83", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_completed_2026_08_29_2026_08_29_\uc644\ub8cc_\ubc18\uc601", + "target": "concepts_completed_2026_08_29_\ucd08\uae30\ud654_\ubcf5\uc6d0_\uc2e4\uce21", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/completed_2026-09-01.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_completed_2026_09_01", + "target": "concepts_completed_2026_09_01_2026_09_01_\uc644\ub8cc_b04_\uc9c0\uba74_\ucc98\ub9ac_b05_b06_\ubc30\uc218_\uc81c\uc5b4", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "concepts/completed_2026-09-01_followups.md", + "source_location": "L4", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_completed_2026_09_01_followups", + "target": "concepts_completed_2026_09_01", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/completed_2026-09-01.md", + "source_location": "L32", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_completed_2026_09_01_2026_09_01_\uc644\ub8cc_b04_\uc9c0\uba74_\ucc98\ub9ac_b05_b06_\ubc30\uc218_\uc81c\uc5b4", + "target": "concepts_completed_2026_09_01_\uac80\uc99d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/completed_2026-09-01.md", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_completed_2026_09_01_2026_09_01_\uc644\ub8cc_b04_\uc9c0\uba74_\ucc98\ub9ac_b05_b06_\ubc30\uc218_\uc81c\uc5b4", + "target": "concepts_completed_2026_09_01_\uc644\ub8cc_\ubc94\uc704", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/completed_2026-09-01.md", + "source_location": "L24", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_completed_2026_09_01_2026_09_01_\uc644\ub8cc_b04_\uc9c0\uba74_\ucc98\ub9ac_b05_b06_\ubc30\uc218_\uc81c\uc5b4", + "target": "concepts_completed_2026_09_01_\uc800\uc7a5_\ud638\ud658_\uaddc\uce59", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/completed_2026-09-01_followups.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_completed_2026_09_01_followups", + "target": "concepts_completed_2026_09_01_followups_2026_09_01_\uc794\uc5ec_\uc644\ub8cc_\uccb4\ud06c_\uc815\ub9ac", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "concepts/completed_2026-09-01_followups.md", + "source_location": "L20", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_completed_2026_09_01_followups", + "target": "concepts_crs_metadata", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "concepts/completed_2026-09-01_followups.md", + "source_location": "L20", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_completed_2026_09_01_followups", + "target": "concepts_drainage_watershed", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/completed_2026-09-01_followups.md", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_completed_2026_09_01_followups_2026_09_01_\uc794\uc5ec_\uc644\ub8cc_\uccb4\ud06c_\uc815\ub9ac", + "target": "concepts_completed_2026_09_01_followups_\ubc94\uc704", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/completed_2026-09-01_followups.md", + "source_location": "L22", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_completed_2026_09_01_followups_2026_09_01_\uc794\uc5ec_\uc644\ub8cc_\uccb4\ud06c_\uc815\ub9ac", + "target": "concepts_completed_2026_09_01_followups_\ubcf4\ub958_\uad6c\ubd84", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/completed_2026-09-02.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_completed_2026_09_02", + "target": "concepts_completed_2026_09_02_2026_09_02_\uc644\ub8cc_\ud56d\ubaa9", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/completed_2026-09-02.md", + "source_location": "L32", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_completed_2026_09_02_2026_09_02_\uc644\ub8cc_\ud56d\ubaa9", + "target": "concepts_completed_2026_09_02_b05_\uad6c\uc870\ubb3c_3d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/completed_2026-09-02.md", + "source_location": "L38", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_completed_2026_09_02_2026_09_02_\uc644\ub8cc_\ud56d\ubaa9", + "target": "concepts_completed_2026_09_02_b05_\uc885\ub2e8_\ud3b8\uc9d1_\ud6c4\uc18d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/completed_2026-09-02.md", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_completed_2026_09_02_2026_09_02_\uc644\ub8cc_\ud56d\ubaa9", + "target": "concepts_completed_2026_09_02_cad", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/completed_2026-09-02.md", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_completed_2026_09_02_2026_09_02_\uc644\ub8cc_\ud56d\ubaa9", + "target": "concepts_completed_2026_09_02_\ub178\uc120_\uc9c0\ud45c\uba74", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/completed_2026-09-02.md", + "source_location": "L18", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_completed_2026_09_02_2026_09_02_\uc644\ub8cc_\ud56d\ubaa9", + "target": "concepts_completed_2026_09_02_\uc791\uc5c5_\ud658\uacbd", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/completed_2026-09-02.md", + "source_location": "L43", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_completed_2026_09_02_2026_09_02_\uc644\ub8cc_\ud56d\ubaa9", + "target": "concepts_completed_2026_09_02_\ud68c\uadc0_\uc0c1\ud0dc", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/completed_2026-09-03.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_completed_2026_09_03", + "target": "concepts_completed_2026_09_03_2026_09_03_\uc644\ub8cc_\uc785\ub825_\ubc30\uc218_\uc885\ud6a1\ub2e8_cad", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/completed_2026-09-03.md", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_completed_2026_09_03_2026_09_03_\uc644\ub8cc_\uc785\ub825_\ubc30\uc218_\uc885\ud6a1\ub2e8_cad", + "target": "concepts_completed_2026_09_03_\uacf5\ud1b5_\uacb0\uc815", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/completed_2026-09-03.md", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_completed_2026_09_03_2026_09_03_\uc644\ub8cc_\uc785\ub825_\ubc30\uc218_\uc885\ud6a1\ub2e8_cad", + "target": "concepts_completed_2026_09_03_\uc644\ub8cc_\ubc94\uc704", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/completed_2026-09-03_additional.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_completed_2026_09_03_additional", + "target": "concepts_completed_2026_09_03_additional_2026_09_03_\ucd94\uac00_\uc644\ub8cc_\ud654\uba74_\uc885\ub2e8_\ud6a1\ub2e8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/completed_2026-09-03_additional.md", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_completed_2026_09_03_additional_2026_09_03_\ucd94\uac00_\uc644\ub8cc_\ud654\uba74_\uc885\ub2e8_\ud6a1\ub2e8", + "target": "concepts_completed_2026_09_03_additional_\uc644\ub8cc_\ubc94\uc704", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/completed_2026-09-03_additional.md", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_completed_2026_09_03_additional_2026_09_03_\ucd94\uac00_\uc644\ub8cc_\ud654\uba74_\uc885\ub2e8_\ud6a1\ub2e8", + "target": "concepts_completed_2026_09_03_additional_\ucd5c\uc2e0_\uacb0\uc815", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/completed_2026-09-04.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_completed_2026_09_04", + "target": "concepts_completed_2026_09_04_2026_09_04_\uc644\ub8cc_\ud56d\ubaa9", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "concepts/completed_2026-09-04.md", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_completed_2026_09_04", + "target": "concepts_drainage_watershed", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "concepts/completed_2026-09-04.md", + "source_location": "L4", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_completed_2026_09_04", + "target": "concepts_ui_templates", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/completed_2026-09-04.md", + "source_location": "L48", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_completed_2026_09_04_2026_09_04_\uc644\ub8cc_\ud56d\ubaa9", + "target": "concepts_completed_2026_09_04_700\uc904_\uc81c\ud55c_\ubd84\ub9ac", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/completed_2026-09-04.md", + "source_location": "L61", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_completed_2026_09_04_2026_09_04_\uc644\ub8cc_\ud56d\ubaa9", + "target": "concepts_completed_2026_09_04_\ubcf4\uc874\ub41c_\ubbf8\uc644\ub8cc_\ubc94\uc704", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/completed_2026-09-04.md", + "source_location": "L54", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_completed_2026_09_04_2026_09_04_\uc644\ub8cc_\ud56d\ubaa9", + "target": "concepts_completed_2026_09_04_\uc0c1\uc2dc\uacc4\ud68d\uc11c_\ucd94\uac00_\uc644\ub8cc_\ubc94\uc704", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/completed_2026-09-04.md", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_completed_2026_09_04_2026_09_04_\uc644\ub8cc_\ud56d\ubaa9", + "target": "concepts_completed_2026_09_04_\uc644\ub8cc_\ubc94\uc704", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/completed_2026-09-04.md", + "source_location": "L38", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_completed_2026_09_04_2026_09_04_\uc644\ub8cc_\ud56d\ubaa9", + "target": "concepts_completed_2026_09_04_\ucd94\uac00_\uc644\ub8cc_\ubc94\uc704", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/completed_2026-09-07.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_completed_2026_09_07", + "target": "concepts_completed_2026_09_07_2026_09_07_\uc644\ub8cc_\ubcf4\ub958_\uc694\uc57d", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "concepts/completed_2026-09-07.md", + "source_location": "L32", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_completed_2026_09_07", + "target": "concepts_quantity_cost_contract", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "weight": 1.0, + "source_file": "concepts/completed_2026-09-07.md", + "source_location": "wikilink", + "_origin": "curated", + "source": "concepts_completed_2026_09_07", + "target": "pages_b06_section_b06_backend" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "weight": 1.0, + "source_file": "concepts/completed_2026-09-07.md", + "source_location": "wikilink", + "_origin": "curated", + "source": "concepts_completed_2026_09_07", + "target": "pages_b07_quantity_b07_frontend" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/completed_2026-09-07.md", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_completed_2026_09_07_2026_09_07_\uc644\ub8cc_\ubcf4\ub958_\uc694\uc57d", + "target": "concepts_completed_2026_09_07_\uc131\ub2a5_\uc6b4\uc601_\uacb0\uc815", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/completed_2026-09-07.md", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_completed_2026_09_07_2026_09_07_\uc644\ub8cc_\ubcf4\ub958_\uc694\uc57d", + "target": "concepts_completed_2026_09_07_\uc644\ub8cc_\ubc94\uc704", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/completed_2026-09-07.md", + "source_location": "L29", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_completed_2026_09_07_2026_09_07_\uc644\ub8cc_\ubcf4\ub958_\uc694\uc57d", + "target": "concepts_completed_2026_09_07_\uc8fc\uc758", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/completed_2026-09-09.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_completed_2026_09_09", + "target": "concepts_completed_2026_09_09_2026_09_09_\uc644\ub8cc_\uad6c\ud604_\uac80\uc99d", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "concepts/completed_2026-09-09.md", + "source_location": "L4", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_completed_2026_09_09", + "target": "concepts_quantity_cost_contract", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "concepts/completed_2026-09-09.md", + "source_location": "L52", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_completed_2026_09_09", + "target": "concepts_standard_quantity_open_2026_09_09", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/completed_2026-09-09.md", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_completed_2026_09_09_2026_09_09_\uc644\ub8cc_\uad6c\ud604_\uac80\uc99d", + "target": "concepts_completed_2026_09_09_b05_b06_\uc885\ud6a1\ub2e8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/completed_2026-09-09.md", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_completed_2026_09_09_2026_09_09_\uc644\ub8cc_\uad6c\ud604_\uac80\uc99d", + "target": "concepts_completed_2026_09_09_b07_\ud45c\uc900\ub3c4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/completed_2026-09-09.md", + "source_location": "L32", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_completed_2026_09_09_2026_09_09_\uc644\ub8cc_\uad6c\ud604_\uac80\uc99d", + "target": "concepts_completed_2026_09_09_b08_\uc218\ub7c9\uc0b0\ucd9c", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/completed_2026-09-09.md", + "source_location": "L41", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_completed_2026_09_09_2026_09_09_\uc644\ub8cc_\uad6c\ud604_\uac80\uc99d", + "target": "concepts_completed_2026_09_09_b09_\uc6d0\uac00\uacc4\uc0b0", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/completed_2026-09-09.md", + "source_location": "L49", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_completed_2026_09_09_2026_09_09_\uc644\ub8cc_\uad6c\ud604_\uac80\uc99d", + "target": "concepts_completed_2026_09_09_\uac80\uc99d_\uacbd\uacc4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/crs_metadata.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_crs_metadata", + "target": "concepts_crs_metadata_crs_\uba54\ud0c0\ub370\uc774\ud130_\uc815\uc0c1\ud654", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "concepts/crs_metadata.md", + "source_location": "L4", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_crs_metadata", + "target": "concepts_dependencies", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/crs_metadata.md", + "source_location": "L30", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_crs_metadata_crs_\uba54\ud0c0\ub370\uc774\ud130_\uc815\uc0c1\ud654", + "target": "concepts_crs_metadata_\uac80\uc99d_\ubc94\uc704\uc640_\ubaa8\uc21c_\uc774\ub825", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/crs_metadata.md", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_crs_metadata_crs_\uba54\ud0c0\ub370\uc774\ud130_\uc815\uc0c1\ud654", + "target": "concepts_crs_metadata_\uac80\uc99d\ub41c_\ud310\uc815", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/crs_metadata.md", + "source_location": "L22", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_crs_metadata_crs_\uba54\ud0c0\ub370\uc774\ud130_\uc815\uc0c1\ud654", + "target": "concepts_crs_metadata_\ub370\uc774\ud130_\ud750\ub984", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/crs_metadata.md", + "source_location": "L36", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_crs_metadata_crs_\uba54\ud0c0\ub370\uc774\ud130_\uc815\uc0c1\ud654", + "target": "concepts_crs_metadata_\uc0ac\uc6a9\ucc98", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/files_surface.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_db_schema_files_surface", + "target": "concepts_db_schema_files_surface_db_\ud30c\uc77c_\uc9c0\ud45c\uba74\ubd84\uc11d_\ud14c\uc774\ube14", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/files_surface.md", + "source_location": "L89", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_db_schema_files_surface_db_\ud30c\uc77c_\uc9c0\ud45c\uba74\ubd84\uc11d_\ud14c\uc774\ube14", + "target": "concepts_db_schema_files_surface_input_files_status_\uac12", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/files_surface.md", + "source_location": "L35", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_db_schema_files_surface_db_\ud30c\uc77c_\uc9c0\ud45c\uba74\ubd84\uc11d_\ud14c\uc774\ube14", + "target": "concepts_db_schema_files_surface_input_files_\uc785\ub825_\uc6d0\ubcf8_\ud30c\uc77c", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/files_surface.md", + "source_location": "L95", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_db_schema_files_surface_db_\ud30c\uc77c_\uc9c0\ud45c\uba74\ubd84\uc11d_\ud14c\uc774\ube14", + "target": "concepts_db_schema_files_surface_processed_point_cloud_status_\uac12", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/files_surface.md", + "source_location": "L48", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_db_schema_files_surface_db_\ud30c\uc77c_\uc9c0\ud45c\uba74\ubd84\uc11d_\ud14c\uc774\ube14", + "target": "concepts_db_schema_files_surface_processed_point_cloud_\ud544\ud130_\ubcc0\ud658_\ud3ec\uc778\ud2b8\ud074\ub77c\uc6b0\ub4dc", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/files_surface.md", + "source_location": "L92", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_db_schema_files_surface_db_\ud30c\uc77c_\uc9c0\ud45c\uba74\ubd84\uc11d_\ud14c\uc774\ube14", + "target": "concepts_db_schema_files_surface_surface_models_status_\uac12", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/files_surface.md", + "source_location": "L64", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_db_schema_files_surface_db_\ud30c\uc77c_\uc9c0\ud45c\uba74\ubd84\uc11d_\ud14c\uc774\ube14", + "target": "concepts_db_schema_files_surface_surface_models_\uc9c0\ud45c\uba74_\ubaa8\ub378_\ubc0f_\ub4f1\uace0\uc120", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/files_surface.md", + "source_location": "L77", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_db_schema_files_surface_db_\ud30c\uc77c_\uc9c0\ud45c\uba74\ubd84\uc11d_\ud14c\uc774\ube14", + "target": "concepts_db_schema_files_surface_terrain_layers_\uc9c0\ud615_\ub808\uc774\uc5b4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/files_surface.md", + "source_location": "L24", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_db_schema_files_surface_db_\ud30c\uc77c_\uc9c0\ud45c\uba74\ubd84\uc11d_\ud14c\uc774\ube14", + "target": "concepts_db_schema_files_surface_upload_chunks_\uc5c5\ub85c\ub4dc_\uccad\ud06c_\ub370\uc774\ud130", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/files_surface.md", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_db_schema_files_surface_db_\ud30c\uc77c_\uc9c0\ud45c\uba74\ubd84\uc11d_\ud14c\uc774\ube14", + "target": "concepts_db_schema_files_surface_upload_sessions_\uc5c5\ub85c\ub4dc_\uc138\uc158", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/logs_monitoring.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_db_schema_logs_monitoring", + "target": "concepts_db_schema_logs_monitoring_db_\ub85c\uadf8_\ubaa8\ub2c8\ud130\ub9c1_\ud14c\uc774\ube14", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/logs_monitoring.md", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_db_schema_logs_monitoring_db_\ub85c\uadf8_\ubaa8\ub2c8\ud130\ub9c1_\ud14c\uc774\ube14", + "target": "concepts_db_schema_logs_monitoring_activity_logs_\uc0ac\uc6a9\uc790_\ud65c\ub3d9_\ub85c\uadf8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/logs_monitoring.md", + "source_location": "L33", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_db_schema_logs_monitoring_db_\ub85c\uadf8_\ubaa8\ub2c8\ud130\ub9c1_\ud14c\uc774\ube14", + "target": "concepts_db_schema_logs_monitoring_audit_logs_\uac10\uc0ac_\ub85c\uadf8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/logs_monitoring.md", + "source_location": "L84", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_db_schema_logs_monitoring_db_\ub85c\uadf8_\ubaa8\ub2c8\ud130\ub9c1_\ud14c\uc774\ube14", + "target": "concepts_db_schema_logs_monitoring_change_logs_\uc124\uacc4_\ubcc0\uacbd_\uc774\ub825", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/logs_monitoring.md", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_db_schema_logs_monitoring_db_\ub85c\uadf8_\ubaa8\ub2c8\ud130\ub9c1_\ud14c\uc774\ube14", + "target": "concepts_db_schema_logs_monitoring_login_logs_\ub85c\uadf8\uc778_\uc2dc\ub3c4_\ub85c\uadf8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/logs_monitoring.md", + "source_location": "L71", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_db_schema_logs_monitoring_db_\ub85c\uadf8_\ubaa8\ub2c8\ud130\ub9c1_\ud14c\uc774\ube14", + "target": "concepts_db_schema_logs_monitoring_support_requests_\uae30\uc220_\uc9c0\uc6d0_\uc694\uccad", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/logs_monitoring.md", + "source_location": "L53", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_db_schema_logs_monitoring_db_\ub85c\uadf8_\ubaa8\ub2c8\ud130\ub9c1_\ud14c\uc774\ube14", + "target": "concepts_db_schema_logs_monitoring_system_admin_logs_\uc2dc\uc2a4\ud15c_\uad00\ub9ac\uc790_\ud589\uc704_\ub85c\uadf8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/logs_monitoring.md", + "source_location": "L95", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_db_schema_logs_monitoring_db_\ub85c\uadf8_\ubaa8\ub2c8\ud130\ub9c1_\ud14c\uc774\ube14", + "target": "concepts_db_schema_logs_monitoring_system_audit_logs_\uc0ac\uc6a9\ucc98_b01_b02", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/logs_monitoring.md", + "source_location": "L43", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_db_schema_logs_monitoring_db_\ub85c\uadf8_\ubaa8\ub2c8\ud130\ub9c1_\ud14c\uc774\ube14", + "target": "concepts_db_schema_logs_monitoring_system_audit_logs_\ud504\ub85c\uc81d\ud2b8_\uc870\uc9c1_\ubcc0\uacbd_\uac10\uc0ac_\ub85c\uadf8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/logs_monitoring.md", + "source_location": "L62", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_db_schema_logs_monitoring_db_\ub85c\uadf8_\ubaa8\ub2c8\ud130\ub9c1_\ud14c\uc774\ube14", + "target": "concepts_db_schema_logs_monitoring_system_resources_\uc2dc\uc2a4\ud15c_\uc790\uc6d0_\uacc4\uce21", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/logs_monitoring.md", + "source_location": "L98", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_db_schema_logs_monitoring_db_\ub85c\uadf8_\ubaa8\ub2c8\ud130\ub9c1_\ud14c\uc774\ube14", + "target": "concepts_db_schema_logs_monitoring_\ub9ac\uc18c\uc2a4_api_system_admin_\uc804\uc6a9", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/overview.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_db_schema_overview", + "target": "concepts_db_schema_overview_db_\uc2a4\ud0a4\ub9c8_\uac1c\uc694", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "concepts/storage_paths.md", + "source_location": "L37", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_storage_paths", + "target": "concepts_db_schema_overview", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/overview.md", + "source_location": "L51", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_db_schema_overview_db_\uc2a4\ud0a4\ub9c8_\uac1c\uc694", + "target": "concepts_db_schema_overview_\uc124\uacc4_\uc6d0\uce59", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/overview.md", + "source_location": "L56", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_db_schema_overview_db_\uc2a4\ud0a4\ub9c8_\uac1c\uc694", + "target": "concepts_db_schema_overview_\ud14c\uc774\ube14_\uad00\uacc4_\ud575\uc2ec_\ud750\ub984", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/overview.md", + "source_location": "L22", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_db_schema_overview_db_\uc2a4\ud0a4\ub9c8_\uac1c\uc694", + "target": "concepts_db_schema_overview_\ud14c\uc774\ube14_\uadf8\ub8f9_9\uac1c", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/overview.md", + "source_location": "L34", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_db_schema_overview_db_\uc2a4\ud0a4\ub9c8_\uac1c\uc694", + "target": "concepts_db_schema_overview_\ud30c\uc77c_\uacbd\ub85c_\ucd94\uc801_\uceec\ub7fc_db\uc5d0_\uacbd\ub85c\ub9cc_\uae30\ub85d_\uc2e4_\ud30c\uc77c\uc740_\ud30c\uc77c\uc2dc\uc2a4\ud15c", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/projects.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_db_schema_projects", + "target": "concepts_db_schema_projects_db_\ud504\ub85c\uc81d\ud2b8_\uad00\ub9ac_\ud14c\uc774\ube14", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/projects.md", + "source_location": "L40", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_db_schema_projects_db_\ud504\ub85c\uc81d\ud2b8_\uad00\ub9ac_\ud14c\uc774\ube14", + "target": "concepts_db_schema_projects_project_automations_\ud504\ub85c\uc81d\ud2b8_\uc790\ub3d9\ud654_\uc815\ucc45", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/projects.md", + "source_location": "L30", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_db_schema_projects_db_\ud504\ub85c\uc81d\ud2b8_\uad00\ub9ac_\ud14c\uc774\ube14", + "target": "concepts_db_schema_projects_project_versions_\ud504\ub85c\uc81d\ud2b8_\ubc84\uc804_\uc2a4\ub0c5\uc0f7", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/projects.md", + "source_location": "L54", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_db_schema_projects_db_\ud504\ub85c\uc81d\ud2b8_\uad00\ub9ac_\ud14c\uc774\ube14", + "target": "concepts_db_schema_projects_project_workflow_stages_\ub2e8\uacc4\ubcc4_\uc0c1\uc138_\uc0c1\ud0dc", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/projects.md", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_db_schema_projects_db_\ud504\ub85c\uc81d\ud2b8_\uad00\ub9ac_\ud14c\uc774\ube14", + "target": "concepts_db_schema_projects_projects_\ud504\ub85c\uc81d\ud2b8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/route_profile.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_db_schema_route_profile", + "target": "concepts_db_schema_route_profile_db_\uacbd\ub85c_\uc885\ud6a1\ub2e8_\ud14c\uc774\ube14", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/route_profile.md", + "source_location": "L85", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_db_schema_route_profile_db_\uacbd\ub85c_\uc885\ud6a1\ub2e8_\ud14c\uc774\ube14", + "target": "concepts_db_schema_route_profile_cross_sections_data_structures", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/route_profile.md", + "source_location": "L70", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_db_schema_route_profile_db_\uacbd\ub85c_\uc885\ud6a1\ub2e8_\ud14c\uc774\ube14", + "target": "concepts_db_schema_route_profile_cross_sections_\ud6a1\ub2e8\uba74_\uc124\uacc4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/route_profile.md", + "source_location": "L51", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_db_schema_route_profile_db_\uacbd\ub85c_\uc885\ud6a1\ub2e8_\ud14c\uc774\ube14", + "target": "concepts_db_schema_route_profile_longitudinal_sections_\uc885\ub2e8\uba74_\uc124\uacc4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/route_profile.md", + "source_location": "L29", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_db_schema_route_profile_db_\uacbd\ub85c_\uc885\ud6a1\ub2e8_\ud14c\uc774\ube14", + "target": "concepts_db_schema_route_profile_route_points_\uacbd\ub85c_\uc88c\ud45c\uc810", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/route_profile.md", + "source_location": "L40", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_db_schema_route_profile_db_\uacbd\ub85c_\uc885\ud6a1\ub2e8_\ud14c\uc774\ube14", + "target": "concepts_db_schema_route_profile_route_statistics_\ub178\uc120_\ud1b5\uacc4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/route_profile.md", + "source_location": "L82", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_db_schema_route_profile_db_\uacbd\ub85c_\uc885\ud6a1\ub2e8_\ud14c\uc774\ube14", + "target": "concepts_db_schema_route_profile_routes_status_\ud750\ub984", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/route_profile.md", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_db_schema_route_profile_db_\uacbd\ub85c_\uc885\ud6a1\ub2e8_\ud14c\uc774\ube14", + "target": "concepts_db_schema_route_profile_routes_\ub178\uc120_\uacbd\ub85c", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/route_profile.md", + "source_location": "L63", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_db_schema_route_profile_longitudinal_sections_\uc885\ub2e8\uba74_\uc124\uacc4", + "target": "concepts_db_schema_route_profile_data_\uceec\ub7fc_\ub0b4_options_\uc2a4\ub0c5\uc0f7_\uad6c\uc870_2026_07_19_\ub3c4\uc785", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/route_profile.md", + "source_location": "L66", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_db_schema_route_profile_longitudinal_sections_\uc885\ub2e8\uba74_\uc124\uacc4", + "target": "concepts_db_schema_route_profile_data_\uceec\ub7fc_\ub0b4_profile_alignment_\uad6c\uc870_2026_07_23_\ub3c4\uc785", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/route_profile/longitudinal_alignment.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_db_schema_route_profile_longitudinal_alignment", + "target": "concepts_db_schema_route_profile_longitudinal_alignment_db_longitudinal_sections_data_profile_alignment_\uad6c\uc870", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/structure_output.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_db_schema_structure_output", + "target": "concepts_db_schema_structure_output_db_\uad6c\uc870\ubb3c_\uc218\ub7c9_\uc0b0\ucd9c\ubb3c_\ud14c\uc774\ube14", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/structure_output.md", + "source_location": "L54", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_db_schema_structure_output_db_\uad6c\uc870\ubb3c_\uc218\ub7c9_\uc0b0\ucd9c\ubb3c_\ud14c\uc774\ube14", + "target": "concepts_db_schema_structure_output_output_files_\uac1c\ubcc4_\uc0b0\ucd9c_\ud30c\uc77c_\ub9ac\uc2a4\ud2b8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/structure_output.md", + "source_location": "L42", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_db_schema_structure_output_db_\uad6c\uc870\ubb3c_\uc218\ub7c9_\uc0b0\ucd9c\ubb3c_\ud14c\uc774\ube14", + "target": "concepts_db_schema_structure_output_outputs_\ucd5c\uc885_\uacac\uc801_\ub3c4\uba74_\uc0b0\ucd9c_\uc138\uc158", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/structure_output.md", + "source_location": "L29", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_db_schema_structure_output_db_\uad6c\uc870\ubb3c_\uc218\ub7c9_\uc0b0\ucd9c\ubb3c_\ud14c\uc774\ube14", + "target": "concepts_db_schema_structure_output_quantity_items_\uc218\ub7c9_\uc0b0\ucd9c_\ud56d\ubaa9", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/structure_output.md", + "source_location": "L65", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_db_schema_structure_output_db_\uad6c\uc870\ubb3c_\uc218\ub7c9_\uc0b0\ucd9c\ubb3c_\ud14c\uc774\ube14", + "target": "concepts_db_schema_structure_output_quantity_items_\ucd1d\ube44\uc6a9_\uacc4\uc0b0_\uc608", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/structure_output.md", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_db_schema_structure_output_db_\uad6c\uc870\ubb3c_\uc218\ub7c9_\uc0b0\ucd9c\ubb3c_\ud14c\uc774\ube14", + "target": "concepts_db_schema_structure_output_structures_\ubc30\uce58_\uad6c\uc870\ubb3c", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/unconfirmed/README.md", + "source_location": "L7", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_db_schema_unconfirmed_readme", + "target": "concepts_db_schema_unconfirmed_readme_\ubbf8\ud655\uc815_\ud14c\uc774\ube14_\ubcf4\uad00\uc18c_unconfirmed_db_schemas", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/unconfirmed/README.md", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_db_schema_unconfirmed_readme_\ubbf8\ud655\uc815_\ud14c\uc774\ube14_\ubcf4\uad00\uc18c_unconfirmed_db_schemas", + "target": "concepts_db_schema_unconfirmed_readme_\uc6b4\uc601_\uaddc\uce59", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/users_auth.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_db_schema_users_auth", + "target": "concepts_db_schema_users_auth_db_\uc0ac\uc6a9\uc790_\uc778\uc99d_\uc870\uc9c1_\ud14c\uc774\ube14", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/users_auth.md", + "source_location": "L32", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_db_schema_users_auth_db_\uc0ac\uc6a9\uc790_\uc778\uc99d_\uc870\uc9c1_\ud14c\uc774\ube14", + "target": "concepts_db_schema_users_auth_companies_\ud68c\uc0ac", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/users_auth.md", + "source_location": "L56", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_db_schema_users_auth_db_\uc0ac\uc6a9\uc790_\uc778\uc99d_\uc870\uc9c1_\ud14c\uc774\ube14", + "target": "concepts_db_schema_users_auth_email_otps_\uc774\uba54\uc77c_otp", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/users_auth.md", + "source_location": "L73", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_db_schema_users_auth_db_\uc0ac\uc6a9\uc790_\uc778\uc99d_\uc870\uc9c1_\ud14c\uc774\ube14", + "target": "concepts_db_schema_users_auth_join_requests_\ud68c\uc0ac_\uac00\uc785_\uc2e0\uccad", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/users_auth.md", + "source_location": "L45", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_db_schema_users_auth_db_\uc0ac\uc6a9\uc790_\uc778\uc99d_\uc870\uc9c1_\ud14c\uc774\ube14", + "target": "concepts_db_schema_users_auth_sessions_\uc138\uc158", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/users_auth.md", + "source_location": "L65", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_db_schema_users_auth_db_\uc0ac\uc6a9\uc790_\uc778\uc99d_\uc870\uc9c1_\ud14c\uc774\ube14", + "target": "concepts_db_schema_users_auth_trusted_devices_\uc2e0\ub8b0_\uae30\uae30", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/users_auth.md", + "source_location": "L84", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_db_schema_users_auth_db_\uc0ac\uc6a9\uc790_\uc778\uc99d_\uc870\uc9c1_\ud14c\uc774\ube14", + "target": "concepts_db_schema_users_auth_user_consents_\uc57d\uad00_\ub3d9\uc758", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/users_auth.md", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_db_schema_users_auth_db_\uc0ac\uc6a9\uc790_\uc778\uc99d_\uc870\uc9c1_\ud14c\uc774\ube14", + "target": "concepts_db_schema_users_auth_users_\uc0ac\uc6a9\uc790", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/dependencies.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_dependencies", + "target": "concepts_dependencies_\uc678\ubd80_\ub77c\uc774\ube0c\ub7ec\ub9ac_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "concepts/dependencies.md", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_dependencies", + "target": "concepts_ui_templates", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/dependencies.md", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_dependencies_\uc678\ubd80_\ub77c\uc774\ube0c\ub7ec\ub9ac_\uc758\uc874\uc131", + "target": "concepts_dependencies_\ubc31\uc5d4\ub4dc_python_3_12_7", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/dependencies.md", + "source_location": "L40", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_dependencies_\uc678\ubd80_\ub77c\uc774\ube0c\ub7ec\ub9ac_\uc758\uc874\uc131", + "target": "concepts_dependencies_\uc120\uc815_\uc6d0\uce59_agent_md_3\uc808", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/dependencies.md", + "source_location": "L31", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_dependencies_\uc678\ubd80_\ub77c\uc774\ube0c\ub7ec\ub9ac_\uc758\uc874\uc131", + "target": "concepts_dependencies_\ud504\ub860\ud2b8\uc5d4\ub4dc_typescript_node_js", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/design.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_design", + "target": "concepts_design_\ub514\uc790\uc778_\uc2dc\uc2a4\ud15c_design_system", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "concepts/design.md", + "source_location": "L4", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_design", + "target": "concepts_ui_templates", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/design.md", + "source_location": "L44", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_design_\ub514\uc790\uc778_\uc2dc\uc2a4\ud15c_design_system", + "target": "concepts_design_\ub808\uc774\uc544\uc6c3_\ubc0f_\ub465\uadfc_\ud14c\ub450\ub9ac_radius_spacing", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/design.md", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_design_\ub514\uc790\uc778_\uc2dc\uc2a4\ud15c_design_system", + "target": "concepts_design_\ube44\uc8fc\uc5bc_\ud14c\ub9c8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/design.md", + "source_location": "L51", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_design_\ub514\uc790\uc778_\uc2dc\uc2a4\ud15c_design_system", + "target": "concepts_design_\uc804\uc5ed_\uc2a4\ud06c\ub864\ubc14_\ub514\uc790\uc778_scrollbars", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/design.md", + "source_location": "L30", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_design_\ub514\uc790\uc778_\uc2dc\uc2a4\ud15c_design_system", + "target": "concepts_design_\ud0c0\uc774\ud3ec\uadf8\ub798\ud53c_typography", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/design.md", + "source_location": "L18", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_design_\ub514\uc790\uc778_\uc2dc\uc2a4\ud15c_design_system", + "target": "concepts_design_\ud575\uc2ec_\uc0c9\uc0c1_\ud1a0\ud070_colors", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/design_data_lifecycle.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_design_data_lifecycle", + "target": "concepts_design_data_lifecycle_\uc124\uacc4_\ub370\uc774\ud130_\uc0dd\uba85\uc8fc\uae30", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "concepts/design_data_lifecycle.md", + "source_location": "L4", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_design_data_lifecycle", + "target": "concepts_multi_environment_safety", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "concepts/design_data_lifecycle.md", + "source_location": "L4", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_design_data_lifecycle", + "target": "concepts_workflow_state", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/design_data_lifecycle.md", + "source_location": "L28", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_design_data_lifecycle_\uc124\uacc4_\ub370\uc774\ud130_\uc0dd\uba85\uc8fc\uae30", + "target": "concepts_design_data_lifecycle_\uacc4\uc0b0_\uad6c\ud604_\uc6d0\uce59", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/design_data_lifecycle.md", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_design_data_lifecycle_\uc124\uacc4_\ub370\uc774\ud130_\uc0dd\uba85\uc8fc\uae30", + "target": "concepts_design_data_lifecycle_\uacc4\ud68d\ub178\uc120_\uaddc\uce59", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/design_data_lifecycle.md", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_design_data_lifecycle_\uc124\uacc4_\ub370\uc774\ud130_\uc0dd\uba85\uc8fc\uae30", + "target": "concepts_design_data_lifecycle_\uc815\ubcf8_\uc138_\ubc8c", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/drainage_watershed.md", + "source_location": "L7", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_drainage_watershed", + "target": "concepts_drainage_watershed_\ubc30\uc218\uc720\uc5ed_\ud574\uc11d_\ubc0f_\uc138\ubd80\uc124\uacc4_drainage_watershed", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "concepts/las_free_sheet_surface.md", + "source_location": "L4", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_las_free_sheet_surface", + "target": "concepts_drainage_watershed", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/drainage_watershed.md", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_drainage_watershed_\ubc30\uc218\uc720\uc5ed_\ud574\uc11d_\ubc0f_\uc138\ubd80\uc124\uacc4_drainage_watershed", + "target": "concepts_drainage_watershed_1_b04_vs_b05_\uc5ed\ud560_\ubd84\ub2f4_\ubc0f_\uc77c\uc6d0\ud654", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/drainage_watershed.md", + "source_location": "L22", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_drainage_watershed_\ubc30\uc218\uc720\uc5ed_\ud574\uc11d_\ubc0f_\uc138\ubd80\uc124\uacc4_drainage_watershed", + "target": "concepts_drainage_watershed_2_\uacf5\uc6a9_\ubc30\uc218_\uc5d4\uc9c4_\ubc0f_wamis_\uac15\uc6b0\ub7c9_\uc5f0\ub3d9_phase_1_2_2026_08_13_\uad00\uce21\uc18c_\uc804\ud658", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/drainage_watershed.md", + "source_location": "L30", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_drainage_watershed_\ubc30\uc218\uc720\uc5ed_\ud574\uc11d_\ubc0f_\uc138\ubd80\uc124\uacc4_drainage_watershed", + "target": "concepts_drainage_watershed_3_\uad6c\uc870\ubb3c_3\ub2e8_\uc635\uc158_\uccb4\uacc4_ui_phase_3_5", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/drainage_watershed.md", + "source_location": "L36", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_drainage_watershed_\ubc30\uc218\uc720\uc5ed_\ud574\uc11d_\ubc0f_\uc138\ubd80\uc124\uacc4_drainage_watershed", + "target": "concepts_drainage_watershed_4_\ud574\uc11d_\uc54c\uace0\ub9ac\uc998_\ub4f1\uace0\uc120_\ud558\uac15_contour_descent", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/drainage_watershed.md", + "source_location": "L47", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_drainage_watershed_\ubc30\uc218\uc720\uc5ed_\ud574\uc11d_\ubc0f_\uc138\ubd80\uc124\uacc4_drainage_watershed", + "target": "concepts_drainage_watershed_5_\uc801\uc0c9_\uccad\uc0c9_\ud310\uc815_\ubc0f_\uc720\uc5ed_\ud655\uc7a5", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/drainage_watershed.md", + "source_location": "L56", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_drainage_watershed_\ubc30\uc218\uc720\uc5ed_\ud574\uc11d_\ubc0f_\uc138\ubd80\uc124\uacc4_drainage_watershed", + "target": "concepts_drainage_watershed_6_\ud3c9\uade0_\ud750\ub984_\ud654\uc0b4\ud45c_flow_arrows_\ubc0f_\ud750\ub984\uac15\ub3c4_\ub7a8\ud504", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/drainage_watershed.md", + "source_location": "L60", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_drainage_watershed_\ubc30\uc218\uc720\uc5ed_\ud574\uc11d_\ubc0f_\uc138\ubd80\uc124\uacc4_drainage_watershed", + "target": "concepts_drainage_watershed_7_\uc601\uad6c\uc800\uc7a5\uc18c_\uc0b0\ucd9c\ubb3c_\uad6c\uc870", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/drainage_watershed.md", + "source_location": "L75", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_drainage_watershed_\ubc30\uc218\uc720\uc5ed_\ud574\uc11d_\ubc0f_\uc138\ubd80\uc124\uacc4_drainage_watershed", + "target": "concepts_drainage_watershed_8_b08_\uc218\ub9ac\uc9d1\uc218\uba74\uc801\uc720\uc5ed\ub3c4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/las_free_sheet_surface.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_las_free_sheet_surface", + "target": "concepts_las_free_sheet_surface_las_\uc5c6\ub294_\ub3c4\uc5fd\ub4f1\uace0\uc120_\uc11c\ud53c\uc2a4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/las_free_sheet_surface.md", + "source_location": "L33", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_las_free_sheet_surface_las_\uc5c6\ub294_\ub3c4\uc5fd\ub4f1\uace0\uc120_\uc11c\ud53c\uc2a4", + "target": "concepts_las_free_sheet_surface_e2e_\uacb0\uacfc", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/las_free_sheet_surface.md", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_las_free_sheet_surface_las_\uc5c6\ub294_\ub3c4\uc5fd\ub4f1\uace0\uc120_\uc11c\ud53c\uc2a4", + "target": "concepts_las_free_sheet_surface_\uacc4\uc57d\uacfc_\ud655\uc815\uac12", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/las_free_sheet_surface.md", + "source_location": "L40", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_las_free_sheet_surface_las_\uc5c6\ub294_\ub3c4\uc5fd\ub4f1\uace0\uc120_\uc11c\ud53c\uc2a4", + "target": "concepts_las_free_sheet_surface_\ubbf8\uacb0", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/las_free_sheet_surface.md", + "source_location": "L22", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_las_free_sheet_surface_las_\uc5c6\ub294_\ub3c4\uc5fd\ub4f1\uace0\uc120_\uc11c\ud53c\uc2a4", + "target": "concepts_las_free_sheet_surface_\ud750\ub984", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/law_source_quality.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_law_source_quality", + "target": "concepts_law_source_quality_\uc784\ub3c4\uae30\uc220\uad50\ubcf8_\uc6d0\ubb38_md_\ucd94\ucd9c_\ud488\uc9c8_\uacb0\ud568", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "concepts/standard_drawing_cost_inputs.md", + "source_location": "wikilink", + "weight": 1.0, + "_origin": "curated", + "confidence_score": 1.0, + "source": "concepts_standard_drawing_cost_inputs", + "target": "concepts_law_source_quality" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/law_source_quality.md", + "source_location": "L16", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_law_source_quality_\uc784\ub3c4\uae30\uc220\uad50\ubcf8_\uc6d0\ubb38_md_\ucd94\ucd9c_\ud488\uc9c8_\uacb0\ud568", + "target": "concepts_law_source_quality_\uacb0\ud568_\uc720\ud615_\uc608\uc2dc_\uc704_\ud30c\uc77c_\uae30\uc900_\uc904\ubc88\ud638", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/law_source_quality.md", + "source_location": "L34", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_law_source_quality_\uc784\ub3c4\uae30\uc220\uad50\ubcf8_\uc6d0\ubb38_md_\ucd94\ucd9c_\ud488\uc9c8_\uacb0\ud568", + "target": "concepts_law_source_quality_\uc6d0\uc778_\ucd94\uc815", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/law_source_quality.md", + "source_location": "L37", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_law_source_quality_\uc784\ub3c4\uae30\uc220\uad50\ubcf8_\uc6d0\ubb38_md_\ucd94\ucd9c_\ud488\uc9c8_\uacb0\ud568", + "target": "concepts_law_source_quality_\uc870\uce58_\uc0c1\ud0dc", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/law_source_quality.md", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_law_source_quality_\uc784\ub3c4\uae30\uc220\uad50\ubcf8_\uc6d0\ubb38_md_\ucd94\ucd9c_\ud488\uc9c8_\uacb0\ud568", + "target": "concepts_law_source_quality_\ud655\uc778_\ubc94\uc704", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/mass_haul_diagram.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_mass_haul_diagram", + "target": "concepts_mass_haul_diagram_\uc720\ud1a0\uace1\uc120_mass_haul_diagram_\uacc4\uc0b0_\uba85\uc138", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "weight": 1.0, + "source_file": "pages/B08_Quantity/B08_overview_2026_09.md", + "source_location": "wikilink", + "_origin": "curated", + "source": "pages_b08_quantity_b08_overview_2026_09_b08_quantity_2026_09_\uc218\ub7c9\uc0b0\ucd9c", + "target": "concepts_mass_haul_diagram" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/mass_haul_diagram.md", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_mass_haul_diagram_\uc720\ud1a0\uace1\uc120_mass_haul_diagram_\uacc4\uc0b0_\uba85\uc138", + "target": "concepts_mass_haul_diagram_1_\uac1c\uc694_\ubc0f_\ubd84\uc11d_\ubaa9\uc801", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/mass_haul_diagram.md", + "source_location": "L18", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_mass_haul_diagram_\uc720\ud1a0\uace1\uc120_mass_haul_diagram_\uacc4\uc0b0_\uba85\uc138", + "target": "concepts_mass_haul_diagram_2_\uc8fc\uc694_\uacc4\uc0b0_\uc218\uc2dd_\ubc0f_\uc6d0\ub9ac_\uc2e4\ubb34_\uad00\ub840_\ubc18\uc601", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/mass_haul_diagram.md", + "source_location": "L34", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_mass_haul_diagram_\uc720\ud1a0\uace1\uc120_mass_haul_diagram_\uacc4\uc0b0_\uba85\uc138", + "target": "concepts_mass_haul_diagram_3_\uc9c0\ubc18\uc720\ud615\ubcc4_\ud1a0\ub7c9\ud658\uc0b0\uacc4\uc218_\uae30\ubcf8\uac12_config_system_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/mass_haul_diagram.md", + "source_location": "L43", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_mass_haul_diagram_\uc720\ud1a0\uace1\uc120_mass_haul_diagram_\uacc4\uc0b0_\uba85\uc138", + "target": "concepts_mass_haul_diagram_4_\ud1a0\uacf5_\uc6b4\ubc18\uc7a5\ube44_\uc120\uc815\uac70\ub9ac_\ubc0f_\ubd84\ubc30_\uae30\uc900_config_system_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/mass_haul_diagram.md", + "source_location": "L50", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_mass_haul_diagram_\uc720\ud1a0\uace1\uc120_mass_haul_diagram_\uacc4\uc0b0_\uba85\uc138", + "target": "concepts_mass_haul_diagram_5_\uc720\ud1a0\uace1\uc120_\uace1\uc120_\uc0ac\uc591_b06_\uad6c\ud604_v2", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/mass_haul_diagram.md", + "source_location": "L58", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_mass_haul_diagram_\uc720\ud1a0\uace1\uc120_mass_haul_diagram_\uacc4\uc0b0_\uba85\uc138", + "target": "concepts_mass_haul_diagram_6_\uc6f9\uc571_\uc5f0\ub3d9_\ubc0f_\uc2dc\uac01\ud654_\uba85\uc138_2026_08_02_\ud655\uc815", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/multi_environment_safety.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_multi_environment_safety", + "target": "concepts_multi_environment_safety_\ub2e4\uc911_\ud658\uacbd_\uc800\uc7a5\uc18c_\uacf5\uc6a9_db_\uc548\uc804", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "concepts/multi_environment_safety.md", + "source_location": "L4", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_multi_environment_safety", + "target": "concepts_storage_paths", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "concepts/multi_environment_safety.md", + "source_location": "L4", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_multi_environment_safety", + "target": "concepts_workflow_state", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/multi_environment_safety.md", + "source_location": "L29", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_multi_environment_safety_\ub2e4\uc911_\ud658\uacbd_\uc800\uc7a5\uc18c_\uacf5\uc6a9_db_\uc548\uc804", + "target": "concepts_multi_environment_safety_\uc5ec\uc12f_\uc6cc\ud06c\ud2b8\ub9ac_\uc6b4\uc601_\ud655\uc815\ud310", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/multi_environment_safety.md", + "source_location": "L43", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_multi_environment_safety_\ub2e4\uc911_\ud658\uacbd_\uc800\uc7a5\uc18c_\uacf5\uc6a9_db_\uc548\uc804", + "target": "concepts_multi_environment_safety_\uc644\ub8cc_\ud310\uc815", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/multi_environment_safety.md", + "source_location": "L18", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_multi_environment_safety_\ub2e4\uc911_\ud658\uacbd_\uc800\uc7a5\uc18c_\uacf5\uc6a9_db_\uc548\uc804", + "target": "concepts_multi_environment_safety_\uc6b4\uc601_\uaddc\uce59", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/multi_environment_safety.md", + "source_location": "L49", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_multi_environment_safety_\ub2e4\uc911_\ud658\uacbd_\uc800\uc7a5\uc18c_\uacf5\uc6a9_db_\uc548\uc804", + "target": "concepts_multi_environment_safety_\uc7ac\uacc4\uc0b0_\uc601\ud5a5", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/multi_environment_safety.md", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_multi_environment_safety_\ub2e4\uc911_\ud658\uacbd_\uc800\uc7a5\uc18c_\uacf5\uc6a9_db_\uc548\uc804", + "target": "concepts_multi_environment_safety_\ud655\uc778\ub41c_\uc704\ud5d8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/quantity_cost_contract.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_quantity_cost_contract", + "target": "concepts_quantity_cost_contract_b08_\uc218\ub7c9_b09_\uc6d0\uac00_\uacc4\uc57d", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "concepts/standard_drawing_cost_inputs.md", + "source_location": "L4", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_standard_drawing_cost_inputs", + "target": "concepts_quantity_cost_contract", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "weight": 1.0, + "source_file": "pages/B07_DesignDetail/B07_standard_drawings_2026_09.md", + "source_location": "wikilink", + "_origin": "curated", + "source": "pages_b07_designdetail_b07_standard_drawings_2026_09_b07_\uad6c\uc870\ubb3c_\ud45c\uc900\ub3c4_\uc870\uc0ac_\ud569\uc758\uc640_\ud604\uc7ac_\ud1b5\ub85c", + "target": "concepts_quantity_cost_contract" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/quantity_cost_contract.md", + "source_location": "L32", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_quantity_cost_contract_b08_\uc218\ub7c9_b09_\uc6d0\uac00_\uacc4\uc57d", + "target": "concepts_quantity_cost_contract_\uae08\uc9c0_\uaddc\uce59", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/quantity_cost_contract.md", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_quantity_cost_contract_b08_\uc218\ub7c9_b09_\uc6d0\uac00_\uacc4\uc57d", + "target": "concepts_quantity_cost_contract_\uc800\uc7a5_\uc778\uacc4_\uaddc\uce59", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/quantity_cost_contract.md", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_quantity_cost_contract_b08_\uc218\ub7c9_b09_\uc6d0\uac00_\uacc4\uc57d", + "target": "concepts_quantity_cost_contract_\ucc45\uc784_\uacbd\uacc4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/schema_common.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_schema_common", + "target": "concepts_schema_common_\uacf5\ud1b5_\uc2a4\ud0a4\ub9c8_pydantic_\uc694\uccad_\uc751\ub2f5_\uaddc\uce59", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/schema_common.md", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_schema_common_\uacf5\ud1b5_\uc2a4\ud0a4\ub9c8_pydantic_\uc694\uccad_\uc751\ub2f5_\uaddc\uce59", + "target": "concepts_schema_common_\uac80\uc99d_\uc6d0\uce59_backend_md_4\uc808", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/schema_common.md", + "source_location": "L16", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_schema_common_\uacf5\ud1b5_\uc2a4\ud0a4\ub9c8_pydantic_\uc694\uccad_\uc751\ub2f5_\uaddc\uce59", + "target": "concepts_schema_common_\uba85\uba85_\uaddc\uce59", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/standard_drawing_cost_inputs.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_standard_drawing_cost_inputs", + "target": "concepts_standard_drawing_cost_inputs_\ud45c\uc900\ub3c4_\uc218\ub7c9_\uc6d0\uac00_\uc785\ub825\uc758_\ubbf8\uacb0_\uacbd\uacc4", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "concepts/standard_quantity_open_2026-09-09.md", + "source_location": "L4", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_standard_quantity_open_2026_09_09", + "target": "concepts_standard_drawing_cost_inputs", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "weight": 1.0, + "source_file": "pages/B07_DesignDetail/B07_standard_drawings_2026_09.md", + "source_location": "wikilink", + "_origin": "curated", + "source": "pages_b07_designdetail_b07_standard_drawings_2026_09_b07_\uad6c\uc870\ubb3c_\ud45c\uc900\ub3c4_\uc870\uc0ac_\ud569\uc758\uc640_\ud604\uc7ac_\ud1b5\ub85c", + "target": "concepts_standard_drawing_cost_inputs" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/standard_drawing_cost_inputs.md", + "source_location": "L29", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_standard_drawing_cost_inputs_\ud45c\uc900\ub3c4_\uc218\ub7c9_\uc6d0\uac00_\uc785\ub825\uc758_\ubbf8\uacb0_\uacbd\uacc4", + "target": "concepts_standard_drawing_cost_inputs_\uc0ac\uc6a9\uc790_\uc790\ub8cc_\ub300\uae30", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/standard_drawing_cost_inputs.md", + "source_location": "L20", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_standard_drawing_cost_inputs_\ud45c\uc900\ub3c4_\uc218\ub7c9_\uc6d0\uac00_\uc785\ub825\uc758_\ubbf8\uacb0_\uacbd\uacc4", + "target": "concepts_standard_drawing_cost_inputs_\uc7ac\uc870\uc0ac\ub85c_\ubc14\ub010_\ud310\uc815", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/standard_drawing_cost_inputs.md", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_standard_drawing_cost_inputs_\ud45c\uc900\ub3c4_\uc218\ub7c9_\uc6d0\uac00_\uc785\ub825\uc758_\ubbf8\uacb0_\uacbd\uacc4", + "target": "concepts_standard_drawing_cost_inputs_\ud655\uc778\ub41c_\ubd84\ub958", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/standard_quantity_open_2026-09-09.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_standard_quantity_open_2026_09_09", + "target": "concepts_standard_quantity_open_2026_09_09_2026_09_09_\ud45c\uc900\ub3c4_\uc218\ub7c9_\ubbf8\uacb0_\uadfc\uac70", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/standard_quantity_open_2026-09-09.md", + "source_location": "L29", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_standard_quantity_open_2026_09_09_2026_09_09_\ud45c\uc900\ub3c4_\uc218\ub7c9_\ubbf8\uacb0_\uadfc\uac70", + "target": "concepts_standard_quantity_open_2026_09_09_\uc5f0\uacb0", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/standard_quantity_open_2026-09-09.md", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_standard_quantity_open_2026_09_09_2026_09_09_\ud45c\uc900\ub3c4_\uc218\ub7c9_\ubbf8\uacb0_\uadfc\uac70", + "target": "concepts_standard_quantity_open_2026_09_09_\uc801\uc6a9_\uc6d0\uce59", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/standard_quantity_open_2026-09-09.md", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_standard_quantity_open_2026_09_09_2026_09_09_\ud45c\uc900\ub3c4_\uc218\ub7c9_\ubbf8\uacb0_\uadfc\uac70", + "target": "concepts_standard_quantity_open_2026_09_09_\uc8fc\uc694_\ubbf8\uacb0", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/storage_paths.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_storage_paths", + "target": "concepts_storage_paths_\uc800\uc7a5_\uacbd\ub85c_\uaddc\uce59_workflow_based_folder_structure", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/storage_paths.md", + "source_location": "L36", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_storage_paths_\uc800\uc7a5_\uacbd\ub85c_\uaddc\uce59_workflow_based_folder_structure", + "target": "concepts_storage_paths_db_\uceec\ub7fc_\uc2e4\uc81c_\uacbd\ub85c_\ub9e4\ud551", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/storage_paths.md", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_storage_paths_\uc800\uc7a5_\uacbd\ub85c_\uaddc\uce59_workflow_based_folder_structure", + "target": "concepts_storage_paths_\uacbd\ub85c_\ud328\ud134", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/storage_paths.md", + "source_location": "L29", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_storage_paths_\uc800\uc7a5_\uacbd\ub85c_\uaddc\uce59_workflow_based_folder_structure", + "target": "concepts_storage_paths_\uc6d0\uce59_backend_md_3\uc808", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/storage_paths.md", + "source_location": "L44", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_storage_paths_\uc800\uc7a5_\uacbd\ub85c_\uaddc\uce59_workflow_based_folder_structure", + "target": "concepts_storage_paths_\ucf54\ub4dc_\uac10\uc0ac_\uc8fc\uc758\uc0ac\ud56d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/storage_paths.md", + "source_location": "L39", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_storage_paths_\uc800\uc7a5_\uacbd\ub85c_\uaddc\uce59_workflow_based_folder_structure", + "target": "concepts_storage_paths_\ud30c\uc77c\uba85_\uaddc\uce59_structure_md_1\uc808", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/temp_upload.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_temp_upload", + "target": "concepts_temp_upload_temp_upload_\ud504\ub85c\uc81d\ud2b8_\uc0dd\uc131_\uc804_\uc784\uc2dc_\ubcf4\uad00\ud568", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/temp_upload.md", + "source_location": "L30", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_temp_upload_temp_upload_\ud504\ub85c\uc81d\ud2b8_\uc0dd\uc131_\uc804_\uc784\uc2dc_\ubcf4\uad00\ud568", + "target": "concepts_temp_upload_\uc0ac\uc6a9\ucc98", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/temp_upload.md", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_temp_upload_temp_upload_\ud504\ub85c\uc81d\ud2b8_\uc0dd\uc131_\uc804_\uc784\uc2dc_\ubcf4\uad00\ud568", + "target": "concepts_temp_upload_\uc8fc\uc694_\uac1c\ub150_\ubc0f_\uc2a4\ud399", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/temp_upload.md", + "source_location": "L19", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_temp_upload_temp_upload_\ud504\ub85c\uc81d\ud2b8_\uc0dd\uc131_\uc804_\uc784\uc2dc_\ubcf4\uad00\ud568", + "target": "concepts_temp_upload_\uc8fc\uc694_\uad6c\uc131_\uc694\uc18c", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/ui_templates.md", + "source_location": "L8", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_ui_templates", + "target": "concepts_ui_templates_ui_templates_localization_components", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/ui_templates.md", + "source_location": "L79", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_ui_templates_ui_templates_localization_components", + "target": "concepts_ui_templates_theme_css_\uc2a4\ud0c0\uc77c_\ubcc0\uc218", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/ui_templates.md", + "source_location": "L55", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_ui_templates_ui_templates_localization_components", + "target": "concepts_ui_templates_ui_template_elements_ts_\uacf5\ud1b5_\uc5d8\ub9ac\uba3c\ud2b8_\ud15c\ud50c\ub9bf", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/ui_templates.md", + "source_location": "L38", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_ui_templates_ui_templates_localization_components", + "target": "concepts_ui_templates_ui_template_general_blocks_ts_\uc77c\ubc18\uc5c5\ubb34_\uacf5\uc6a9_\ube14\ub85d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/ui_templates.md", + "source_location": "L48", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_ui_templates_ui_templates_localization_components", + "target": "concepts_ui_templates_ui_template_general_layout_ts_\uc77c\ubc18\uc5c5\ubb34_\ub808\uc774\uc544\uc6c3", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/ui_templates.md", + "source_location": "L12", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_ui_templates_ui_templates_localization_components", + "target": "concepts_ui_templates_ui_template_locale_ts_\ub2e4\uad6d\uc5b4_\uad00\ub9ac", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/ui_templates.md", + "source_location": "L62", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_ui_templates_ui_templates_localization_components", + "target": "concepts_ui_templates_ui_template_overlay_ts_\uc624\ubc84\ub808\uc774_\ucef4\ud3ec\ub10c\ud2b8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/ui_templates.md", + "source_location": "L31", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_ui_templates_ui_templates_localization_components", + "target": "concepts_ui_templates_ui_template_palette_ts_\uc9c0\ub3c4_\ud314\ub808\ud2b8_\uce90\uc2f1_\uc720\ud2f8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/ui_templates.md", + "source_location": "L24", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_ui_templates_ui_templates_localization_components", + "target": "concepts_ui_templates_ui_template_resizer_ts_\ud328\ub110_\ub9ac\uc0ac\uc774\uc800_\ud15c\ud50c\ub9bf", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/ui_templates.md", + "source_location": "L72", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_ui_templates_ui_templates_localization_components", + "target": "concepts_ui_templates_ui_template_workflow_layout_ts_\uc5d4\uc9c0\ub2c8\uc5b4\ub9c1_\ub808\uc774\uc544\uc6c3", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/ui_templates.md", + "source_location": "L95", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_ui_templates_ui_templates_localization_components", + "target": "concepts_ui_templates_\ub0a8\uc740_\ud30c\uc77c_\ud55c\uacc4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/ui_templates.md", + "source_location": "L90", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_ui_templates_ui_templates_localization_components", + "target": "concepts_ui_templates_\uc81c\uc57d_backend_md_1", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/workflow_state.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_workflow_state", + "target": "concepts_workflow_state_workflow_\uc0c1\ud0dc_\uad00\ub9ac", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/workflow_state.md", + "source_location": "L27", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_workflow_state_workflow_\uc0c1\ud0dc_\uad00\ub9ac", + "target": "concepts_workflow_state_r1_\uc6cc\ud06c\ud50c\ub85c\uc6b0_\ub2e8\uacc4_\uc7ac\ud3b8_2026_08_08_\ubc18\uc601", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/workflow_state.md", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_workflow_state_workflow_\uc0c1\ud0dc_\uad00\ub9ac", + "target": "concepts_workflow_state_ssot_project_workflow_stages_\ud14c\uc774\ube14_\uc2e4_db_\ud655\uc778", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/workflow_state.md", + "source_location": "L40", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_workflow_state_workflow_\uc0c1\ud0dc_\uad00\ub9ac", + "target": "concepts_workflow_state_\uacf5\ud1b5_\uc720\ud2f8_common_util_common_util_workflow_state_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/workflow_state.md", + "source_location": "L51", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_workflow_state_workflow_\uc0c1\ud0dc_\uad00\ub9ac", + "target": "concepts_workflow_state_\ubb34\ud6a8\ud654\uc758_\uc2e4\uc81c_\ubc94\uc704", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/workflow_state.md", + "source_location": "L35", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_workflow_state_workflow_\uc0c1\ud0dc_\uad00\ub9ac", + "target": "concepts_workflow_state_\ubc31\uadf8\ub77c\uc6b4\ub4dc_\uc790\ub3d9_\uacc4\uc0b0_\uccb4\uc778_\ubc0f_\uc0ac\uc6a9\uc790_\uc124\uc815_\uc774\uc6d4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/workflow_state.md", + "source_location": "L60", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_workflow_state_workflow_\uc0c1\ud0dc_\uad00\ub9ac", + "target": "concepts_workflow_state_\uc870\ud68c_api", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/workflow_state.md", + "source_location": "L63", + "weight": 1.0, + "_origin": "ast", + "source": "concepts_workflow_state_workflow_\uc0c1\ud0dc_\uad00\ub9ac", + "target": "concepts_workflow_state_\ud504\ub860\ud2b8\uc5d4\ub4dc_\uac8c\uc774\ud305_\ubc0f_\uc2a4\ud15d\ubc14_\uc5f0\ub3d9", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "graphify-out/memory/query_20260821_070423_\ubc30\uc218\uad00_\ub9e4\uc124\uc2dc_\uac01\ub3c4\uc758_\uc81c\uc57d\uc870\uac74\uc774_\uc788\ub294\uc9c0_\ud655\uc778\ud574\uc918__\uc784\ub3c4\uc5d0\uc11c.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "graphify_out_memory_query_20260821_070423_\ubc30\uc218\uad00_\ub9e4\uc124\uc2dc_\uac01\ub3c4\uc758_\uc81c\uc57d\uc870\uac74\uc774_\uc788\ub294\uc9c0_\ud655\uc778\ud574\uc918_\uc784\ub3c4\uc5d0\uc11c", + "target": "graphify_out_memory_query_20260821_070423_\ubc30\uc218\uad00_\ub9e4\uc124\uc2dc_\uac01\ub3c4\uc758_\uc81c\uc57d\uc870\uac74\uc774_\uc788\ub294\uc9c0_\ud655\uc778\ud574\uc918_\uc784\ub3c4\uc5d0\uc11c_q_\ubc30\uc218\uad00_\ub9e4\uc124\uc2dc_\uac01\ub3c4\uc758_\uc81c\uc57d\uc870\uac74\uc774_\uc788\ub294\uc9c0_\ud655\uc778\ud574\uc918_\uc784\ub3c4\uc5d0\uc11c", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "graphify-out/memory/query_20260821_070423_\ubc30\uc218\uad00_\ub9e4\uc124\uc2dc_\uac01\ub3c4\uc758_\uc81c\uc57d\uc870\uac74\uc774_\uc788\ub294\uc9c0_\ud655\uc778\ud574\uc918__\uc784\ub3c4\uc5d0\uc11c.md", + "source_location": "L12", + "weight": 1.0, + "_origin": "ast", + "source": "graphify_out_memory_query_20260821_070423_\ubc30\uc218\uad00_\ub9e4\uc124\uc2dc_\uac01\ub3c4\uc758_\uc81c\uc57d\uc870\uac74\uc774_\uc788\ub294\uc9c0_\ud655\uc778\ud574\uc918_\uc784\ub3c4\uc5d0\uc11c_q_\ubc30\uc218\uad00_\ub9e4\uc124\uc2dc_\uac01\ub3c4\uc758_\uc81c\uc57d\uc870\uac74\uc774_\uc788\ub294\uc9c0_\ud655\uc778\ud574\uc918_\uc784\ub3c4\uc5d0\uc11c", + "target": "graphify_out_memory_query_20260821_070423_\ubc30\uc218\uad00_\ub9e4\uc124\uc2dc_\uac01\ub3c4\uc758_\uc81c\uc57d\uc870\uac74\uc774_\uc788\ub294\uc9c0_\ud655\uc778\ud574\uc918_\uc784\ub3c4\uc5d0\uc11c_answer", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "graphify-out/memory/query_20260821_070423_\ubc30\uc218\uad00_\ub9e4\uc124\uc2dc_\uac01\ub3c4\uc758_\uc81c\uc57d\uc870\uac74\uc774_\uc788\ub294\uc9c0_\ud655\uc778\ud574\uc918__\uc784\ub3c4\uc5d0\uc11c.md", + "source_location": "L16", + "weight": 1.0, + "_origin": "ast", + "source": "graphify_out_memory_query_20260821_070423_\ubc30\uc218\uad00_\ub9e4\uc124\uc2dc_\uac01\ub3c4\uc758_\uc81c\uc57d\uc870\uac74\uc774_\uc788\ub294\uc9c0_\ud655\uc778\ud574\uc918_\uc784\ub3c4\uc5d0\uc11c_q_\ubc30\uc218\uad00_\ub9e4\uc124\uc2dc_\uac01\ub3c4\uc758_\uc81c\uc57d\uc870\uac74\uc774_\uc788\ub294\uc9c0_\ud655\uc778\ud574\uc918_\uc784\ub3c4\uc5d0\uc11c", + "target": "graphify_out_memory_query_20260821_070423_\ubc30\uc218\uad00_\ub9e4\uc124\uc2dc_\uac01\ub3c4\uc758_\uc81c\uc57d\uc870\uac74\uc774_\uc788\ub294\uc9c0_\ud655\uc778\ud574\uc918_\uc784\ub3c4\uc5d0\uc11c_outcome", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "graphify-out/memory/query_20260821_070423_\ubc30\uc218\uad00_\ub9e4\uc124\uc2dc_\uac01\ub3c4\uc758_\uc81c\uc57d\uc870\uac74\uc774_\uc788\ub294\uc9c0_\ud655\uc778\ud574\uc918__\uc784\ub3c4\uc5d0\uc11c.md", + "source_location": "L20", + "weight": 1.0, + "_origin": "ast", + "source": "graphify_out_memory_query_20260821_070423_\ubc30\uc218\uad00_\ub9e4\uc124\uc2dc_\uac01\ub3c4\uc758_\uc81c\uc57d\uc870\uac74\uc774_\uc788\ub294\uc9c0_\ud655\uc778\ud574\uc918_\uc784\ub3c4\uc5d0\uc11c_q_\ubc30\uc218\uad00_\ub9e4\uc124\uc2dc_\uac01\ub3c4\uc758_\uc81c\uc57d\uc870\uac74\uc774_\uc788\ub294\uc9c0_\ud655\uc778\ud574\uc918_\uc784\ub3c4\uc5d0\uc11c", + "target": "graphify_out_memory_query_20260821_070423_\ubc30\uc218\uad00_\ub9e4\uc124\uc2dc_\uac01\ub3c4\uc758_\uc81c\uc57d\uc870\uac74\uc774_\uc788\ub294\uc9c0_\ud655\uc778\ud574\uc918_\uc784\ub3c4\uc5d0\uc11c_source_nodes", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "graphify-out/memory/query_20260821_101018_\uc784\ub3c4_\uae30\uc220\uc815\ubcf4db\uc5d0\uc11c_\uc9d1\uc218\uc815\uc758_\ud615\ud0dc\uc815\ubcf4\ub294_\uc5b4\ub5a4\uac8c_\uc788\ub294\uc9c0_\ud655\uc778\ud574\uc918.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "graphify_out_memory_query_20260821_101018_\uc784\ub3c4_\uae30\uc220\uc815\ubcf4db\uc5d0\uc11c_\uc9d1\uc218\uc815\uc758_\ud615\ud0dc\uc815\ubcf4\ub294_\uc5b4\ub5a4\uac8c_\uc788\ub294\uc9c0_\ud655\uc778\ud574\uc918", + "target": "graphify_out_memory_query_20260821_101018_\uc784\ub3c4_\uae30\uc220\uc815\ubcf4db\uc5d0\uc11c_\uc9d1\uc218\uc815\uc758_\ud615\ud0dc\uc815\ubcf4\ub294_\uc5b4\ub5a4\uac8c_\uc788\ub294\uc9c0_\ud655\uc778\ud574\uc918_q_\uc784\ub3c4_\uae30\uc220\uc815\ubcf4db\uc5d0\uc11c_\uc9d1\uc218\uc815\uc758_\ud615\ud0dc\uc815\ubcf4\ub294_\uc5b4\ub5a4\uac8c_\uc788\ub294\uc9c0_\ud655\uc778\ud574\uc918", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "graphify-out/memory/query_20260821_101018_\uc784\ub3c4_\uae30\uc220\uc815\ubcf4db\uc5d0\uc11c_\uc9d1\uc218\uc815\uc758_\ud615\ud0dc\uc815\ubcf4\ub294_\uc5b4\ub5a4\uac8c_\uc788\ub294\uc9c0_\ud655\uc778\ud574\uc918.md", + "source_location": "L12", + "weight": 1.0, + "_origin": "ast", + "source": "graphify_out_memory_query_20260821_101018_\uc784\ub3c4_\uae30\uc220\uc815\ubcf4db\uc5d0\uc11c_\uc9d1\uc218\uc815\uc758_\ud615\ud0dc\uc815\ubcf4\ub294_\uc5b4\ub5a4\uac8c_\uc788\ub294\uc9c0_\ud655\uc778\ud574\uc918_q_\uc784\ub3c4_\uae30\uc220\uc815\ubcf4db\uc5d0\uc11c_\uc9d1\uc218\uc815\uc758_\ud615\ud0dc\uc815\ubcf4\ub294_\uc5b4\ub5a4\uac8c_\uc788\ub294\uc9c0_\ud655\uc778\ud574\uc918", + "target": "graphify_out_memory_query_20260821_101018_\uc784\ub3c4_\uae30\uc220\uc815\ubcf4db\uc5d0\uc11c_\uc9d1\uc218\uc815\uc758_\ud615\ud0dc\uc815\ubcf4\ub294_\uc5b4\ub5a4\uac8c_\uc788\ub294\uc9c0_\ud655\uc778\ud574\uc918_answer", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "graphify-out/memory/query_20260821_101018_\uc784\ub3c4_\uae30\uc220\uc815\ubcf4db\uc5d0\uc11c_\uc9d1\uc218\uc815\uc758_\ud615\ud0dc\uc815\ubcf4\ub294_\uc5b4\ub5a4\uac8c_\uc788\ub294\uc9c0_\ud655\uc778\ud574\uc918.md", + "source_location": "L16", + "weight": 1.0, + "_origin": "ast", + "source": "graphify_out_memory_query_20260821_101018_\uc784\ub3c4_\uae30\uc220\uc815\ubcf4db\uc5d0\uc11c_\uc9d1\uc218\uc815\uc758_\ud615\ud0dc\uc815\ubcf4\ub294_\uc5b4\ub5a4\uac8c_\uc788\ub294\uc9c0_\ud655\uc778\ud574\uc918_q_\uc784\ub3c4_\uae30\uc220\uc815\ubcf4db\uc5d0\uc11c_\uc9d1\uc218\uc815\uc758_\ud615\ud0dc\uc815\ubcf4\ub294_\uc5b4\ub5a4\uac8c_\uc788\ub294\uc9c0_\ud655\uc778\ud574\uc918", + "target": "graphify_out_memory_query_20260821_101018_\uc784\ub3c4_\uae30\uc220\uc815\ubcf4db\uc5d0\uc11c_\uc9d1\uc218\uc815\uc758_\ud615\ud0dc\uc815\ubcf4\ub294_\uc5b4\ub5a4\uac8c_\uc788\ub294\uc9c0_\ud655\uc778\ud574\uc918_outcome", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "graphify-out/memory/query_20260821_101018_\uc784\ub3c4_\uae30\uc220\uc815\ubcf4db\uc5d0\uc11c_\uc9d1\uc218\uc815\uc758_\ud615\ud0dc\uc815\ubcf4\ub294_\uc5b4\ub5a4\uac8c_\uc788\ub294\uc9c0_\ud655\uc778\ud574\uc918.md", + "source_location": "L20", + "weight": 1.0, + "_origin": "ast", + "source": "graphify_out_memory_query_20260821_101018_\uc784\ub3c4_\uae30\uc220\uc815\ubcf4db\uc5d0\uc11c_\uc9d1\uc218\uc815\uc758_\ud615\ud0dc\uc815\ubcf4\ub294_\uc5b4\ub5a4\uac8c_\uc788\ub294\uc9c0_\ud655\uc778\ud574\uc918_q_\uc784\ub3c4_\uae30\uc220\uc815\ubcf4db\uc5d0\uc11c_\uc9d1\uc218\uc815\uc758_\ud615\ud0dc\uc815\ubcf4\ub294_\uc5b4\ub5a4\uac8c_\uc788\ub294\uc9c0_\ud655\uc778\ud574\uc918", + "target": "graphify_out_memory_query_20260821_101018_\uc784\ub3c4_\uae30\uc220\uc815\ubcf4db\uc5d0\uc11c_\uc9d1\uc218\uc815\uc758_\ud615\ud0dc\uc815\ubcf4\ub294_\uc5b4\ub5a4\uac8c_\uc788\ub294\uc9c0_\ud655\uc778\ud574\uc918_source_nodes", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "index.md", + "source_location": "L7", + "weight": 1.0, + "_origin": "ast", + "source": "index", + "target": "index_wiki_index", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "index.md", + "source_location": "L51", + "weight": 1.0, + "_origin": "ast", + "source": "index_wiki_index", + "target": "index_\uacf5\ud1b5_\uac1c\ub150", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "index.md", + "source_location": "L43", + "weight": 1.0, + "_origin": "ast", + "source": "index_wiki_index", + "target": "index_\ub85c\uadf8\uc778_\uc804_\uad00\ub9ac", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "index.md", + "source_location": "L20", + "weight": 1.0, + "_origin": "ast", + "source": "index_wiki_index", + "target": "index_\ub85c\uadf8\uc778_\ud6c4_\uae30\ub2a5", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "index.md", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast", + "source": "index_wiki_index", + "target": "index_\uc6b0\uc120_\uc9c4\uc785\uc810", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "index.md", + "source_location": "L75", + "weight": 1.0, + "_origin": "ast", + "source": "index_wiki_index", + "target": "index_\ud604\uc7ac_\uc8fc\uc758\uc0ac\ud56d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A00_Common/A00_Common.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a00_common_a00_common", + "target": "pages_a00_common_a00_common_a00_common_\uacf5\ud1b5_\ud504\ub808\uc784\uc6cc\ud06c_\uc720\ud2f8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A00_Common/A00_Common.md", + "source_location": "L22", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a00_common_a00_common_a00_common_\uacf5\ud1b5_\ud504\ub808\uc784\uc6cc\ud06c_\uc720\ud2f8", + "target": "pages_a00_common_a00_common_\uac1c\uc694", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A00_Common/A00_Common.md", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a00_common_a00_common_a00_common_\uacf5\ud1b5_\ud504\ub808\uc784\uc6cc\ud06c_\uc720\ud2f8", + "target": "pages_a00_common_a00_common_\uc138\ubd84\ud654_\ub9c8\ud06c\ub2e4\uc6b4_\ubb38\uc11c_\ubaa9\ub85d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A00_Common/frontend/A00_Common_AppShell.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a00_common_frontend_a00_common_appshell", + "target": "pages_a00_common_frontend_a00_common_appshell_app_shell_ts", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A00_Common/frontend/A00_Common_AppShell.md", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a00_common_frontend_a00_common_appshell_app_shell_ts", + "target": "pages_a00_common_frontend_a00_common_appshell_\uc5f0\uad00_\uac1c\ub150_\ubc0f_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A00_Common/frontend/A00_Common_AppShell.md", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a00_common_frontend_a00_common_appshell_app_shell_ts", + "target": "pages_a00_common_frontend_a00_common_appshell_\uc8fc\uc694_\ud568\uc218_\ubaa9\ub85d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A00_Common/frontend/A00_Common_Router.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a00_common_frontend_a00_common_router", + "target": "pages_a00_common_frontend_a00_common_router_router_ts", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A00_Common/frontend/A00_Common_Router.md", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a00_common_frontend_a00_common_router_router_ts", + "target": "pages_a00_common_frontend_a00_common_router_\uc5f0\uad00_\uac1c\ub150_\ubc0f_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A00_Common/frontend/A00_Common_Router.md", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a00_common_frontend_a00_common_router_router_ts", + "target": "pages_a00_common_frontend_a00_common_router_\uc8fc\uc694_\ud568\uc218_\ubaa9\ub85d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A01_Home/A01_components.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a01_home_a01_components", + "target": "pages_a01_home_a01_components_a01_home_\uc138\ubd80_\uad6c\ud604", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A01_Home/A01_components.md", + "source_location": "L27", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a01_home_a01_components_a01_home_\uc138\ubd80_\uad6c\ud604", + "target": "pages_a01_home_a01_components_\ub370\uc774\ud130_\ud750\ub984", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A01_Home/A01_components.md", + "source_location": "L34", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a01_home_a01_components_a01_home_\uc138\ubd80_\uad6c\ud604", + "target": "pages_a01_home_a01_components_\ubbf8\ud574\uacb0", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A01_Home/A01_components.md", + "source_location": "L12", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a01_home_a01_components_a01_home_\uc138\ubd80_\uad6c\ud604", + "target": "pages_a01_home_a01_components_\uc2a4\ud0c0\uc77c", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A01_Home/A01_components.md", + "source_location": "L20", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a01_home_a01_components_a01_home_\uc138\ubd80_\uad6c\ud604", + "target": "pages_a01_home_a01_components_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A01_Home/A01_frontend.md", + "source_location": "L8", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a01_home_a01_frontend", + "target": "pages_a01_home_a01_frontend_a01_home_frontend", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A01_Home/A01_frontend.md", + "source_location": "L45", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a01_home_a01_frontend_a01_home_frontend", + "target": "pages_a01_home_a01_frontend_\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A01_Home/A01_frontend.md", + "source_location": "L60", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a01_home_a01_frontend_a01_home_frontend", + "target": "pages_a01_home_a01_frontend_\uc138\ubd80_\uad6c\ud604", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A01_Home/A01_frontend.md", + "source_location": "L38", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a01_home_a01_frontend_a01_home_frontend", + "target": "pages_a01_home_a01_frontend_\uc774\ubca4\ud2b8_\ud578\ub4e4\ub7ec", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A01_Home/A01_frontend.md", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a01_home_a01_frontend_a01_home_frontend", + "target": "pages_a01_home_a01_frontend_\ucef4\ud3ec\ub10c\ud2b8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A01_Home/A01_frontend.md", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a01_home_a01_frontend_a01_home_frontend", + "target": "pages_a01_home_a01_frontend_\ud30c\uc77c_\uad6c\uc870", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A01_Home/A01_frontend.md", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a01_home_a01_frontend_\ucef4\ud3ec\ub10c\ud2b8", + "target": "pages_a01_home_a01_frontend_hero_\uc139\uc158", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A01_Home/A01_frontend.md", + "source_location": "L33", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a01_home_a01_frontend_\ucef4\ud3ec\ub10c\ud2b8", + "target": "pages_a01_home_a01_frontend_\uc8fc\uc694_\uae30\ub2a5_\uc139\uc158", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A01_Home/A01_frontend.md", + "source_location": "L28", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a01_home_a01_frontend_\ucef4\ud3ec\ub10c\ud2b8", + "target": "pages_a01_home_a01_frontend_\ucd5c\uc2e0_\uc18c\uc2dd_\uc139\uc158", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A01_Home/frontend/A01_Home_UI_Page.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a01_home_frontend_a01_home_ui_page", + "target": "pages_a01_home_frontend_a01_home_ui_page_a01_home_ui_page_ts", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A01_Home/frontend/A01_Home_UI_Page.md", + "source_location": "L27", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a01_home_frontend_a01_home_ui_page_a01_home_ui_page_ts", + "target": "pages_a01_home_frontend_a01_home_ui_page_\uc5f0\uad00_\uac1c\ub150_\ubc0f_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A01_Home/frontend/A01_Home_UI_Page.md", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a01_home_frontend_a01_home_ui_page_a01_home_ui_page_ts", + "target": "pages_a01_home_frontend_a01_home_ui_page_\uc8fc\uc694_\ud568\uc218_\ubc0f_\uc778\ud130\ud398\uc774\uc2a4_\ubaa9\ub85d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A02_ProgDetail/A02_components.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a02_progdetail_a02_components", + "target": "pages_a02_progdetail_a02_components_a02_progdetail_\uc138\ubd80_\uad6c\ud604", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A02_ProgDetail/A02_components.md", + "source_location": "L29", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a02_progdetail_a02_components_a02_progdetail_\uc138\ubd80_\uad6c\ud604", + "target": "pages_a02_progdetail_a02_components_\ub370\uc774\ud130_\ud750\ub984", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A02_ProgDetail/A02_components.md", + "source_location": "L35", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a02_progdetail_a02_components_a02_progdetail_\uc138\ubd80_\uad6c\ud604", + "target": "pages_a02_progdetail_a02_components_\ubbf8\ud574\uacb0_\ud2b9\uc774\uc0ac\ud56d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A02_ProgDetail/A02_components.md", + "source_location": "L12", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a02_progdetail_a02_components_a02_progdetail_\uc138\ubd80_\uad6c\ud604", + "target": "pages_a02_progdetail_a02_components_\uc2a4\ud0c0\uc77c_css", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A02_ProgDetail/A02_components.md", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a02_progdetail_a02_components_a02_progdetail_\uc138\ubd80_\uad6c\ud604", + "target": "pages_a02_progdetail_a02_components_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A02_ProgDetail/A02_frontend.md", + "source_location": "L8", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a02_progdetail_a02_frontend", + "target": "pages_a02_progdetail_a02_frontend_a02_progdetail_frontend", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A02_ProgDetail/A02_frontend.md", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a02_progdetail_a02_frontend_a02_progdetail_frontend", + "target": "pages_a02_progdetail_a02_frontend_\uad6c\uc870", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A02_ProgDetail/A02_frontend.md", + "source_location": "L34", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a02_progdetail_a02_frontend_a02_progdetail_frontend", + "target": "pages_a02_progdetail_a02_frontend_\uc138\ubd80_\uad6c\ud604", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A02_ProgDetail/A02_frontend.md", + "source_location": "L27", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a02_progdetail_a02_frontend_a02_progdetail_frontend", + "target": "pages_a02_progdetail_a02_frontend_\uc81c\uc57d_\uc900\uc218", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A02_ProgDetail/A02_frontend.md", + "source_location": "L19", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a02_progdetail_a02_frontend_a02_progdetail_frontend", + "target": "pages_a02_progdetail_a02_frontend_\ucef4\ud3ec\ub10c\ud2b8_\ubd84\uc11d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A02_ProgDetail/frontend/A02_ProgDetail_UI_Page.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a02_progdetail_frontend_a02_progdetail_ui_page", + "target": "pages_a02_progdetail_frontend_a02_progdetail_ui_page_a02_progdetail_ui_page_ts", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A02_ProgDetail/frontend/A02_ProgDetail_UI_Page.md", + "source_location": "L25", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a02_progdetail_frontend_a02_progdetail_ui_page_a02_progdetail_ui_page_ts", + "target": "pages_a02_progdetail_frontend_a02_progdetail_ui_page_\uc5f0\uad00_\uac1c\ub150_\ubc0f_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A02_ProgDetail/frontend/A02_ProgDetail_UI_Page.md", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a02_progdetail_frontend_a02_progdetail_ui_page_a02_progdetail_ui_page_ts", + "target": "pages_a02_progdetail_frontend_a02_progdetail_ui_page_\uc8fc\uc694_\ud568\uc218_\ubaa9\ub85d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A03_CompDetail/A03_frontend.md", + "source_location": "L8", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a03_compdetail_a03_frontend", + "target": "pages_a03_compdetail_a03_frontend_a03_compdetail_frontend", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A03_CompDetail/A03_frontend.md", + "source_location": "L31", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a03_compdetail_a03_frontend_a03_compdetail_frontend", + "target": "pages_a03_compdetail_a03_frontend_\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A03_CompDetail/A03_frontend.md", + "source_location": "L47", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a03_compdetail_a03_frontend_a03_compdetail_frontend", + "target": "pages_a03_compdetail_a03_frontend_\uc2a4\ud0c0\uc77c_css", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A03_CompDetail/A03_frontend.md", + "source_location": "L66", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a03_compdetail_a03_frontend_a03_compdetail_frontend", + "target": "pages_a03_compdetail_a03_frontend_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A03_CompDetail/A03_frontend.md", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a03_compdetail_a03_frontend_a03_compdetail_frontend", + "target": "pages_a03_compdetail_a03_frontend_\ucef4\ud3ec\ub10c\ud2b8_\uc139\uc158_\ube4c\ub354", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A03_CompDetail/A03_frontend.md", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a03_compdetail_a03_frontend_a03_compdetail_frontend", + "target": "pages_a03_compdetail_a03_frontend_\ud30c\uc77c_\uad6c\uc870", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A03_CompDetail/A03_frontend.md", + "source_location": "L49", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a03_compdetail_a03_frontend_\uc2a4\ud0c0\uc77c_css", + "target": "pages_a03_compdetail_a03_frontend_css_\ud074\ub798\uc2a4_\uad6c\uc870", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A03_CompDetail/A03_frontend.md", + "source_location": "L63", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a03_compdetail_a03_frontend_\uc2a4\ud0c0\uc77c_css", + "target": "pages_a03_compdetail_a03_frontend_\ubc18\uc751\ud615", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A04_NewsHistory/A04_frontend.md", + "source_location": "L8", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a04_newshistory_a04_frontend", + "target": "pages_a04_newshistory_a04_frontend_a04_newshistory_frontend", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A04_NewsHistory/A04_frontend.md", + "source_location": "L32", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a04_newshistory_a04_frontend_a04_newshistory_frontend", + "target": "pages_a04_newshistory_a04_frontend_mock_\ub370\uc774\ud130_\uad6c\uc870", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A04_NewsHistory/A04_frontend.md", + "source_location": "L50", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a04_newshistory_a04_frontend_a04_newshistory_frontend", + "target": "pages_a04_newshistory_a04_frontend_\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A04_NewsHistory/A04_frontend.md", + "source_location": "L85", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a04_newshistory_a04_frontend_a04_newshistory_frontend", + "target": "pages_a04_newshistory_a04_frontend_\ubbf8\ud574\uacb0_\uc0ac\ud56d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A04_NewsHistory/A04_frontend.md", + "source_location": "L62", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a04_newshistory_a04_frontend_a04_newshistory_frontend", + "target": "pages_a04_newshistory_a04_frontend_\uc2a4\ud0c0\uc77c_css", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A04_NewsHistory/A04_frontend.md", + "source_location": "L80", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a04_newshistory_a04_frontend_a04_newshistory_frontend", + "target": "pages_a04_newshistory_a04_frontend_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A04_NewsHistory/A04_frontend.md", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a04_newshistory_a04_frontend_a04_newshistory_frontend", + "target": "pages_a04_newshistory_a04_frontend_\ucef4\ud3ec\ub10c\ud2b8_\uc139\uc158_\ube4c\ub354", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A04_NewsHistory/A04_frontend.md", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a04_newshistory_a04_frontend_a04_newshistory_frontend", + "target": "pages_a04_newshistory_a04_frontend_\ud30c\uc77c_\uad6c\uc870", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A04_NewsHistory/A04_frontend.md", + "source_location": "L64", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a04_newshistory_a04_frontend_\uc2a4\ud0c0\uc77c_css", + "target": "pages_a04_newshistory_a04_frontend_css_\ud074\ub798\uc2a4_\uad6c\uc870", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A04_NewsHistory/A04_frontend.md", + "source_location": "L77", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a04_newshistory_a04_frontend_\uc2a4\ud0c0\uc77c_css", + "target": "pages_a04_newshistory_a04_frontend_\ubc18\uc751\ud615", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A05_EduDetail/A05_frontend.md", + "source_location": "L8", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a05_edudetail_a05_frontend", + "target": "pages_a05_edudetail_a05_frontend_a05_edudetail_frontend", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A05_EduDetail/A05_frontend.md", + "source_location": "L30", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a05_edudetail_a05_frontend_a05_edudetail_frontend", + "target": "pages_a05_edudetail_a05_frontend_\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A05_EduDetail/A05_frontend.md", + "source_location": "L43", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a05_edudetail_a05_frontend_a05_edudetail_frontend", + "target": "pages_a05_edudetail_a05_frontend_\uc2a4\ud0c0\uc77c_css", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A05_EduDetail/A05_frontend.md", + "source_location": "L67", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a05_edudetail_a05_frontend_a05_edudetail_frontend", + "target": "pages_a05_edudetail_a05_frontend_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A05_EduDetail/A05_frontend.md", + "source_location": "L61", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a05_edudetail_a05_frontend_a05_edudetail_frontend", + "target": "pages_a05_edudetail_a05_frontend_\uc774\ubca4\ud2b8_\ud578\ub4e4\ub7ec", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A05_EduDetail/A05_frontend.md", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a05_edudetail_a05_frontend_a05_edudetail_frontend", + "target": "pages_a05_edudetail_a05_frontend_\ucef4\ud3ec\ub10c\ud2b8_\uc139\uc158_\ube4c\ub354", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A05_EduDetail/A05_frontend.md", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a05_edudetail_a05_frontend_a05_edudetail_frontend", + "target": "pages_a05_edudetail_a05_frontend_\ud30c\uc77c_\uad6c\uc870", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A05_EduDetail/A05_frontend.md", + "source_location": "L45", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a05_edudetail_a05_frontend_\uc2a4\ud0c0\uc77c_css", + "target": "pages_a05_edudetail_a05_frontend_css_\ud074\ub798\uc2a4_\uad6c\uc870", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A05_EduDetail/A05_frontend.md", + "source_location": "L58", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a05_edudetail_a05_frontend_\uc2a4\ud0c0\uc77c_css", + "target": "pages_a05_edudetail_a05_frontend_\ubc18\uc751\ud615", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A06_Login/A06_backend.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a06_login_a06_backend", + "target": "pages_a06_login_a06_backend_a06_login_backend", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A06_Login/A06_backend.md", + "source_location": "L20", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a06_login_a06_backend_a06_login_backend", + "target": "pages_a06_login_a06_backend_api_\uc5d4\ub4dc\ud3ec\uc778\ud2b8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A06_Login/A06_backend.md", + "source_location": "L30", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a06_login_a06_backend_a06_login_backend", + "target": "pages_a06_login_a06_backend_\ub0b4\ubd80_\ud5ec\ud37c", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A06_Login/A06_backend.md", + "source_location": "L45", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a06_login_a06_backend_a06_login_backend", + "target": "pages_a06_login_a06_backend_\ub85c\uadf8\uc778_\ub85c\uc9c1_\ud750\ub984", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A06_Login/A06_backend.md", + "source_location": "L54", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a06_login_a06_backend_a06_login_backend", + "target": "pages_a06_login_a06_backend_\ubcf4\uc548_\uc815\ucc45_\uc2e4_\ucf54\ub4dc_\uae30\uc900", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A06_Login/A06_backend.md", + "source_location": "L37", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a06_login_a06_backend_a06_login_backend", + "target": "pages_a06_login_a06_backend_\uc694\uccad_\uc2a4\ud0a4\ub9c8_pydantic", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A06_Login/A06_backend.md", + "source_location": "L61", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a06_login_a06_backend_a06_login_backend", + "target": "pages_a06_login_a06_backend_\uc758\uc874\uc131_\uacf5\ud1b5_\uc720\ud2f8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A06_Login/A06_backend.md", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a06_login_a06_backend_a06_login_backend", + "target": "pages_a06_login_a06_backend_\ud30c\uc77c_\uad6c\uc870", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A06_Login/A06_frontend.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a06_login_a06_frontend", + "target": "pages_a06_login_a06_frontend_a06_login_frontend", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A06_Login/A06_frontend.md", + "source_location": "L30", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a06_login_a06_frontend_a06_login_frontend", + "target": "pages_a06_login_a06_frontend_api_\ud074\ub77c\uc774\uc5b8\ud2b8_\ud568\uc218", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A06_Login/A06_frontend.md", + "source_location": "L56", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a06_login_a06_frontend_a06_login_frontend", + "target": "pages_a06_login_a06_frontend_\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A06_Login/A06_frontend.md", + "source_location": "L70", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a06_login_a06_frontend_a06_login_frontend", + "target": "pages_a06_login_a06_frontend_\uc2a4\ud0c0\uc77c_css", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A06_Login/A06_frontend.md", + "source_location": "L87", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a06_login_a06_frontend_a06_login_frontend", + "target": "pages_a06_login_a06_frontend_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A06_Login/A06_frontend.md", + "source_location": "L78", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a06_login_a06_frontend_a06_login_frontend", + "target": "pages_a06_login_a06_frontend_\uc774\ubca4\ud2b8_\ud578\ub4e4\ub7ec", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A06_Login/A06_frontend.md", + "source_location": "L43", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a06_login_a06_frontend_a06_login_frontend", + "target": "pages_a06_login_a06_frontend_\uc81c\ucd9c_\ubc0f_otp_\uc81c\uc5b4_\ub85c\uc9c1_2\ub2e8\uacc4_\ud3fc_\uc804\ud658", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A06_Login/A06_frontend.md", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a06_login_a06_frontend_a06_login_frontend", + "target": "pages_a06_login_a06_frontend_\ucef4\ud3ec\ub10c\ud2b8_\ud568\uc218", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A06_Login/A06_frontend.md", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a06_login_a06_frontend_a06_login_frontend", + "target": "pages_a06_login_a06_frontend_\ud30c\uc77c_\uad6c\uc870", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A06_Login/backend/A06_Login_Router.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a06_login_backend_a06_login_router", + "target": "pages_a06_login_backend_a06_login_router_a06_login_router_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A06_Login/backend/A06_Login_Router.md", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a06_login_backend_a06_login_router_a06_login_router_py", + "target": "pages_a06_login_backend_a06_login_router_\ub77c\uc6b0\ud130_api_\ubc0f_\uc8fc\uc694_\ud5ec\ud37c_\ud568\uc218_\ubaa9\ub85d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A06_Login/backend/A06_Login_Router.md", + "source_location": "L26", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a06_login_backend_a06_login_router_a06_login_router_py", + "target": "pages_a06_login_backend_a06_login_router_\uc5f0\uad00_\uac1c\ub150_\ubc0f_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A07_Register/A07_backend.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a07_register_a07_backend", + "target": "pages_a07_register_a07_backend_a07_register_backend", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A07_Register/A07_backend.md", + "source_location": "L20", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a07_register_a07_backend_a07_register_backend", + "target": "pages_a07_register_a07_backend_api_\uc5d4\ub4dc\ud3ec\uc778\ud2b8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A07_Register/A07_backend.md", + "source_location": "L37", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a07_register_a07_backend_a07_register_backend", + "target": "pages_a07_register_a07_backend_\uac00\uc785_\ub85c\uc9c1_\ud750\ub984", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A07_Register/A07_backend.md", + "source_location": "L28", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a07_register_a07_backend_a07_register_backend", + "target": "pages_a07_register_a07_backend_\uc694\uccad_\uc2a4\ud0a4\ub9c8_pydantic", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A07_Register/A07_backend.md", + "source_location": "L50", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a07_register_a07_backend_a07_register_backend", + "target": "pages_a07_register_a07_backend_\uc758\uc874\uc131_\uacf5\ud1b5_\uc720\ud2f8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A07_Register/A07_backend.md", + "source_location": "L56", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a07_register_a07_backend_a07_register_backend", + "target": "pages_a07_register_a07_backend_\ucc38\uace0", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A07_Register/A07_backend.md", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a07_register_a07_backend_a07_register_backend", + "target": "pages_a07_register_a07_backend_\ud30c\uc77c_\uad6c\uc870", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A07_Register/A07_frontend.md", + "source_location": "L8", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a07_register_a07_frontend", + "target": "pages_a07_register_a07_frontend_a07_register_frontend", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A07_Register/A07_frontend.md", + "source_location": "L33", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a07_register_a07_frontend_a07_register_frontend", + "target": "pages_a07_register_a07_frontend_api_\ud074\ub77c\uc774\uc5b8\ud2b8_\ud568\uc218", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A07_Register/A07_frontend.md", + "source_location": "L56", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a07_register_a07_frontend_a07_register_frontend", + "target": "pages_a07_register_a07_frontend_\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A07_Register/A07_frontend.md", + "source_location": "L70", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a07_register_a07_frontend_a07_register_frontend", + "target": "pages_a07_register_a07_frontend_\uc2a4\ud0c0\uc77c_css", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A07_Register/A07_frontend.md", + "source_location": "L50", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a07_register_a07_frontend_a07_register_frontend", + "target": "pages_a07_register_a07_frontend_\uc57d\uad00_\ub3d9\uc758_\uc544\ucf54\ub514\uc5b8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A07_Register/A07_frontend.md", + "source_location": "L85", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a07_register_a07_frontend_a07_register_frontend", + "target": "pages_a07_register_a07_frontend_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A07_Register/A07_frontend.md", + "source_location": "L77", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a07_register_a07_frontend_a07_register_frontend", + "target": "pages_a07_register_a07_frontend_\uc774\ubca4\ud2b8_\ud578\ub4e4\ub7ec", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A07_Register/A07_frontend.md", + "source_location": "L43", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a07_register_a07_frontend_a07_register_frontend", + "target": "pages_a07_register_a07_frontend_\uc81c\ucd9c_\ub85c\uc9c1_2\ub2e8\uacc4_\ud3fc_\uc804\ud658", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A07_Register/A07_frontend.md", + "source_location": "L24", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a07_register_a07_frontend_a07_register_frontend", + "target": "pages_a07_register_a07_frontend_\ucef4\ud3ec\ub10c\ud2b8_\ud568\uc218_ui_auth_page_\uc2e4\uc0ac\uc6a9", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A07_Register/A07_frontend.md", + "source_location": "L12", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a07_register_a07_frontend_a07_register_frontend", + "target": "pages_a07_register_a07_frontend_\ud30c\uc77c_\uad6c\uc870", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A07_Register/backend/A07_Register_Router.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a07_register_backend_a07_register_router", + "target": "pages_a07_register_backend_a07_register_router_a07_register_router_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A07_Register/backend/A07_Register_Router.md", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a07_register_backend_a07_register_router_a07_register_router_py", + "target": "pages_a07_register_backend_a07_register_router_\ub77c\uc6b0\ud130_api_\ubc0f_\uc8fc\uc694_\ud568\uc218_\ubaa9\ub85d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A07_Register/backend/A07_Register_Router.md", + "source_location": "L22", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a07_register_backend_a07_register_router_a07_register_router_py", + "target": "pages_a07_register_backend_a07_register_router_\uc5f0\uad00_\uac1c\ub150_\ubc0f_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A08_Support/A08_backend.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a08_support_a08_backend", + "target": "pages_a08_support_a08_backend_a08_support_backend", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A08_Support/A08_backend.md", + "source_location": "L20", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a08_support_a08_backend_a08_support_backend", + "target": "pages_a08_support_a08_backend_api_\uc5d4\ub4dc\ud3ec\uc778\ud2b8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A08_Support/A08_backend.md", + "source_location": "L45", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a08_support_a08_backend_a08_support_backend", + "target": "pages_a08_support_a08_backend_db_\uc800\uc7a5_\uceec\ub7fc_\uc2e4_\ucf54\ub4dc_insert_\uae30\uc900", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A08_Support/A08_backend.md", + "source_location": "L26", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a08_support_a08_backend_a08_support_backend", + "target": "pages_a08_support_a08_backend_\ub0b4\ubd80_\ud5ec\ud37c", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A08_Support/A08_backend.md", + "source_location": "L32", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a08_support_a08_backend_a08_support_backend", + "target": "pages_a08_support_a08_backend_\uc694\uccad_\uc2a4\ud0a4\ub9c8_pydantic", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A08_Support/A08_backend.md", + "source_location": "L57", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a08_support_a08_backend_a08_support_backend", + "target": "pages_a08_support_a08_backend_\uc758\uc874\uc131_\uacf5\ud1b5_\uc720\ud2f8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A08_Support/A08_backend.md", + "source_location": "L38", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a08_support_a08_backend_a08_support_backend", + "target": "pages_a08_support_a08_backend_\uc811\uc218_\ub85c\uc9c1", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A08_Support/A08_backend.md", + "source_location": "L52", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a08_support_a08_backend_a08_support_backend", + "target": "pages_a08_support_a08_backend_\ud2b9\uc9d5", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A08_Support/A08_backend.md", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a08_support_a08_backend_a08_support_backend", + "target": "pages_a08_support_a08_backend_\ud30c\uc77c_\uad6c\uc870", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A08_Support/A08_frontend.md", + "source_location": "L8", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a08_support_a08_frontend", + "target": "pages_a08_support_a08_frontend_a08_support_frontend", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A08_Support/A08_frontend.md", + "source_location": "L39", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a08_support_a08_frontend_a08_support_frontend", + "target": "pages_a08_support_a08_frontend_\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A08_Support/A08_frontend.md", + "source_location": "L34", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a08_support_a08_frontend_a08_support_frontend", + "target": "pages_a08_support_a08_frontend_\uc138\uc158_\uc790\ub3d9_\ucc44\uc6c0", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A08_Support/A08_frontend.md", + "source_location": "L51", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a08_support_a08_frontend_a08_support_frontend", + "target": "pages_a08_support_a08_frontend_\uc2a4\ud0c0\uc77c_css", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A08_Support/A08_frontend.md", + "source_location": "L65", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a08_support_a08_frontend_a08_support_frontend", + "target": "pages_a08_support_a08_frontend_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A08_Support/A08_frontend.md", + "source_location": "L59", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a08_support_a08_frontend_a08_support_frontend", + "target": "pages_a08_support_a08_frontend_\uc774\ubca4\ud2b8_\ud578\ub4e4\ub7ec", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A08_Support/A08_frontend.md", + "source_location": "L27", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a08_support_a08_frontend_a08_support_frontend", + "target": "pages_a08_support_a08_frontend_\uc81c\ucd9c_\ub85c\uc9c1", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A08_Support/A08_frontend.md", + "source_location": "L73", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a08_support_a08_frontend_a08_support_frontend", + "target": "pages_a08_support_a08_frontend_\ucc38\uace0", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A08_Support/A08_frontend.md", + "source_location": "L19", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a08_support_a08_frontend_a08_support_frontend", + "target": "pages_a08_support_a08_frontend_\ucef4\ud3ec\ub10c\ud2b8_\ud568\uc218", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A08_Support/A08_frontend.md", + "source_location": "L12", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a08_support_a08_frontend_a08_support_frontend", + "target": "pages_a08_support_a08_frontend_\ud30c\uc77c_\uad6c\uc870", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A08_Support/backend/A08_Support_Router.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a08_support_backend_a08_support_router", + "target": "pages_a08_support_backend_a08_support_router_a08_support_router_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A08_Support/backend/A08_Support_Router.md", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a08_support_backend_a08_support_router_a08_support_router_py", + "target": "pages_a08_support_backend_a08_support_router_\ub77c\uc6b0\ud130_api_\ubc0f_\uc8fc\uc694_\ud568\uc218_\ubaa9\ub85d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A08_Support/backend/A08_Support_Router.md", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a08_support_backend_a08_support_router_a08_support_router_py", + "target": "pages_a08_support_backend_a08_support_router_\uc5f0\uad00_\uac1c\ub150_\ubc0f_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A09_Security/A09_backend.md", + "source_location": "L8", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a09_security_a09_backend", + "target": "pages_a09_security_a09_backend_a09_security_backend", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A09_Security/A09_backend.md", + "source_location": "L19", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a09_security_a09_backend_a09_security_backend", + "target": "pages_a09_security_a09_backend_api_\uc5d4\ub4dc\ud3ec\uc778\ud2b8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A09_Security/A09_backend.md", + "source_location": "L55", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a09_security_a09_backend_a09_security_backend", + "target": "pages_a09_security_a09_backend_db_\uc800\uc7a5_activity_logs", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A09_Security/A09_backend.md", + "source_location": "L60", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a09_security_a09_backend_a09_security_backend", + "target": "pages_a09_security_a09_backend_\uad8c\ud55c_\ud5ec\ud37c", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A09_Security/A09_backend.md", + "source_location": "L45", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a09_security_a09_backend_a09_security_backend", + "target": "pages_a09_security_a09_backend_\uc694\uccad_\uc2a4\ud0a4\ub9c8_pydantic", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A09_Security/A09_backend.md", + "source_location": "L67", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a09_security_a09_backend_a09_security_backend", + "target": "pages_a09_security_a09_backend_\uc758\uc874\uc131_\uacf5\ud1b5_\uc720\ud2f8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A09_Security/A09_backend.md", + "source_location": "L73", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a09_security_a09_backend_a09_security_backend", + "target": "pages_a09_security_a09_backend_\ucc38\uace0", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A09_Security/A09_backend.md", + "source_location": "L12", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a09_security_a09_backend_a09_security_backend", + "target": "pages_a09_security_a09_backend_\ud30c\uc77c_\uad6c\uc870", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A09_Security/A09_backend.md", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a09_security_a09_backend_api_\uc5d4\ub4dc\ud3ec\uc778\ud2b8", + "target": "pages_a09_security_a09_backend_\ub9c8\uc2a4\ud130_\ud68c\uc0ac_\uad00\ub9ac\uc790_\uc804\uc6a9_require_master", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A09_Security/A09_backend.md", + "source_location": "L31", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a09_security_a09_backend_api_\uc5d4\ub4dc\ud3ec\uc778\ud2b8", + "target": "pages_a09_security_a09_backend_\uc2dc\uc2a4\ud15c_\uad00\ub9ac\uc790_\uc804\uc6a9_require_system_admin", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A09_Security/A09_backend.md", + "source_location": "L39", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a09_security_a09_backend_api_\uc5d4\ub4dc\ud3ec\uc778\ud2b8", + "target": "pages_a09_security_a09_backend_\uc778\uc99d_\uc0ac\uc6a9\uc790_\uacf5\ud1b5_verify_session", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A09_Security/A09_frontend.md", + "source_location": "L8", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a09_security_a09_frontend", + "target": "pages_a09_security_a09_frontend_a09_security_frontend", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A09_Security/A09_frontend.md", + "source_location": "L40", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a09_security_a09_frontend_a09_security_frontend", + "target": "pages_a09_security_a09_frontend_api_\ud074\ub77c\uc774\uc5b8\ud2b8_\ud568\uc218_\ubbf8\uc0ac\uc6a9_\uc815\uc758\ub9cc", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A09_Security/A09_frontend.md", + "source_location": "L53", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a09_security_a09_frontend_a09_security_frontend", + "target": "pages_a09_security_a09_frontend_\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A09_Security/A09_frontend.md", + "source_location": "L64", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a09_security_a09_frontend_a09_security_frontend", + "target": "pages_a09_security_a09_frontend_\uc2a4\ud0c0\uc77c_css", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A09_Security/A09_frontend.md", + "source_location": "L31", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a09_security_a09_frontend_a09_security_frontend", + "target": "pages_a09_security_a09_frontend_\uc57d\uad00_\ub370\uc774\ud130_a09_security_terms_ts", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A09_Security/A09_frontend.md", + "source_location": "L69", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a09_security_a09_frontend_a09_security_frontend", + "target": "pages_a09_security_a09_frontend_\uc57d\uad00_\ud14d\uc2a4\ud2b8\uc640_\uc2e4_\ucf54\ub4dc_\ubd88\uc77c\uce58", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A09_Security/A09_frontend.md", + "source_location": "L75", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a09_security_a09_frontend_a09_security_frontend", + "target": "pages_a09_security_a09_frontend_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A09_Security/A09_frontend.md", + "source_location": "L25", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a09_security_a09_frontend_a09_security_frontend", + "target": "pages_a09_security_a09_frontend_\ucef4\ud3ec\ub10c\ud2b8_\ud568\uc218", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A09_Security/A09_frontend.md", + "source_location": "L12", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a09_security_a09_frontend_a09_security_frontend", + "target": "pages_a09_security_a09_frontend_\ud30c\uc77c_\uad6c\uc870", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A09_Security/backend/A09_Security_Router.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a09_security_backend_a09_security_router", + "target": "pages_a09_security_backend_a09_security_router_a09_security_router_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A09_Security/backend/A09_Security_Router.md", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a09_security_backend_a09_security_router_a09_security_router_py", + "target": "pages_a09_security_backend_a09_security_router_\ub77c\uc6b0\ud130_api_\ubc0f_\uc8fc\uc694_\ud568\uc218_\ubaa9\ub85d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A09_Security/backend/A09_Security_Router.md", + "source_location": "L28", + "weight": 1.0, + "_origin": "ast", + "source": "pages_a09_security_backend_a09_security_router_a09_security_router_py", + "target": "pages_a09_security_backend_a09_security_router_\uc5f0\uad00_\uac1c\ub150_\ubc0f_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B01_Dashboard/B01_api.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b01_dashboard_b01_api", + "target": "pages_b01_dashboard_b01_api_b01_dashboard_api", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B01_Dashboard/B01_api.md", + "source_location": "L16", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b01_dashboard_b01_api_b01_dashboard_api", + "target": "pages_b01_dashboard_b01_api_\uc0ac\uc6a9\uc790_\ud68c\uc0ac", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B01_Dashboard/B01_api.md", + "source_location": "L48", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b01_dashboard_b01_api_b01_dashboard_api", + "target": "pages_b01_dashboard_b01_api_\uc2dc\uc2a4\ud15c_\uad00\ub9ac\uc790", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B01_Dashboard/B01_api.md", + "source_location": "L37", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b01_dashboard_b01_api_b01_dashboard_api", + "target": "pages_b01_dashboard_b01_api_\ud504\ub85c\uc81d\ud2b8_\uc790\ub3d9\ud654", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B01_Dashboard/B01_api.md", + "source_location": "L27", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b01_dashboard_b01_api_b01_dashboard_api", + "target": "pages_b01_dashboard_b01_api_\ud68c\uc0ac_\uad00\ub9ac\uc790", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B01_Dashboard/B01_backend.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b01_dashboard_b01_backend", + "target": "pages_b01_dashboard_b01_backend_b01_dashboard_backend", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B01_Dashboard/B01_backend.md", + "source_location": "L61", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b01_dashboard_b01_backend_b01_dashboard_backend", + "target": "pages_b01_dashboard_b01_backend_\uae30\uc220\ubd80\ucc44", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B01_Dashboard/B01_backend.md", + "source_location": "L18", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b01_dashboard_b01_backend_b01_dashboard_backend", + "target": "pages_b01_dashboard_b01_backend_\ub77c\uc6b0\ud130_\uad8c\ud55c_\ud5ec\ud37c", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B01_Dashboard/B01_backend.md", + "source_location": "L12", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b01_dashboard_b01_backend_b01_dashboard_backend", + "target": "pages_b01_dashboard_b01_backend_\uc138\ubd84\ud654_\ubc31\uc5d4\ub4dc_\uc704\ud0a4_\uba85\uc138", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B01_Dashboard/B01_backend.md", + "source_location": "L51", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b01_dashboard_b01_backend_b01_dashboard_backend", + "target": "pages_b01_dashboard_b01_backend_\uc694\uccad_\uc2a4\ud0a4\ub9c8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B01_Dashboard/B01_backend.md", + "source_location": "L30", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b01_dashboard_b01_backend_b01_dashboard_backend", + "target": "pages_b01_dashboard_b01_backend_\uc800\uc7a5\uc18c_\ubc0f_\uc0ad\uc81c_\ud568\uc218", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B01_Dashboard/B01_db.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b01_dashboard_b01_db", + "target": "pages_b01_dashboard_b01_db_b01_dashboard_db_\uc0ac\uc6a9_\uad00\uacc4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B01_Dashboard/B01_db.md", + "source_location": "L25", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b01_dashboard_b01_db_b01_dashboard_db_\uc0ac\uc6a9_\uad00\uacc4", + "target": "pages_b01_dashboard_b01_db_\ud2b8\ub79c\uc7ad\uc158_\uacbd\uacc4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B01_Dashboard/B01_dependencies.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b01_dashboard_b01_dependencies", + "target": "pages_b01_dashboard_b01_dependencies_b01_dashboard_dependencies", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B01_Dashboard/B01_dependencies.md", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b01_dashboard_b01_dependencies_b01_dashboard_dependencies", + "target": "pages_b01_dashboard_b01_dependencies_\ud504\ub85c\uc81d\ud2b8_\uacf5\ud1b5_\ubaa8\ub4c8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B01_Dashboard/B01_frontend.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b01_dashboard_b01_frontend", + "target": "pages_b01_dashboard_b01_frontend_b01_dashboard_frontend", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B01_Dashboard/B01_frontend.md", + "source_location": "L33", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b01_dashboard_b01_frontend_b01_dashboard_frontend", + "target": "pages_b01_dashboard_b01_frontend_ui_\uad8c\ud55c_\ud5ec\ud37c", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B01_Dashboard/B01_frontend.md", + "source_location": "L59", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b01_dashboard_b01_frontend_b01_dashboard_frontend", + "target": "pages_b01_dashboard_b01_frontend_\uacf5\uc720_\uc790\uc6d0_\uc5f0\uacb0", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B01_Dashboard/B01_frontend.md", + "source_location": "L45", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b01_dashboard_b01_frontend_b01_dashboard_frontend", + "target": "pages_b01_dashboard_b01_frontend_\ubaa8\ub2ec", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B01_Dashboard/B01_frontend.md", + "source_location": "L20", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b01_dashboard_b01_frontend_b01_dashboard_frontend", + "target": "pages_b01_dashboard_b01_frontend_\ubd84\ud560\ub41c_ui_\ucef4\ud3ec\ub10c\ud2b8_\ud30c\uc77c", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B01_Dashboard/B01_frontend.md", + "source_location": "L12", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b01_dashboard_b01_frontend_b01_dashboard_frontend", + "target": "pages_b01_dashboard_b01_frontend_\ud30c\uc77c\uacfc_\uc9c4\uc785\uc810", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B01_Dashboard/backend/B01_Dashboard_Router.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b01_dashboard_backend_b01_dashboard_router", + "target": "pages_b01_dashboard_backend_b01_dashboard_router_b01_dashboard_router_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B01_Dashboard/backend/B01_Dashboard_Router.md", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b01_dashboard_backend_b01_dashboard_router_b01_dashboard_router_py", + "target": "pages_b01_dashboard_backend_b01_dashboard_router_\ub77c\uc6b0\ud130_api_\ubc0f_\uc8fc\uc694_\ud568\uc218_\ubaa9\ub85d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B01_Dashboard/backend/B01_Dashboard_Router.md", + "source_location": "L26", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b01_dashboard_backend_b01_dashboard_router_b01_dashboard_router_py", + "target": "pages_b01_dashboard_backend_b01_dashboard_router_\uc5f0\uad00_\uac1c\ub150_\ubc0f_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B01_Dashboard/frontend/B01_Dashboard_UI_Page.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b01_dashboard_frontend_b01_dashboard_ui_page", + "target": "pages_b01_dashboard_frontend_b01_dashboard_ui_page_b01_dashboard_ui_page_ts", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B01_Dashboard/frontend/B01_Dashboard_UI_Page.md", + "source_location": "L20", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b01_dashboard_frontend_b01_dashboard_ui_page_b01_dashboard_ui_page_ts", + "target": "pages_b01_dashboard_frontend_b01_dashboard_ui_page_\uc5f0\uad00_\uac1c\ub150_\ubc0f_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B01_Dashboard/frontend/B01_Dashboard_UI_Page.md", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b01_dashboard_frontend_b01_dashboard_ui_page_b01_dashboard_ui_page_ts", + "target": "pages_b01_dashboard_frontend_b01_dashboard_ui_page_\uc8fc\uc694_\ud568\uc218_\ubaa9\ub85d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B02_ProjRegister/B02_backend.md", + "source_location": "L8", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b02_projregister_b02_backend", + "target": "pages_b02_projregister_b02_backend_b02_projregister_backend", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B02_ProjRegister/B02_backend.md", + "source_location": "L22", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b02_projregister_b02_backend_b02_projregister_backend", + "target": "pages_b02_projregister_b02_backend_api_\uc5d4\ub4dc\ud3ec\uc778\ud2b8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B02_ProjRegister/B02_backend.md", + "source_location": "L56", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b02_projregister_b02_backend_b02_projregister_backend", + "target": "pages_b02_projregister_b02_backend_db_\uc800\uc7a5_\uceec\ub7fc_projects_insert", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B02_ProjRegister/B02_backend.md", + "source_location": "L45", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b02_projregister_b02_backend_b02_projregister_backend", + "target": "pages_b02_projregister_b02_backend_\uc0dd\uc131_\ub85c\uc9c1_create_project_\ud2b8\ub79c\uc7ad\uc158", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B02_ProjRegister/B02_backend.md", + "source_location": "L38", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b02_projregister_b02_backend_b02_projregister_backend", + "target": "pages_b02_projregister_b02_backend_\uc694\uccad_\uc751\ub2f5_\uc2a4\ud0a4\ub9c8_pydantic", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B02_ProjRegister/B02_backend.md", + "source_location": "L61", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b02_projregister_b02_backend_b02_projregister_backend", + "target": "pages_b02_projregister_b02_backend_\uc758\uc874\uc131_\uacf5\ud1b5_\uc720\ud2f8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B02_ProjRegister/B02_backend.md", + "source_location": "L69", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b02_projregister_b02_backend_b02_projregister_backend", + "target": "pages_b02_projregister_b02_backend_\ucc38\uace0", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B02_ProjRegister/B02_backend.md", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b02_projregister_b02_backend_b02_projregister_backend", + "target": "pages_b02_projregister_b02_backend_\ud30c\uc77c_\uad6c\uc870", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B02_ProjRegister/B02_backend.md", + "source_location": "L28", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b02_projregister_b02_backend_b02_projregister_backend", + "target": "pages_b02_projregister_b02_backend_\ud568\uc218", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B02_ProjRegister/B02_db.md", + "source_location": "L8", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b02_projregister_b02_db", + "target": "pages_b02_projregister_b02_db_b02_projregister_db", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B02_ProjRegister/B02_db.md", + "source_location": "L12", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b02_projregister_b02_db_b02_projregister_db", + "target": "pages_b02_projregister_b02_db_\uc4f0\ub294_\ud14c\uc774\ube14", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B02_ProjRegister/B02_db.md", + "source_location": "L20", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b02_projregister_b02_db_b02_projregister_db", + "target": "pages_b02_projregister_b02_db_\uc800\uc7a5\uc18c_\ud30c\uc77c\uc2dc\uc2a4\ud15c", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B02_ProjRegister/B02_db.md", + "source_location": "L26", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b02_projregister_b02_db_b02_projregister_db", + "target": "pages_b02_projregister_b02_db_\ucc38\uace0_\uacc4\ud68d_\ub2f9\uc2dc_\uc758\ub3c4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B02_ProjRegister/B02_frontend.md", + "source_location": "L8", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b02_projregister_b02_frontend", + "target": "pages_b02_projregister_b02_frontend_b02_projregister_frontend", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B02_ProjRegister/B02_frontend.md", + "source_location": "L45", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b02_projregister_b02_frontend_b02_projregister_frontend", + "target": "pages_b02_projregister_b02_frontend_\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B02_ProjRegister/B02_frontend.md", + "source_location": "L57", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b02_projregister_b02_frontend_b02_projregister_frontend", + "target": "pages_b02_projregister_b02_frontend_\uc2a4\ud0c0\uc77c_css", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B02_ProjRegister/B02_frontend.md", + "source_location": "L72", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b02_projregister_b02_frontend_b02_projregister_frontend", + "target": "pages_b02_projregister_b02_frontend_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B02_ProjRegister/B02_frontend.md", + "source_location": "L66", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b02_projregister_b02_frontend_b02_projregister_frontend", + "target": "pages_b02_projregister_b02_frontend_\uc774\ubca4\ud2b8_\ud578\ub4e4\ub7ec", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B02_ProjRegister/B02_frontend.md", + "source_location": "L26", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b02_projregister_b02_frontend_b02_projregister_frontend", + "target": "pages_b02_projregister_b02_frontend_\uc785\ub825_\ud544\ub4dc", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B02_ProjRegister/B02_frontend.md", + "source_location": "L37", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b02_projregister_b02_frontend_b02_projregister_frontend", + "target": "pages_b02_projregister_b02_frontend_\uc81c\ucd9c_\ub85c\uc9c1", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B02_ProjRegister/B02_frontend.md", + "source_location": "L80", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b02_projregister_b02_frontend_b02_projregister_frontend", + "target": "pages_b02_projregister_b02_frontend_\ucc38\uace0", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B02_ProjRegister/B02_frontend.md", + "source_location": "L19", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b02_projregister_b02_frontend_b02_projregister_frontend", + "target": "pages_b02_projregister_b02_frontend_\ucef4\ud3ec\ub10c\ud2b8_\ud568\uc218", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B02_ProjRegister/B02_frontend.md", + "source_location": "L12", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b02_projregister_b02_frontend_b02_projregister_frontend", + "target": "pages_b02_projregister_b02_frontend_\ud30c\uc77c_\uad6c\uc870", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B02_ProjRegister/backend/B02_ProjRegister_Router.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b02_projregister_backend_b02_projregister_router", + "target": "pages_b02_projregister_backend_b02_projregister_router_b02_projregister_router_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B02_ProjRegister/backend/B02_ProjRegister_Router.md", + "source_location": "L20", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b02_projregister_backend_b02_projregister_router_b02_projregister_router_py", + "target": "pages_b02_projregister_backend_b02_projregister_router_\uc5f0\uad00_\uac1c\ub150_\ubc0f_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B02_ProjRegister/backend/B02_ProjRegister_Router.md", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b02_projregister_backend_b02_projregister_router_b02_projregister_router_py", + "target": "pages_b02_projregister_backend_b02_projregister_router_\uc8fc\uc694_\ud568\uc218_\ubaa9\ub85d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B03_FileInput/B03_FileInput_plan_lidar_multi_file.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b03_fileinput_b03_fileinput_plan_lidar_multi_file", + "target": "pages_b03_fileinput_b03_fileinput_plan_lidar_multi_file_b03_\ub2e4\uc911_\ub77c\uc774\ub2e4_\ud30c\uc77c_\ub300\uc6a9\ub7c9_\ucc98\ub9ac_\ubcf4\ub958_\uacc4\ud68d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B03_FileInput/B03_api.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b03_fileinput_b03_api", + "target": "pages_b03_fileinput_b03_api_b03_fileinput_api", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B03_FileInput/B03_api.md", + "source_location": "L29", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b03_fileinput_b03_api_b03_fileinput_api", + "target": "pages_b03_fileinput_b03_api_workflow_\uc870\ud68c", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B03_FileInput/B03_api.md", + "source_location": "L16", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b03_fileinput_b03_api_b03_fileinput_api", + "target": "pages_b03_fileinput_b03_api_\uc77c\ubc18_\uc5c5\ub85c\ub4dc", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B03_FileInput/B03_api.md", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b03_fileinput_b03_api_b03_fileinput_api", + "target": "pages_b03_fileinput_b03_api_\uccad\ud06c_\uc5c5\ub85c\ub4dc", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B03_FileInput/B03_backend.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b03_fileinput_b03_backend", + "target": "pages_b03_fileinput_b03_backend_b03_fileinput_backend", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B03_FileInput/B03_backend.md", + "source_location": "L54", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b03_fileinput_b03_backend_b03_fileinput_backend", + "target": "pages_b03_fileinput_b03_backend_workflow_\uc54c\ub9bc", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B03_FileInput/B03_backend.md", + "source_location": "L26", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b03_fileinput_b03_backend_b03_fileinput_backend", + "target": "pages_b03_fileinput_b03_backend_\uba54\ud0c0\ub370\uc774\ud130_\ubd84\uc11d_\ubc0f_\ud30c\uc77c_\uc9c0\ubb38", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B03_FileInput/B03_backend.md", + "source_location": "L37", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b03_fileinput_b03_backend_b03_fileinput_backend", + "target": "pages_b03_fileinput_b03_backend_\uc784\uc2dc_\ubcf4\uad00\ud568_r2_temp_upload", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B03_FileInput/B03_backend.md", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b03_fileinput_b03_backend_b03_fileinput_backend", + "target": "pages_b03_fileinput_b03_backend_\uc785\ub825_\uac80\uc99d_\ud30c\uc77c_\ucc98\ub9ac", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B03_FileInput/B03_backend.md", + "source_location": "L45", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b03_fileinput_b03_backend_b03_fileinput_backend", + "target": "pages_b03_fileinput_b03_backend_\uc800\uc7a5\uc18c_\ubc0f_\ucd08\uae30\ud654", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B03_FileInput/B03_db.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b03_fileinput_b03_db", + "target": "pages_b03_fileinput_b03_db_b03_fileinput_db_\uc0ac\uc6a9_\uad00\uacc4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B03_FileInput/B03_db.md", + "source_location": "L22", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b03_fileinput_b03_db_b03_fileinput_db_\uc0ac\uc6a9_\uad00\uacc4", + "target": "pages_b03_fileinput_b03_db_\ud30c\uc77c_\uacbd\ub85c", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B03_FileInput/B03_dependencies.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b03_fileinput_b03_dependencies", + "target": "pages_b03_fileinput_b03_dependencies_b03_fileinput_dependencies", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B03_FileInput/B03_dependencies.md", + "source_location": "L24", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b03_fileinput_b03_dependencies_b03_fileinput_dependencies", + "target": "pages_b03_fileinput_b03_dependencies_\uacf5\ud1b5_\ubaa8\ub4c8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B03_FileInput/B03_frontend.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b03_fileinput_b03_frontend", + "target": "pages_b03_fileinput_b03_frontend_b03_fileinput_frontend", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B03_FileInput/B03_frontend.md", + "source_location": "L30", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b03_fileinput_b03_frontend_b03_fileinput_frontend", + "target": "pages_b03_fileinput_b03_frontend_api_\ud074\ub77c\uc774\uc5b8\ud2b8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B03_FileInput/B03_frontend.md", + "source_location": "L25", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b03_fileinput_b03_frontend_b03_fileinput_frontend", + "target": "pages_b03_fileinput_b03_frontend_ui_\uc9c0\uc6d0_\uc720\ud2f8\ub9ac\ud2f0_\ubd84\ud560_\uc644\ub8cc", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B03_FileInput/B03_frontend.md", + "source_location": "L40", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b03_fileinput_b03_frontend_b03_fileinput_frontend", + "target": "pages_b03_fileinput_b03_frontend_\ube0c\ub77c\uc6b0\uc800_\uc0c1\ud0dc_\uc624\ud504\ub77c\uc778_\ubcf4\uc870", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B03_FileInput/B03_frontend.md", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b03_fileinput_b03_frontend_b03_fileinput_frontend", + "target": "pages_b03_fileinput_b03_frontend_\ud398\uc774\uc9c0_\uc5c5\ub85c\ub4dc_\ud750\ub984", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B03_FileInput/B03_route_snapshot_crs.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b03_fileinput_b03_route_snapshot_crs", + "target": "pages_b03_fileinput_b03_route_snapshot_crs_b03_\uacc4\ud68d\ub178\uc120_\uc815\ubcf8_\uc88c\ud45c\uacc4_\ud6c4\uc18d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B03_FileInput/B03_route_snapshot_crs.md", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b03_fileinput_b03_route_snapshot_crs_b03_\uacc4\ud68d\ub178\uc120_\uc815\ubcf8_\uc88c\ud45c\uacc4_\ud6c4\uc18d", + "target": "pages_b03_fileinput_b03_route_snapshot_crs_las_\uc5c6\ub294_\uc124\uacc4\uc640_\uc5c5\ub85c\ub4dc_\uc0c1\ud0dc", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B03_FileInput/B03_route_snapshot_crs.md", + "source_location": "L12", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b03_fileinput_b03_route_snapshot_crs_b03_\uacc4\ud68d\ub178\uc120_\uc815\ubcf8_\uc88c\ud45c\uacc4_\ud6c4\uc18d", + "target": "pages_b03_fileinput_b03_route_snapshot_crs_\uacc4\ud68d\ub178\uc120_\uc815\ubcf8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B03_FileInput/B03_upload_ui_2026_09.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b03_fileinput_b03_upload_ui_2026_09", + "target": "pages_b03_fileinput_b03_upload_ui_2026_09_b03_\ud30c\uc77c_\uc785\ub825_\ud654\uba74_\uc815\ub9ac", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B03_FileInput/B03_upload_ui_2026_09.md", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b03_fileinput_b03_upload_ui_2026_09_b03_\ud30c\uc77c_\uc785\ub825_\ud654\uba74_\uc815\ub9ac", + "target": "pages_b03_fileinput_b03_upload_ui_2026_09_\uc785\ub825_\uaddc\uce59", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B03_FileInput/B03_upload_ui_2026_09.md", + "source_location": "L12", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b03_fileinput_b03_upload_ui_2026_09_b03_\ud30c\uc77c_\uc785\ub825_\ud654\uba74_\uc815\ub9ac", + "target": "pages_b03_fileinput_b03_upload_ui_2026_09_\ud654\uba74_\uad6c\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B03_FileInput/backend/B03_FileInput_Router.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b03_fileinput_backend_b03_fileinput_router", + "target": "pages_b03_fileinput_backend_b03_fileinput_router_b03_fileinput_router_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B03_FileInput/backend/B03_FileInput_Router.md", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b03_fileinput_backend_b03_fileinput_router_b03_fileinput_router_py", + "target": "pages_b03_fileinput_backend_b03_fileinput_router_\uc5f0\uad00_\uac1c\ub150_\ubc0f_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B03_FileInput/backend/B03_FileInput_Router.md", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b03_fileinput_backend_b03_fileinput_router_b03_fileinput_router_py", + "target": "pages_b03_fileinput_backend_b03_fileinput_router_\uc8fc\uc694_\ud568\uc218_\ubaa9\ub85d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B04_PreProcess/B04_api.md", + "source_location": "L8", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b04_preprocess_b04_api", + "target": "pages_b04_preprocess_b04_api_b04_preprocess_api", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B04_PreProcess/B04_api.md", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b04_preprocess_b04_api_b04_preprocess_api", + "target": "pages_b04_preprocess_b04_api_\uc5d4\ub4dc\ud3ec\uc778\ud2b8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B04_PreProcess/B04_api.md", + "source_location": "L40", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b04_preprocess_b04_api_b04_preprocess_api", + "target": "pages_b04_preprocess_b04_api_\uc694\uccad_\uc751\ub2f5_\uc2a4\ud0a4\ub9c8_pydantic", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B04_PreProcess/B04_backend.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b04_preprocess_b04_backend", + "target": "pages_b04_preprocess_b04_backend_b04_preprocess_backend", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B04_PreProcess/B04_backend.md", + "source_location": "L97", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b04_preprocess_b04_backend_b04_preprocess_backend", + "target": "pages_b04_preprocess_b04_backend_2d_gis_\ubbf8\ud45c\uc2dc_\uc6d0\uc778_\ubd84\uc11d_\ubc0f_\uc870\uce58", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B04_PreProcess/B04_backend.md", + "source_location": "L92", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b04_preprocess_b04_backend_b04_preprocess_backend", + "target": "pages_b04_preprocess_b04_backend_\uad6c\ud604_\uc608\uc678_\ucc98\ub9ac_\uac80\ud1a0_\ud56d\ubaa9_plan", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B04_PreProcess/B04_backend.md", + "source_location": "L82", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b04_preprocess_b04_backend_b04_preprocess_backend", + "target": "pages_b04_preprocess_b04_backend_\uc124\uc815_\ubc0f_\ud658\uacbd_\ud30c\uc77c_\uc815\ud569\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B04_PreProcess/B04_backend.md", + "source_location": "L68", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b04_preprocess_b04_backend_b04_preprocess_backend", + "target": "pages_b04_preprocess_b04_backend_\uc218\uce58\uc9c0\ud615\ub3c4_\ub3c4\uc5fd_\uc624\ubc84\ub808\uc774_\uc544\ud0a4\ud14d\ucc98_2026_07_26_2026_08_01_s8_\uac1c\ud3b8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B04_PreProcess/B04_backend.md", + "source_location": "L27", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b04_preprocess_b04_backend_b04_preprocess_backend", + "target": "pages_b04_preprocess_b04_backend_\uc5d4\uc9c4_\uc11c\ube0c\ubaa8\ub4c8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B04_PreProcess/B04_backend.md", + "source_location": "L75", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b04_preprocess_b04_backend_b04_preprocess_backend", + "target": "pages_b04_preprocess_b04_backend_\uc6cc\ud06c\ud50c\ub85c\uc6b0_\uc0c1\ud0dc_\uc804\uc774_\ubc0f_\uc790\ub3d9_\ud655\uc815", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B04_PreProcess/B04_backend.md", + "source_location": "L45", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b04_preprocess_b04_backend_b04_preprocess_backend", + "target": "pages_b04_preprocess_b04_backend_\uc8fc\uc694_\ud568\uc218_router_repository_engine_utility", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B04_PreProcess/B04_backend.md", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b04_preprocess_b04_backend_b04_preprocess_backend", + "target": "pages_b04_preprocess_b04_backend_\ud30c\uc77c_\uad6c\uc131_\uc624\ucf00\uc2a4\ud2b8\ub808\uc774\ud130_\uc800\uc7a5\uc18c_\ub77c\uc6b0\ud130", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B04_PreProcess/B04_compass_crs_2026_09.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b04_preprocess_b04_compass_crs_2026_09", + "target": "pages_b04_preprocess_b04_compass_crs_2026_09_b04_3d_\ubc29\uc704_\uc88c\ud45c\uacc4_\ucd5c\uc2e0_\uacb0\uc815", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B04_PreProcess/B04_compass_crs_2026_09.md", + "source_location": "L12", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b04_preprocess_b04_compass_crs_2026_09_b04_3d_\ubc29\uc704_\uc88c\ud45c\uacc4_\ucd5c\uc2e0_\uacb0\uc815", + "target": "pages_b04_preprocess_b04_compass_crs_2026_09_3d_\ubc29\uc704_\uc704\uc82f", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B04_PreProcess/B04_compass_crs_2026_09.md", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b04_preprocess_b04_compass_crs_2026_09_b04_3d_\ubc29\uc704_\uc88c\ud45c\uacc4_\ucd5c\uc2e0_\uacb0\uc815", + "target": "pages_b04_preprocess_b04_compass_crs_2026_09_\uc791\uc5c5_\uc88c\ud45c\uacc4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B04_PreProcess/B04_db.md", + "source_location": "L8", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b04_preprocess_b04_db", + "target": "pages_b04_preprocess_b04_db_b04_preprocess_db", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B04_PreProcess/B04_db.md", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b04_preprocess_b04_db_b04_preprocess_db", + "target": "pages_b04_preprocess_b04_db_repository_\ud568\uc218", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B04_PreProcess/B04_db.md", + "source_location": "L12", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b04_preprocess_b04_db_b04_preprocess_db", + "target": "pages_b04_preprocess_b04_db_\uc4f0\ub294_\ud14c\uc774\ube14", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B04_PreProcess/B04_db.md", + "source_location": "L34", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b04_preprocess_b04_db_b04_preprocess_db", + "target": "pages_b04_preprocess_b04_db_\ucc38\uace0", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B04_PreProcess/B04_dependencies.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b04_preprocess_b04_dependencies", + "target": "pages_b04_preprocess_b04_dependencies_b04_preprocess_dependencies", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B04_PreProcess/B04_dependencies.md", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b04_preprocess_b04_dependencies_b04_preprocess_dependencies", + "target": "pages_b04_preprocess_b04_dependencies_\ubc31\uc5d4\ub4dc_python", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B04_PreProcess/B04_dependencies.md", + "source_location": "L26", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b04_preprocess_b04_dependencies_b04_preprocess_dependencies", + "target": "pages_b04_preprocess_b04_dependencies_\ud504\ub860\ud2b8\uc5d4\ub4dc_typescript", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B04_PreProcess/B04_drainage_compass_crs.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b04_preprocess_b04_drainage_compass_crs", + "target": "pages_b04_preprocess_b04_drainage_compass_crs_b04_\uc138\ubd80\uc720\uc5ed_\ubc29\uc704_\uc88c\ud45c\uacc4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B04_PreProcess/B04_drainage_compass_crs.md", + "source_location": "L32", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b04_preprocess_b04_drainage_compass_crs_b04_\uc138\ubd80\uc720\uc5ed_\ubc29\uc704_\uc88c\ud45c\uacc4", + "target": "pages_b04_preprocess_b04_drainage_compass_crs_3d_\ubc29\uc704\uc640_\uc88c\ud45c\uacc4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B04_PreProcess/B04_drainage_compass_crs.md", + "source_location": "L12", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b04_preprocess_b04_drainage_compass_crs_b04_\uc138\ubd80\uc720\uc5ed_\ubc29\uc704_\uc88c\ud45c\uacc4", + "target": "pages_b04_preprocess_b04_drainage_compass_crs_\uc138\ubd80\uc720\uc5ed_\ud615\uc0c1_\ubcf4\uc874", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B04_PreProcess/B04_drainage_compass_crs.md", + "source_location": "L24", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b04_preprocess_b04_drainage_compass_crs_b04_\uc138\ubd80\uc720\uc5ed_\ubc29\uc704_\uc88c\ud45c\uacc4", + "target": "pages_b04_preprocess_b04_drainage_compass_crs_\uc885\ub2e8_\ub192\ub0ae\uc774_\uae30\ubc18_\ubc30\uc815", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B04_PreProcess/B04_frontend.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b04_preprocess_b04_frontend", + "target": "pages_b04_preprocess_b04_frontend_b04_preprocess_frontend", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B04_PreProcess/B04_frontend.md", + "source_location": "L42", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b04_preprocess_b04_frontend_b04_preprocess_frontend", + "target": "pages_b04_preprocess_b04_frontend_3d_\ubdf0\uc5b4_dom_\ub9c8\uc6b4\ud2b8_\ubc84\uadf8_\uc218\ub9ac", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B04_PreProcess/B04_frontend.md", + "source_location": "L46", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b04_preprocess_b04_frontend_b04_preprocess_frontend", + "target": "pages_b04_preprocess_b04_frontend_3d_\ubdf0\uc5b4_\ud14c\ub9c8_\uc5f0\ub3d9_\ubc0f_\uac00\ub3c5\uc131_\uac1c\uc120", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B04_PreProcess/B04_frontend.md", + "source_location": "L73", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b04_preprocess_b04_frontend_b04_preprocess_frontend", + "target": "pages_b04_preprocess_b04_frontend_3d_\uce74\uba54\ub77c_\ucee4\uc11c_\ud53c\ubd07_2d_\uc624\ubc84\ub808\uc774_ui_\uac1c\uc120_2026_08_01_02_\uc77c\uc6d0\ud654", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B04_PreProcess/B04_frontend.md", + "source_location": "L32", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b04_preprocess_b04_frontend_b04_preprocess_frontend", + "target": "pages_b04_preprocess_b04_frontend_\uacc4\ud68d\uc11c\uc640_\uc2e4_\ucf54\ub4dc_\ubd88\uc77c\uce58_3d_\ubdf0\uc5b4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B04_PreProcess/B04_frontend.md", + "source_location": "L82", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b04_preprocess_b04_frontend_b04_preprocess_frontend", + "target": "pages_b04_preprocess_b04_frontend_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B04_PreProcess/B04_frontend.md", + "source_location": "L65", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b04_preprocess_b04_frontend_b04_preprocess_frontend", + "target": "pages_b04_preprocess_b04_frontend_\ucc98\ub9ac_\ud750\ub984", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B04_PreProcess/B04_frontend.md", + "source_location": "L51", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b04_preprocess_b04_frontend_b04_preprocess_frontend", + "target": "pages_b04_preprocess_b04_frontend_\ucef4\ud3ec\ub10c\ud2b8_api_\ud568\uc218", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B04_PreProcess/B04_frontend.md", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b04_preprocess_b04_frontend_b04_preprocess_frontend", + "target": "pages_b04_preprocess_b04_frontend_\ud30c\uc77c_\uad6c\uc870", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B04_PreProcess/backend/B04_PreProcess_Router.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b04_preprocess_backend_b04_preprocess_router", + "target": "pages_b04_preprocess_backend_b04_preprocess_router_b04_preprocess_router_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B04_PreProcess/backend/B04_PreProcess_Router.md", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b04_preprocess_backend_b04_preprocess_router_b04_preprocess_router_py", + "target": "pages_b04_preprocess_backend_b04_preprocess_router_\uc5f0\uad00_\uac1c\ub150_\ubc0f_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B04_PreProcess/backend/B04_PreProcess_Router.md", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b04_preprocess_backend_b04_preprocess_router_b04_preprocess_router_py", + "target": "pages_b04_preprocess_backend_b04_preprocess_router_\uc8fc\uc694_\ud568\uc218_\ubaa9\ub85d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_Profile_plan_2026-08-18.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_profile_plan_2026_08_18", + "target": "pages_b05_profile_b05_profile_plan_2026_08_18_b05_\uad6c\uc870\ubb3c_ui_\ud604\uc7ac_\uacc4\ud68d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_Profile_plan_2026-08-18.md", + "source_location": "L40", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_profile_plan_2026_08_18_b05_\uad6c\uc870\ubb3c_ui_\ud604\uc7ac_\uacc4\ud68d", + "target": "pages_b05_profile_b05_profile_plan_2026_08_18_2026_08_18_b05_\ud398\uc774\uc9c0_\uac1c\uc120_2\ucc28_\uacc4\ud68d_\uae30\ub85d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_Profile_plan_2026-08-18.md", + "source_location": "L29", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_profile_plan_2026_08_18_b05_\uad6c\uc870\ubb3c_ui_\ud604\uc7ac_\uacc4\ud68d", + "target": "pages_b05_profile_b05_profile_plan_2026_08_18_2026_08_18_\uc0ac\uc774\ub4dc_\ud328\ub110_\uc785\ub825_\ub85c\uc9c1_\uacc4\ud68d_\uae30\ub85d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_Profile_plan_2026-08-18.md", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_profile_plan_2026_08_18_b05_\uad6c\uc870\ubb3c_ui_\ud604\uc7ac_\uacc4\ud68d", + "target": "pages_b05_profile_b05_profile_plan_2026_08_18_b05_b06_\uad6c\uc870\ubb3c_\uc801\uc6a9_\ubc94\uc704", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_Profile_plan_2026-08-18.md", + "source_location": "L51", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_profile_plan_2026_08_18_b05_\uad6c\uc870\ubb3c_ui_\ud604\uc7ac_\uacc4\ud68d", + "target": "pages_b05_profile_b05_profile_plan_2026_08_18_\ud6c4\uc18d_\uacb0\uc815_\ub300\uae30", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_Profile_plan_2026-08-19.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_profile_plan_2026_08_19", + "target": "pages_b05_profile_b05_profile_plan_2026_08_19_b05_\uad6c\uc870\ubb3c_\uc785\ub825_\uc885\ub2e8_\ud45c\uc2dc_\uc815\ube44_2026_08_19", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_Profile_plan_2026-08-19.md", + "source_location": "L42", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_profile_plan_2026_08_19_b05_\uad6c\uc870\ubb3c_\uc785\ub825_\uc885\ub2e8_\ud45c\uc2dc_\uc815\ube44_2026_08_19", + "target": "pages_b05_profile_b05_profile_plan_2026_08_19_\uae30\ub85d\ub41c_\uac80\uc99d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_Profile_plan_2026-08-19.md", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_profile_plan_2026_08_19_b05_\uad6c\uc870\ubb3c_\uc785\ub825_\uc885\ub2e8_\ud45c\uc2dc_\uc815\ube44_2026_08_19", + "target": "pages_b05_profile_b05_profile_plan_2026_08_19_\uae30\uc900_\ud574\uc11d_\ubcf4\ub958", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_Profile_plan_2026-08-19.md", + "source_location": "L18", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_profile_plan_2026_08_19_b05_\uad6c\uc870\ubb3c_\uc785\ub825_\uc885\ub2e8_\ud45c\uc2dc_\uc815\ube44_2026_08_19", + "target": "pages_b05_profile_b05_profile_plan_2026_08_19_\uc644\ub8cc_\ubc94\uc704", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_Profile_plan_2026-08-19.md", + "source_location": "L32", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_profile_plan_2026_08_19_b05_\uad6c\uc870\ubb3c_\uc785\ub825_\uc885\ub2e8_\ud45c\uc2dc_\uc815\ube44_2026_08_19", + "target": "pages_b05_profile_b05_profile_plan_2026_08_19_\uc8fc\uc694_\ud56d\ubaa9", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_api.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_api", + "target": "pages_b05_profile_b05_api_b05_profile_api", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_api.md", + "source_location": "L31", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_api_b05_profile_api", + "target": "pages_b05_profile_b05_api_api_\uc2a4\ud0a4\ub9c8_\ubc0f_\ubc18\ud658_\ud544\ub4dc", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_api.md", + "source_location": "L16", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_api_b05_profile_api", + "target": "pages_b05_profile_b05_api_\uc5d4\ub4dc\ud3ec\uc778\ud2b8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_api.md", + "source_location": "L33", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_api_api_\uc2a4\ud0a4\ub9c8_\ubc0f_\ubc18\ud658_\ud544\ub4dc", + "target": "pages_b05_profile_b05_api_post_project_id_route_confirm_\uc694\uccad_routeconfirmrequest", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_backend.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_backend", + "target": "pages_b05_profile_b05_backend_b05_profile_backend", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_backend.md", + "source_location": "L16", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_backend_b05_profile_backend", + "target": "pages_b05_profile_b05_backend_\uc18c\uc2a4\ucf54\ub4dc_1_1_\uc138\ubd84\ud654_\uc704\ud0a4_\ud30c\uc77c_\ubaa9\ub85d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_backend.md", + "source_location": "L33", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_backend_b05_profile_backend", + "target": "pages_b05_profile_b05_backend_\ud575\uc2ec_\ubc31\uc5d4\ub4dc_\uc544\ud0a4\ud14d\ucc98_\uac1c\uc694", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_completed_followups.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_completed_followups", + "target": "pages_b05_profile_b05_completed_followups_b05_\ud6c4\uc18d_\uc644\ub8cc_\ud56d\ubaa9", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_corridor_cut_fill.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_corridor_cut_fill", + "target": "pages_b05_profile_b05_corridor_cut_fill_b05_\uad6c\uc870\ubb3c_\uad6c\uac04_\uc808\ucde8_\uce21\ubcbd_\uc131\ud1a0_\ud328\uce58", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_corridor_cut_fill.md", + "source_location": "L26", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_corridor_cut_fill_b05_\uad6c\uc870\ubb3c_\uad6c\uac04_\uc808\ucde8_\uce21\ubcbd_\uc131\ud1a0_\ud328\uce58", + "target": "pages_b05_profile_b05_corridor_cut_fill_b06_\ubcc0\ud615_\uc131\ud1a0\uc120_\ud328\uce58", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_corridor_cut_fill.md", + "source_location": "L39", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_corridor_cut_fill_b05_\uad6c\uc870\ubb3c_\uad6c\uac04_\uc808\ucde8_\uce21\ubcbd_\uc131\ud1a0_\ud328\uce58", + "target": "pages_b05_profile_b05_corridor_cut_fill_\uc800\uc7a5_\uac80\uc99d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_corridor_cut_fill.md", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_corridor_cut_fill_b05_\uad6c\uc870\ubb3c_\uad6c\uac04_\uc808\ucde8_\uce21\ubcbd_\uc131\ud1a0_\ud328\uce58", + "target": "pages_b05_profile_b05_corridor_cut_fill_\uc808\ucde8\uc640_\uacbd\uacc4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_corridor_followup_decisions.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_corridor_followup_decisions", + "target": "pages_b05_profile_b05_corridor_followup_decisions_b05_\uad6c\uc870\ubb3c_3d_\ud6c4\uc18d_\ud310\uc815", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_corridor_patch_finish.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_corridor_patch_finish", + "target": "pages_b05_profile_b05_corridor_patch_finish_b05_\ubcc0\ud615_\uc131\ud1a0\uba74_\ub9c8\uac10_\ub0a0\uac1c_\ud328\uce58", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_corridor_patch_finish.md", + "source_location": "L25", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_corridor_patch_finish_b05_\ubcc0\ud615_\uc131\ud1a0\uba74_\ub9c8\uac10_\ub0a0\uac1c_\ud328\uce58", + "target": "pages_b05_profile_b05_corridor_patch_finish_\uc138\uc6d4\uad50_\ub0a0\uac1c_\ud328\uce58", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_corridor_patch_finish.md", + "source_location": "L36", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_corridor_patch_finish_b05_\ubcc0\ud615_\uc131\ud1a0\uba74_\ub9c8\uac10_\ub0a0\uac1c_\ud328\uce58", + "target": "pages_b05_profile_b05_corridor_patch_finish_\uc800\uc7a5_\uac80\uc99d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_corridor_patch_finish.md", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_corridor_patch_finish_b05_\ubcc0\ud615_\uc131\ud1a0\uba74_\ub9c8\uac10_\ub0a0\uac1c_\ud328\uce58", + "target": "pages_b05_profile_b05_corridor_patch_finish_\ud328\uce58_\ub9c8\uac10", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_corridor_plan_curves.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_corridor_plan_curves", + "target": "pages_b05_profile_b05_corridor_plan_curves_b05_\uad6c\uc870\ubb3c_3d_\ud22c\uc601_\ucee4\ube0c", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_corridor_plan_curves.md", + "source_location": "L61", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_corridor_plan_curves_b05_\uad6c\uc870\ubb3c_3d_\ud22c\uc601_\ucee4\ube0c", + "target": "pages_b05_profile_b05_corridor_plan_curves_\uac80\uc99d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_corridor_plan_curves.md", + "source_location": "L42", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_corridor_plan_curves_b05_\uad6c\uc870\ubb3c_3d_\ud22c\uc601_\ucee4\ube0c", + "target": "pages_b05_profile_b05_corridor_plan_curves_\uad6c\uc870\ubb3c_\ub0a0\uac1c_\ubc14\ub2e5_\uc5f0\uacb0", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_corridor_plan_curves.md", + "source_location": "L28", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_corridor_plan_curves_b05_\uad6c\uc870\ubb3c_3d_\ud22c\uc601_\ucee4\ube0c", + "target": "pages_b05_profile_b05_corridor_plan_curves_\ube44\ud0c8_\ud22c\uc601_\uc131\ud1a0\uba74_\uc808\ub2e8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_corridor_plan_curves.md", + "source_location": "L52", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_corridor_plan_curves_b05_\uad6c\uc870\ubb3c_3d_\ud22c\uc601_\ucee4\ube0c", + "target": "pages_b05_profile_b05_corridor_plan_curves_\uc800\uc7a5_\ud638\ud658\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_corridor_plan_curves.md", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_corridor_plan_curves_b05_\uad6c\uc870\ubb3c_3d_\ud22c\uc601_\ucee4\ube0c", + "target": "pages_b05_profile_b05_corridor_plan_curves_\ucee4\ube0c_\uc0dd\uc131_\ub80c\ub354", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_corridor_surface.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_corridor_surface", + "target": "pages_b05_profile_b05_corridor_surface_b05_\uacc4\ud68d\ub178\uc120_\ucf54\ub9ac\ub3c4_\uc0bc\uac01\ub9dd_\uc11c\ud53c\uc2a4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_corridor_surface.md", + "source_location": "L46", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_corridor_surface_b05_\uacc4\ud68d\ub178\uc120_\ucf54\ub9ac\ub3c4_\uc0bc\uac01\ub9dd_\uc11c\ud53c\uc2a4", + "target": "pages_b05_profile_b05_corridor_surface_\uac80\uc99d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_corridor_surface.md", + "source_location": "L30", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_corridor_surface_b05_\uacc4\ud68d\ub178\uc120_\ucf54\ub9ac\ub3c4_\uc0bc\uac01\ub9dd_\uc11c\ud53c\uc2a4", + "target": "pages_b05_profile_b05_corridor_surface_\uc800\uc7a5_\ud638\ud658\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_corridor_surface.md", + "source_location": "L42", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_corridor_surface_b05_\uacc4\ud68d\ub178\uc120_\ucf54\ub9ac\ub3c4_\uc0bc\uac01\ub9dd_\uc11c\ud53c\uc2a4", + "target": "pages_b05_profile_b05_corridor_surface_\uc9c4\ud589_\uc911_\uacc4\ud68d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_corridor_surface.md", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_corridor_surface_b05_\uacc4\ud68d\ub178\uc120_\ucf54\ub9ac\ub3c4_\uc0bc\uac01\ub9dd_\uc11c\ud53c\uc2a4", + "target": "pages_b05_profile_b05_corridor_surface_\ud504\ub860\ud2b8\uc5d4\ub4dc_\uad6c\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_corridor_turn_correction_plan.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_corridor_turn_correction_plan", + "target": "pages_b05_profile_b05_corridor_turn_correction_plan_b05_\uae09\uc120\ud68c_3d_\uad6d\ubd80_\ubcf4\uc815_\uacc4\ud68d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_corridor_turn_correction_plan.md", + "source_location": "L29", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_corridor_turn_correction_plan_b05_\uae09\uc120\ud68c_3d_\uad6d\ubd80_\ubcf4\uc815_\uacc4\ud68d", + "target": "pages_b05_profile_b05_corridor_turn_correction_plan_\uad6c\uc870\ubb3c_\uc5f0\ub3d9", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_corridor_turn_correction_plan.md", + "source_location": "L18", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_corridor_turn_correction_plan_b05_\uae09\uc120\ud68c_3d_\uad6d\ubd80_\ubcf4\uc815_\uacc4\ud68d", + "target": "pages_b05_profile_b05_corridor_turn_correction_plan_\uad6d\ubd80_\ud328\uce58_\uc808\ucc28", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_corridor_turn_correction_plan.md", + "source_location": "L12", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_corridor_turn_correction_plan_b05_\uae09\uc120\ud68c_3d_\uad6d\ubd80_\ubcf4\uc815_\uacc4\ud68d", + "target": "pages_b05_profile_b05_corridor_turn_correction_plan_\ubaa9\uc801\uacfc_\uacbd\uacc4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_corridor_turn_correction_plan.md", + "source_location": "L48", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_corridor_turn_correction_plan_b05_\uae09\uc120\ud68c_3d_\uad6d\ubd80_\ubcf4\uc815_\uacc4\ud68d", + "target": "pages_b05_profile_b05_corridor_turn_correction_plan_\uc644\ub8cc_\uc870\uac74", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_corridor_turn_correction_plan.md", + "source_location": "L37", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_corridor_turn_correction_plan_b05_\uae09\uc120\ud68c_3d_\uad6d\ubd80_\ubcf4\uc815_\uacc4\ud68d", + "target": "pages_b05_profile_b05_corridor_turn_correction_plan_\ud655\uc778\ub41c_\ub178\uacac_\ud655\uc7a5_\ud68c\uadc0", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_db.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_db", + "target": "pages_b05_profile_b05_db_b05_profile_db_\uc0ac\uc6a9_\uad00\uacc4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_db.md", + "source_location": "L22", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_db_b05_profile_db_\uc0ac\uc6a9_\uad00\uacc4", + "target": "pages_b05_profile_b05_db_repository_\ud568\uc218", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_db.md", + "source_location": "L33", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_db_b05_profile_db_\uc0ac\uc6a9_\uad00\uacc4", + "target": "pages_b05_profile_b05_db_\uc800\uc7a5_\uacbd\ub85c", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_dependencies.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_dependencies", + "target": "pages_b05_profile_b05_dependencies_b05_profile_dependencies", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_dependencies.md", + "source_location": "L24", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_dependencies_b05_profile_dependencies", + "target": "pages_b05_profile_b05_dependencies_\ud398\uc774\uc9c0_\ud30c\uc77c\ubcc4_\uc5f0\uacb0", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_frontend.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_frontend", + "target": "pages_b05_profile_b05_frontend_b05_profile_frontend", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_frontend.md", + "source_location": "L62", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_frontend_b05_profile_frontend", + "target": "pages_b05_profile_b05_frontend_\ub0a8\uc740_\ud30c\uc77c_\ud55c\uacc4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_frontend.md", + "source_location": "L18", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_frontend_b05_profile_frontend", + "target": "pages_b05_profile_b05_frontend_\uc18c\uc2a4\ucf54\ub4dc_1_1_\uc138\ubd84\ud654_\uc704\ud0a4_\ud30c\uc77c_\ubaa9\ub85d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_frontend.md", + "source_location": "L70", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_frontend_b05_profile_frontend", + "target": "pages_b05_profile_b05_frontend_\uc885\ub2e8_\ud3b8\uc9d1_\uc548\uc804\uc7a5\uce58", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_frontend.md", + "source_location": "L66", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_frontend_b05_profile_frontend", + "target": "pages_b05_profile_b05_frontend_\uc885\ub2e8\ud14c\uc774\ube14_\ud45c\uc2dc_\ubcf4\uc815", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_frontend.md", + "source_location": "L45", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_frontend_b05_profile_frontend", + "target": "pages_b05_profile_b05_frontend_\ud575\uc2ec_\ud504\ub860\ud2b8\uc5d4\ub4dc_\uc544\ud0a4\ud14d\ucc98_\uac1c\uc694", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_frontend_alignment.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_frontend_alignment", + "target": "pages_b05_profile_b05_frontend_alignment_b05_profile_profile_alignment_table", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_frontend_alignment.md", + "source_location": "L22", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_frontend_alignment_b05_profile_profile_alignment_table", + "target": "pages_b05_profile_b05_frontend_alignment_12\ud589_\ub3c4\uba74_\ud14c\uc774\ube14_\ubc0f_\uac00\ub85c_\uc2a4\ud06c\ub864_\uc815\ub82c_\uac1c\ud3b8_ui_profile_table_ts_ui_profile_panel_ts", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_frontend_alignment.md", + "source_location": "L42", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_frontend_alignment_b05_profile_profile_alignment_table", + "target": "pages_b05_profile_b05_frontend_alignment_\ube44\uc815\uaddc_\uce21\uc810_\uad6c\uc870\ubb3c_\ud14c\uc774\ube14_\uc624\ubc84\ub808\uc774_\ub7f0\ud0c0\uc784_\uac80\uc99d_ui_profile_table_ts_ui_irregularstations_ts", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_frontend_alignment.md", + "source_location": "L12", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_frontend_alignment_b05_profile_profile_alignment_table", + "target": "pages_b05_profile_b05_frontend_alignment_\uc885\ub2e8_\uacc4\ud68d\uace0_\ud3b8\uc9d1_\uc778\ud130\ub799\uc158_ui_profile_edit_ts_ui_profile_panel_ts_ui_page_ts", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_frontend_viewer.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_frontend_viewer", + "target": "pages_b05_profile_b05_frontend_viewer_b05_profile_3d_viewer_interaction", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_frontend_viewer.md", + "source_location": "L19", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_frontend_viewer_b05_profile_3d_viewer_interaction", + "target": "pages_b05_profile_b05_frontend_viewer_3d_\ub9c8\ucee4_\uc9c1\uc811_\ub4dc\ub798\uadf8_\uc774\ub3d9_0_old_i_401_\uc774\uc2dd", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_frontend_viewer.md", + "source_location": "L12", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_frontend_viewer_b05_profile_3d_viewer_interaction", + "target": "pages_b05_profile_b05_frontend_viewer_3d_\uc9c0\ud615_\ubdf0\ud3ec\ud2b8_\uc2dc\uac01\ud654_ui_viewer_ts_ui_markers_ts", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_masshaul_structure_2026_09.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_masshaul_structure_2026_09", + "target": "pages_b05_profile_b05_masshaul_structure_2026_09_b05_\uc720\ud1a0\uace1\uc120_\uad6c\uc870\ubb3c_\ud6c4\uc18d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_masshaul_structure_2026_09.md", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_masshaul_structure_2026_09_b05_\uc720\ud1a0\uace1\uc120_\uad6c\uc870\ubb3c_\ud6c4\uc18d", + "target": "pages_b05_profile_b05_masshaul_structure_2026_09_\uc720\uc9c0_\ud310\uc815_\uc0ac\ud56d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_masshaul_structure_2026_09.md", + "source_location": "L12", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_masshaul_structure_2026_09_b05_\uc720\ud1a0\uace1\uc120_\uad6c\uc870\ubb3c_\ud6c4\uc18d", + "target": "pages_b05_profile_b05_masshaul_structure_2026_09_\uc720\ud1a0\uace1\uc120_\uacf5\uc6a9\ud654", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_profile_interaction_2026_09.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_profile_interaction_2026_09", + "target": "pages_b05_profile_b05_profile_interaction_2026_09_b05_\uc885\ub2e8\uace1\uc120_\uc2e4\uc2dc\uac04_\ud6a1\ub2e8_\uc5f0\ub3d9", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_profile_interaction_2026_09.md", + "source_location": "L24", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_profile_interaction_2026_09_b05_\uc885\ub2e8\uace1\uc120_\uc2e4\uc2dc\uac04_\ud6a1\ub2e8_\uc5f0\ub3d9", + "target": "pages_b05_profile_b05_profile_interaction_2026_09_\uc2e4\uc2dc\uac04_\ud6a1\ub2e8_\uc720\ud1a0\uace1\uc120", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_profile_interaction_2026_09.md", + "source_location": "L12", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_profile_interaction_2026_09_b05_\uc885\ub2e8\uace1\uc120_\uc2e4\uc2dc\uac04_\ud6a1\ub2e8_\uc5f0\ub3d9", + "target": "pages_b05_profile_b05_profile_interaction_2026_09_\ucd08\uae30_\uc885\ub2e8\uace1\uc120", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_structure_stations.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_structure_stations", + "target": "pages_b05_profile_b05_structure_stations_b05_\uad6c\uc870\ubb3c_\ube44\uc815\uaddc_\uce21\uc810_\uacf5\uae09", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_structure_stations.md", + "source_location": "L34", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_structure_stations_b05_\uad6c\uc870\ubb3c_\ube44\uc815\uaddc_\uce21\uc810_\uacf5\uae09", + "target": "pages_b05_profile_b05_structure_stations_\uac80\uc99d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_structure_stations.md", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_structure_stations_b05_\uad6c\uc870\ubb3c_\ube44\uc815\uaddc_\uce21\uc810_\uacf5\uae09", + "target": "pages_b05_profile_b05_structure_stations_\uacf5\uae09_\uacbd\ub85c", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_structure_stations.md", + "source_location": "L24", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_structure_stations_b05_\uad6c\uc870\ubb3c_\ube44\uc815\uaddc_\uce21\uc810_\uacf5\uae09", + "target": "pages_b05_profile_b05_structure_stations_\uc815\ubcf8_\uaddc\uce59", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_structures.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_structures", + "target": "pages_b05_profile_b05_structures_b05_\uad6c\uc870\ubb3c_\uc815\ubcf8_\ud1b5\ud569_\ud3b8\uc9d1", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_structures.md", + "source_location": "L67", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_structures_b05_\uad6c\uc870\ubb3c_\uc815\ubcf8_\ud1b5\ud569_\ud3b8\uc9d1", + "target": "pages_b05_profile_b05_structures_api", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_structures.md", + "source_location": "L75", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_structures_b05_\uad6c\uc870\ubb3c_\uc815\ubcf8_\ud1b5\ud569_\ud3b8\uc9d1", + "target": "pages_b05_profile_b05_structures_b06_\uacbd\uacc4\uc640_\ub0a8\uc740_\ubc94\uc704", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_structures.md", + "source_location": "L81", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_structures_b05_\uad6c\uc870\ubb3c_\uc815\ubcf8_\ud1b5\ud569_\ud3b8\uc9d1", + "target": "pages_b05_profile_b05_structures_\uac80\uc99d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_structures.md", + "source_location": "L24", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_structures_b05_\uad6c\uc870\ubb3c_\uc815\ubcf8_\ud1b5\ud569_\ud3b8\uc9d1", + "target": "pages_b05_profile_b05_structures_\ubc30\uc218\uad00_\uc2dc\uc124_\uc635\uc158", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_structures.md", + "source_location": "L35", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_structures_b05_\uad6c\uc870\ubb3c_\uc815\ubcf8_\ud1b5\ud569_\ud3b8\uc9d1", + "target": "pages_b05_profile_b05_structures_\ubc31\uc5d4\ub4dc_\ud30c\uc77c", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_structures.md", + "source_location": "L57", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_structures_b05_\uad6c\uc870\ubb3c_\uc815\ubcf8_\ud1b5\ud569_\ud3b8\uc9d1", + "target": "pages_b05_profile_b05_structures_\uc720\uc5ed_\ucd94\ucc9c_\uac1c\ub7b5_\ub2e8\uba74", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_structures.md", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_structures_b05_\uad6c\uc870\ubb3c_\uc815\ubcf8_\ud1b5\ud569_\ud3b8\uc9d1", + "target": "pages_b05_profile_b05_structures_\uc815\ubcf8\uacfc_\ud0c0\uc785_\ub808\uc9c0\uc2a4\ud2b8\ub9ac", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/B05_structures.md", + "source_location": "L44", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_b05_structures_b05_\uad6c\uc870\ubb3c_\uc815\ubcf8_\ud1b5\ud569_\ud3b8\uc9d1", + "target": "pages_b05_profile_b05_structures_\ud504\ub860\ud2b8\uc5d4\ub4dc_\ud30c\uc77c\uacfc_\ub3d9\uc791", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/backend/B05_Profile_Engine_Grade.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_backend_b05_profile_engine_grade", + "target": "pages_b05_profile_backend_b05_profile_engine_grade_b05_profile_engine_grade_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/backend/B05_Profile_Engine_Grade.md", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_backend_b05_profile_engine_grade_b05_profile_engine_grade_py", + "target": "pages_b05_profile_backend_b05_profile_engine_grade_\uc5f0\uad00_\uac1c\ub150_\ubc0f_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/backend/B05_Profile_Engine_Grade.md", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_backend_b05_profile_engine_grade_b05_profile_engine_grade_py", + "target": "pages_b05_profile_backend_b05_profile_engine_grade_\uc8fc\uc694_\ud074\ub798\uc2a4_\ubc0f_\ud568\uc218_\ubaa9\ub85d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/backend/B05_Profile_Engine_Sections.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_backend_b05_profile_engine_sections", + "target": "pages_b05_profile_backend_b05_profile_engine_sections_b05_profile_engine_sections_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/backend/B05_Profile_Engine_Sections.md", + "source_location": "L24", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_backend_b05_profile_engine_sections_b05_profile_engine_sections_py", + "target": "pages_b05_profile_backend_b05_profile_engine_sections_\ub7f0\ud0c0\uc784_\uac80\uc99d_\uc8fc\uc758\uc0ac\ud56d_2026_07_24_\uac80\uc99d_\ubcf4\uace0\uc11c_\uae30\uc900", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/backend/B05_Profile_Engine_Sections.md", + "source_location": "L28", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_backend_b05_profile_engine_sections_b05_profile_engine_sections_py", + "target": "pages_b05_profile_backend_b05_profile_engine_sections_\uc5f0\uad00_\uac1c\ub150_\ubc0f_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/backend/B05_Profile_Engine_Sections.md", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_backend_b05_profile_engine_sections_b05_profile_engine_sections_py", + "target": "pages_b05_profile_backend_b05_profile_engine_sections_\uc8fc\uc694_\ud568\uc218_\ubaa9\ub85d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/backend/B05_Profile_Engine_Solver.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_backend_b05_profile_engine_solver", + "target": "pages_b05_profile_backend_b05_profile_engine_solver_b05_profile_engine_solver_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/backend/B05_Profile_Engine_Solver.md", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_backend_b05_profile_engine_solver_b05_profile_engine_solver_py", + "target": "pages_b05_profile_backend_b05_profile_engine_solver_\uc5d4\uc9c4_\ud575\uc2ec_\ud568\uc218_\ubaa9\ub85d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/backend/B05_Profile_Engine_Solver.md", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_backend_b05_profile_engine_solver_b05_profile_engine_solver_py", + "target": "pages_b05_profile_backend_b05_profile_engine_solver_\uc5f0\uad00_\uac1c\ub150_\ubc0f_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/backend/B05_Profile_Repository.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_backend_b05_profile_repository", + "target": "pages_b05_profile_backend_b05_profile_repository_b05_profile_repository_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/backend/B05_Profile_Repository.md", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_backend_b05_profile_repository_b05_profile_repository_py", + "target": "pages_b05_profile_backend_b05_profile_repository_db_\uc811\uadfc_\ud568\uc218_\ubaa9\ub85d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/backend/B05_Profile_Repository.md", + "source_location": "L27", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_backend_b05_profile_repository_b05_profile_repository_py", + "target": "pages_b05_profile_backend_b05_profile_repository_\uc5f0\uad00_\uac1c\ub150_\ubc0f_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/backend/B05_Profile_Router.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_backend_b05_profile_router", + "target": "pages_b05_profile_backend_b05_profile_router_b05_profile_router_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/backend/B05_Profile_Router.md", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_backend_b05_profile_router_b05_profile_router_py", + "target": "pages_b05_profile_backend_b05_profile_router_\ub77c\uc6b0\ud130_api_\ubc0f_\uc8fc\uc694_\ud568\uc218_\ubaa9\ub85d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/backend/B05_Profile_Router.md", + "source_location": "L24", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_backend_b05_profile_router_b05_profile_router_py", + "target": "pages_b05_profile_backend_b05_profile_router_\uc5f0\uad00_\ubaa8\ub4c8_\ubc0f_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/backend/B05_Profile_Router_Confirm.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_backend_b05_profile_router_confirm", + "target": "pages_b05_profile_backend_b05_profile_router_confirm_b05_profile_router_confirm_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/backend/B05_Profile_Router_Confirm.md", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_backend_b05_profile_router_confirm_b05_profile_router_confirm_py", + "target": "pages_b05_profile_backend_b05_profile_router_confirm_\uc5f0\uad00_\ubaa8\ub4c8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/backend/B05_Profile_Router_Confirm.md", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_backend_b05_profile_router_confirm_b05_profile_router_confirm_py", + "target": "pages_b05_profile_backend_b05_profile_router_confirm_\uc8fc\uc694_\ud5ec\ud37c_\ud568\uc218_\ubaa9\ub85d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/backend/B05_Profile_Schema.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_backend_b05_profile_schema", + "target": "pages_b05_profile_backend_b05_profile_schema_b05_profile_schema_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/backend/B05_Profile_Schema.md", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_backend_b05_profile_schema_b05_profile_schema_py", + "target": "pages_b05_profile_backend_b05_profile_schema_pydantic_\ubaa8\ub378_\ubc0f_\uac80\uc99d_\ud5ec\ud37c_\ubaa9\ub85d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/backend/B05_Profile_Schema.md", + "source_location": "L29", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_backend_b05_profile_schema_b05_profile_schema_py", + "target": "pages_b05_profile_backend_b05_profile_schema_\uc5f0\uad00_\uac1c\ub150_\ubc0f_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/frontend/B05_Profile_Api_Fetch.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_frontend_b05_profile_api_fetch", + "target": "pages_b05_profile_frontend_b05_profile_api_fetch_b05_profile_api_fetch_ts", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/frontend/B05_Profile_Api_Fetch.md", + "source_location": "L24", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_frontend_b05_profile_api_fetch_b05_profile_api_fetch_ts", + "target": "pages_b05_profile_frontend_b05_profile_api_fetch_\uc5f0\uad00_\uac1c\ub150_\ubc0f_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/frontend/B05_Profile_Api_Fetch.md", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_frontend_b05_profile_api_fetch_b05_profile_api_fetch_ts", + "target": "pages_b05_profile_frontend_b05_profile_api_fetch_\uc8fc\uc694_api_\ud568\uc218_\ubaa9\ub85d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_Drainage_Panel.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_frontend_b05_profile_ui_drainage_panel", + "target": "pages_b05_profile_frontend_b05_profile_ui_drainage_panel_b05_profile_ui_drainage_panel", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_Drainage_Panel.md", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_frontend_b05_profile_ui_drainage_panel_b05_profile_ui_drainage_panel", + "target": "pages_b05_profile_frontend_b05_profile_ui_drainage_panel_\uac1c\uc694_\ubc0f_\ud2b9\uc9d5", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_Drainage_Panel.md", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_frontend_b05_profile_ui_drainage_panel_b05_profile_ui_drainage_panel", + "target": "pages_b05_profile_frontend_b05_profile_ui_drainage_panel_\uc8fc\uc694_\ud568\uc218_\uc2ec\ubcfc_\ubaa9\ub85d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_Drainage_Parts.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_frontend_b05_profile_ui_drainage_parts", + "target": "pages_b05_profile_frontend_b05_profile_ui_drainage_parts_b05_profile_ui_drainage_parts_\ubc30\uc218\uc720\uc5ed_\uacf5\uc6a9_ui_\ud30c\uce20", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_Drainage_Parts.md", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_frontend_b05_profile_ui_drainage_parts_b05_profile_ui_drainage_parts_\ubc30\uc218\uc720\uc5ed_\uacf5\uc6a9_ui_\ud30c\uce20", + "target": "pages_b05_profile_frontend_b05_profile_ui_drainage_parts_1_\uac1c\uc694_\ubc0f_\uc5ed\ud560", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_Drainage_Parts.md", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_frontend_b05_profile_ui_drainage_parts_b05_profile_ui_drainage_parts_\ubc30\uc218\uc720\uc5ed_\uacf5\uc6a9_ui_\ud30c\uce20", + "target": "pages_b05_profile_frontend_b05_profile_ui_drainage_parts_2_\uc8fc\uc694_\uae30\ub2a5_\ubc0f_\ud568\uc218", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_Drainage_Parts.md", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_frontend_b05_profile_ui_drainage_parts_b05_profile_ui_drainage_parts_\ubc30\uc218\uc720\uc5ed_\uacf5\uc6a9_ui_\ud30c\uce20", + "target": "pages_b05_profile_frontend_b05_profile_ui_drainage_parts_3_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_Drainage_Pipes.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_frontend_b05_profile_ui_drainage_pipes", + "target": "pages_b05_profile_frontend_b05_profile_ui_drainage_pipes_b05_profile_ui_drainage_pipes", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_Drainage_Pipes.md", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_frontend_b05_profile_ui_drainage_pipes_b05_profile_ui_drainage_pipes", + "target": "pages_b05_profile_frontend_b05_profile_ui_drainage_pipes_\uac1c\uc694_\ubc0f_\ud2b9\uc9d5", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_Drainage_Pipes.md", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_frontend_b05_profile_ui_drainage_pipes_b05_profile_ui_drainage_pipes", + "target": "pages_b05_profile_frontend_b05_profile_ui_drainage_pipes_\uc8fc\uc694_\ud568\uc218_\uc2ec\ubcfc_\ubaa9\ub85d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_IrregularStations.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_frontend_b05_profile_ui_irregularstations", + "target": "pages_b05_profile_frontend_b05_profile_ui_irregularstations_b05_profile_ui_irregularstations_ts", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_IrregularStations.md", + "source_location": "L24", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_frontend_b05_profile_ui_irregularstations_b05_profile_ui_irregularstations_ts", + "target": "pages_b05_profile_frontend_b05_profile_ui_irregularstations_\uc5f0\uad00_\uac1c\ub150_\ubc0f_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_IrregularStations.md", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_frontend_b05_profile_ui_irregularstations_b05_profile_ui_irregularstations_ts", + "target": "pages_b05_profile_frontend_b05_profile_ui_irregularstations_\uc8fc\uc694_\uc778\ud130\ud398\uc774\uc2a4_\ubc0f_\ud568\uc218_\ubaa9\ub85d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_Page.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_frontend_b05_profile_ui_page", + "target": "pages_b05_profile_frontend_b05_profile_ui_page_b05_profile_ui_page_ts", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_Page.md", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_frontend_b05_profile_ui_page_b05_profile_ui_page_ts", + "target": "pages_b05_profile_frontend_b05_profile_ui_page_\uc5f0\uad00_\uac1c\ub150_\ubc0f_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_Page.md", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_frontend_b05_profile_ui_page_b05_profile_ui_page_ts", + "target": "pages_b05_profile_frontend_b05_profile_ui_page_\uc8fc\uc694_\ucef4\ud3ec\ub10c\ud2b8_\ubc0f_\ud568\uc218_\ubaa9\ub85d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_Panel.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_frontend_b05_profile_ui_panel", + "target": "pages_b05_profile_frontend_b05_profile_ui_panel_b05_profile_ui_panel_ts", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_Panel.md", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_frontend_b05_profile_ui_panel_b05_profile_ui_panel_ts", + "target": "pages_b05_profile_frontend_b05_profile_ui_panel_\uc5f0\uad00_\uac1c\ub150_\ubc0f_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_Panel.md", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_frontend_b05_profile_ui_panel_b05_profile_ui_panel_ts", + "target": "pages_b05_profile_frontend_b05_profile_ui_panel_\uc8fc\uc694_\ud568\uc218_\ubaa9\ub85d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_Profile_Alignment.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_frontend_b05_profile_ui_profile_alignment", + "target": "pages_b05_profile_frontend_b05_profile_ui_profile_alignment_b05_profile_ui_profile_alignment_ts", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_Profile_Alignment.md", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_frontend_b05_profile_ui_profile_alignment_b05_profile_ui_profile_alignment_ts", + "target": "pages_b05_profile_frontend_b05_profile_ui_profile_alignment_\uc5f0\uad00_\uac1c\ub150_\ubc0f_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_Profile_Alignment.md", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_frontend_b05_profile_ui_profile_alignment_b05_profile_ui_profile_alignment_ts", + "target": "pages_b05_profile_frontend_b05_profile_ui_profile_alignment_\uc8fc\uc694_\ud568\uc218_\ubaa9\ub85d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_Profile_Panel.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_frontend_b05_profile_ui_profile_panel", + "target": "pages_b05_profile_frontend_b05_profile_ui_profile_panel_b05_profile_ui_profile_panel_ts", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_Profile_Panel.md", + "source_location": "L29", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_frontend_b05_profile_ui_profile_panel_b05_profile_ui_profile_panel_ts", + "target": "pages_b05_profile_frontend_b05_profile_ui_profile_panel_\uc5f0\uad00_\uac1c\ub150_\ubc0f_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_Profile_Panel.md", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_frontend_b05_profile_ui_profile_panel_b05_profile_ui_profile_panel_ts", + "target": "pages_b05_profile_frontend_b05_profile_ui_profile_panel_\uc8fc\uc694_\uae30\ub2a5_\ubc0f_\uac1c\uc120\uc0ac\ud56d_2026_08_06", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_Profile_Panel.md", + "source_location": "L22", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_frontend_b05_profile_ui_profile_panel_b05_profile_ui_profile_panel_ts", + "target": "pages_b05_profile_frontend_b05_profile_ui_profile_panel_\uc8fc\uc694_\ud568\uc218_\ubaa9\ub85d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_Profile_Table.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_frontend_b05_profile_ui_profile_table", + "target": "pages_b05_profile_frontend_b05_profile_ui_profile_table_b05_profile_ui_profile_table_ts", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_Profile_Table.md", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_frontend_b05_profile_ui_profile_table_b05_profile_ui_profile_table_ts", + "target": "pages_b05_profile_frontend_b05_profile_ui_profile_table_\uc5f0\uad00_\uac1c\ub150_\ubc0f_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_Profile_Table.md", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_frontend_b05_profile_ui_profile_table_b05_profile_ui_profile_table_ts", + "target": "pages_b05_profile_frontend_b05_profile_ui_profile_table_\uc8fc\uc694_\ud568\uc218_\ubaa9\ub85d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_Viewer.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_frontend_b05_profile_ui_viewer", + "target": "pages_b05_profile_frontend_b05_profile_ui_viewer_b05_profile_ui_viewer_ts", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_Viewer.md", + "source_location": "L20", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_frontend_b05_profile_ui_viewer_b05_profile_ui_viewer_ts", + "target": "pages_b05_profile_frontend_b05_profile_ui_viewer_\uc5f0\uad00_\uac1c\ub150_\ubc0f_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/frontend/B05_Profile_UI_Viewer.md", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_frontend_b05_profile_ui_viewer_b05_profile_ui_viewer_ts", + "target": "pages_b05_profile_frontend_b05_profile_ui_viewer_\uc8fc\uc694_\ud568\uc218_\ubaa9\ub85d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/frontend/_UI_Drainage_Render.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_frontend_ui_drainage_render", + "target": "pages_b05_profile_frontend_ui_drainage_render_ui_drainage_render_\ubc30\uc218\uc720\uc5ed\ub3c4_canvas_\ub80c\ub354\ub7ec", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/frontend/_UI_Drainage_Render.md", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_frontend_ui_drainage_render_ui_drainage_render_\ubc30\uc218\uc720\uc5ed\ub3c4_canvas_\ub80c\ub354\ub7ec", + "target": "pages_b05_profile_frontend_ui_drainage_render_1_\uac1c\uc694_\ubc0f_\uc5ed\ud560", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/frontend/_UI_Drainage_Render.md", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_frontend_ui_drainage_render_ui_drainage_render_\ubc30\uc218\uc720\uc5ed\ub3c4_canvas_\ub80c\ub354\ub7ec", + "target": "pages_b05_profile_frontend_ui_drainage_render_2_\uc8fc\uc694_\uae30\ub2a5_\ubc0f_\ud568\uc218", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/frontend/_UI_Drainage_Render.md", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_frontend_ui_drainage_render_ui_drainage_render_\ubc30\uc218\uc720\uc5ed\ub3c4_canvas_\ub80c\ub354\ub7ec", + "target": "pages_b05_profile_frontend_ui_drainage_render_3_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/frontend/_UI_Profile_Structures.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_frontend_ui_profile_structures", + "target": "pages_b05_profile_frontend_ui_profile_structures_ui_profile_structures_\uc885\ub2e8_\uad6c\uc870\ubb3c_\ub80c\ub354\ub9c1_\ubc0f_\uc778\ud130\ub799\uc158", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/frontend/_UI_Profile_Structures.md", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_frontend_ui_profile_structures_ui_profile_structures_\uc885\ub2e8_\uad6c\uc870\ubb3c_\ub80c\ub354\ub9c1_\ubc0f_\uc778\ud130\ub799\uc158", + "target": "pages_b05_profile_frontend_ui_profile_structures_1_\uac1c\uc694_\ubc0f_\uc5ed\ud560", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/frontend/_UI_Profile_Structures.md", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_frontend_ui_profile_structures_ui_profile_structures_\uc885\ub2e8_\uad6c\uc870\ubb3c_\ub80c\ub354\ub9c1_\ubc0f_\uc778\ud130\ub799\uc158", + "target": "pages_b05_profile_frontend_ui_profile_structures_2_\uc8fc\uc694_\uae30\ub2a5_\ubc0f_\ud568\uc218", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/frontend/_UI_Profile_Structures.md", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_frontend_ui_profile_structures_ui_profile_structures_\uc885\ub2e8_\uad6c\uc870\ubb3c_\ub80c\ub354\ub9c1_\ubc0f_\uc778\ud130\ub799\uc158", + "target": "pages_b05_profile_frontend_ui_profile_structures_3_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/frontend/_UI_Selection.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_frontend_ui_selection", + "target": "pages_b05_profile_frontend_ui_selection_ui_selection_\ubc30\uc218_\uad6c\uc870\ubb3c_3\uc790_\uc120\ud0dd_\ub3d9\uae30\ud654", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/frontend/_UI_Selection.md", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_frontend_ui_selection_ui_selection_\ubc30\uc218_\uad6c\uc870\ubb3c_3\uc790_\uc120\ud0dd_\ub3d9\uae30\ud654", + "target": "pages_b05_profile_frontend_ui_selection_1_\uac1c\uc694_\ubc0f_\uc5ed\ud560", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/frontend/_UI_Selection.md", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_frontend_ui_selection_ui_selection_\ubc30\uc218_\uad6c\uc870\ubb3c_3\uc790_\uc120\ud0dd_\ub3d9\uae30\ud654", + "target": "pages_b05_profile_frontend_ui_selection_2_\uc8fc\uc694_\uae30\ub2a5_\ubc0f_\ud568\uc218", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_Profile/frontend/_UI_Selection.md", + "source_location": "L22", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b05_profile_frontend_ui_selection_ui_selection_\ubc30\uc218_\uad6c\uc870\ubb3c_3\uc790_\uc120\ud0dd_\ub3d9\uae30\ud654", + "target": "pages_b05_profile_frontend_ui_selection_3_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/B06_api.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_b06_api", + "target": "pages_b06_section_b06_api_b06_section_api", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/B06_backend.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_b06_backend", + "target": "pages_b06_section_b06_backend_b06_section_backend", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/B06_backend.md", + "source_location": "L24", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_b06_backend_b06_section_backend", + "target": "pages_b06_section_b06_backend_\uacc4\uc0b0_\uc5d4\uc9c4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/B06_backend.md", + "source_location": "L47", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_b06_backend_b06_section_backend", + "target": "pages_b06_section_b06_backend_\ub370\uc774\ud130_\uc601\uad6c_\uc800\uc7a5_\ubc0f_\ud658\uacbd\uc124\uc815", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/B06_backend.md", + "source_location": "L34", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_b06_backend_b06_section_backend", + "target": "pages_b06_section_b06_backend_\ub77c\uc6b0\ud130_workflow_\uc870\ud68c_\ud655\uc815_\ud0c0_\ud504\ub85c\uc81d\ud2b8_\ubd88\ub7ec\uc624\uae30_\ubc0f_\uc7ac\uc0dd\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/B06_backend.md", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_b06_backend_b06_section_backend", + "target": "pages_b06_section_b06_backend_\uc694\uccad_\uc751\ub2f5_\ubaa8\ub378", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/B06_cross_design_ui_2026_09.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_b06_cross_design_ui_2026_09", + "target": "pages_b06_section_b06_cross_design_ui_2026_09_b06_\ud6a1\ub2e8_\uacc4\uc0b0_\ubbf8\ub7ec_\uce74\ub4dc_\ud45c\uae30", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/B06_cross_design_ui_2026_09.md", + "source_location": "L12", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_b06_cross_design_ui_2026_09_b06_\ud6a1\ub2e8_\uacc4\uc0b0_\ubbf8\ub7ec_\uce74\ub4dc_\ud45c\uae30", + "target": "pages_b06_section_b06_cross_design_ui_2026_09_\ud504\ub860\ud2b8_\uacc4\uc0b0_\ubbf8\ub7ec", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/B06_cross_design_ui_2026_09.md", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_b06_cross_design_ui_2026_09_b06_\ud6a1\ub2e8_\uacc4\uc0b0_\ubbf8\ub7ec_\uce74\ub4dc_\ud45c\uae30", + "target": "pages_b06_section_b06_cross_design_ui_2026_09_\ud6a1\ub2e8_\uce74\ub4dc_\ud45c\uae30", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/B06_culvert_basin_multitier.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_b06_culvert_basin_multitier", + "target": "pages_b06_section_b06_culvert_basin_multitier_b06_\uc9d1\uc218\uc815_\ub2e4\ub2e8_\uae30\uc2ad\ub9c9\uc774", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/B06_culvert_basin_multitier.md", + "source_location": "L57", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_b06_culvert_basin_multitier_b06_\uc9d1\uc218\uc815_\ub2e4\ub2e8_\uae30\uc2ad\ub9c9\uc774", + "target": "pages_b06_section_b06_culvert_basin_multitier_\ubbf8\uacb0", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/B06_culvert_basin_multitier.md", + "source_location": "L12", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_b06_culvert_basin_multitier_b06_\uc9d1\uc218\uc815_\ub2e4\ub2e8_\uae30\uc2ad\ub9c9\uc774", + "target": "pages_b06_section_b06_culvert_basin_multitier_\uc720\uc785_\uad6c\uc870\ubb3c", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/B06_culvert_basin_multitier.md", + "source_location": "L33", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_b06_culvert_basin_multitier_b06_\uc9d1\uc218\uc815_\ub2e4\ub2e8_\uae30\uc2ad\ub9c9\uc774", + "target": "pages_b06_section_b06_culvert_basin_multitier_\uc720\ucd9c_\uc131\ud1a0\ubd80_\ub2e4\ub2e8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/B06_culvert_basin_multitier.md", + "source_location": "L45", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_b06_culvert_basin_multitier_b06_\uc9d1\uc218\uc815_\ub2e4\ub2e8_\uae30\uc2ad\ub9c9\uc774", + "target": "pages_b06_section_b06_culvert_basin_multitier_\uc790\uccb4\uac80\uc99d_\uae30\ub85d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/B06_culvert_basin_multitier.md", + "source_location": "L27", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_b06_culvert_basin_multitier_b06_\uc9d1\uc218\uc815_\ub2e4\ub2e8_\uae30\uc2ad\ub9c9\uc774", + "target": "pages_b06_section_b06_culvert_basin_multitier_\uc9d1\uc218\uc815_\uacc4\ub958\uce21_\uc131\ud1a0\ubd80", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/B06_culvert_controls.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_b06_culvert_controls", + "target": "pages_b06_section_b06_culvert_controls_b06_\ubc30\uc218\uad00_\uad6c\uc870\ubb3c_\uc870\uc791_\ud45c\uc2dc", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/B06_culvert_controls.md", + "source_location": "L12", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_b06_culvert_controls_b06_\ubc30\uc218\uad00_\uad6c\uc870\ubb3c_\uc870\uc791_\ud45c\uc2dc", + "target": "pages_b06_section_b06_culvert_controls_4\ucd95_\uc870\uc791\uacfc_\uc7ac\uc9c8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/B06_culvert_controls.md", + "source_location": "L43", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_b06_culvert_controls_b06_\ubc30\uc218\uad00_\uad6c\uc870\ubb3c_\uc870\uc791_\ud45c\uc2dc", + "target": "pages_b06_section_b06_culvert_controls_\uacc4\uc0b0_\ubcf4\uae30_\ubd84\ub9ac", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/B06_culvert_controls.md", + "source_location": "L61", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_b06_culvert_controls_b06_\ubc30\uc218\uad00_\uad6c\uc870\ubb3c_\uc870\uc791_\ud45c\uc2dc", + "target": "pages_b06_section_b06_culvert_controls_\uad6c\ud604_\ud30c\uc77c", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/B06_culvert_controls.md", + "source_location": "L50", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_b06_culvert_controls_b06_\ubc30\uc218\uad00_\uad6c\uc870\ubb3c_\uc870\uc791_\ud45c\uc2dc", + "target": "pages_b06_section_b06_culvert_controls_\uc790\uccb4\uac80\uc99d_\uae30\ub85d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/B06_culvert_controls.md", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_b06_culvert_controls_b06_\ubc30\uc218\uad00_\uad6c\uc870\ubb3c_\uc870\uc791_\ud45c\uc2dc", + "target": "pages_b06_section_b06_culvert_controls_\uc870\uc815\ucc3d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/B06_culvert_controls.md", + "source_location": "L32", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_b06_culvert_controls_b06_\ubc30\uc218\uad00_\uad6c\uc870\ubb3c_\uc870\uc791_\ud45c\uc2dc", + "target": "pages_b06_section_b06_culvert_controls_\uc9d1\uc218\uc815_9\ud0a4_\uc870\uc791", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/B06_culvert_geometry_redesign.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_b06_culvert_geometry_redesign", + "target": "pages_b06_section_b06_culvert_geometry_redesign_b06_\ubc30\uc218\uad00_\uad6c\uc870\ubb3c_\uae30\ud558_\uc870\uc791_\uccb4\uacc4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/B06_culvert_geometry_redesign.md", + "source_location": "L55", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_b06_culvert_geometry_redesign_b06_\ubc30\uc218\uad00_\uad6c\uc870\ubb3c_\uae30\ud558_\uc870\uc791_\uccb4\uacc4", + "target": "pages_b06_section_b06_culvert_geometry_redesign_\uac80\uc99d_\uc0c1\ud0dc", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/B06_culvert_geometry_redesign.md", + "source_location": "L44", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_b06_culvert_geometry_redesign_b06_\ubc30\uc218\uad00_\uad6c\uc870\ubb3c_\uae30\ud558_\uc870\uc791_\uccb4\uacc4", + "target": "pages_b06_section_b06_culvert_geometry_redesign_\uad6c\ud604_\ud30c\uc77c", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/B06_culvert_geometry_redesign.md", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_b06_culvert_geometry_redesign_b06_\ubc30\uc218\uad00_\uad6c\uc870\ubb3c_\uae30\ud558_\uc870\uc791_\uccb4\uacc4", + "target": "pages_b06_section_b06_culvert_geometry_redesign_\uae30\uc2ad\ub9c9\uc774_\uad00_\ud575\uc2ec_\uaddc\uce59", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/B06_culvert_geometry_redesign.md", + "source_location": "L40", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_b06_culvert_geometry_redesign_b06_\ubc30\uc218\uad00_\uad6c\uc870\ubb3c_\uae30\ud558_\uc870\uc791_\uccb4\uacc4", + "target": "pages_b06_section_b06_culvert_geometry_redesign_\uc124\uacc4\uc120_\ud2b8\ub9bc", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/B06_culvert_geometry_redesign.md", + "source_location": "L27", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_b06_culvert_geometry_redesign_b06_\ubc30\uc218\uad00_\uad6c\uc870\ubb3c_\uae30\ud558_\uc870\uc791_\uccb4\uacc4", + "target": "pages_b06_section_b06_culvert_geometry_redesign_\uc811\uc18d\uc120", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/B06_culvert_link_trim.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_b06_culvert_link_trim", + "target": "pages_b06_section_b06_culvert_link_trim_b06_\uc778\uc811_\uce21\uc810_\uad6c\uc870\ubb3c_\ud2b8\ub9bc_\uc815\ub9ac", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/B06_culvert_link_trim.md", + "source_location": "L30", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_b06_culvert_link_trim_b06_\uc778\uc811_\uce21\uc810_\uad6c\uc870\ubb3c_\ud2b8\ub9bc_\uc815\ub9ac", + "target": "pages_b06_section_b06_culvert_link_trim_\uac80\uc99d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/B06_culvert_link_trim.md", + "source_location": "L24", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_b06_culvert_link_trim_b06_\uc778\uc811_\uce21\uc810_\uad6c\uc870\ubb3c_\ud2b8\ub9bc_\uc815\ub9ac", + "target": "pages_b06_section_b06_culvert_link_trim_\uc6d0\uc778\uacfc_\uacbd\uacc4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/B06_culvert_link_trim.md", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_b06_culvert_link_trim_b06_\uc778\uc811_\uce21\uc810_\uad6c\uc870\ubb3c_\ud2b8\ub9bc_\uc815\ub9ac", + "target": "pages_b06_section_b06_culvert_link_trim_\ucc98\ub9ac_\ud56d\ubaa9", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/B06_culvert_set.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_b06_culvert_set", + "target": "pages_b06_section_b06_culvert_set_b06_\ubc30\uc218\uad00_\ud6a1\ub2e8\ub3c4_\uc138\ud2b8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/B06_culvert_set.md", + "source_location": "L55", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_b06_culvert_set_b06_\ubc30\uc218\uad00_\ud6a1\ub2e8\ub3c4_\uc138\ud2b8", + "target": "pages_b06_section_b06_culvert_set_\uac80\uc99d_\uadfc\uac70\uc640_\ud6c4\uc18d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/B06_culvert_set.md", + "source_location": "L51", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_b06_culvert_set_b06_\ubc30\uc218\uad00_\ud6a1\ub2e8\ub3c4_\uc138\ud2b8", + "target": "pages_b06_section_b06_culvert_set_\uacc4\ud68d\uc120_\uaddc\uce59", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/B06_culvert_set.md", + "source_location": "L37", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_b06_culvert_set_b06_\ubc30\uc218\uad00_\ud6a1\ub2e8\ub3c4_\uc138\ud2b8", + "target": "pages_b06_section_b06_culvert_set_\uad6c\ud604_\ud56d\ubaa9", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/B06_culvert_set.md", + "source_location": "L16", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_b06_culvert_set_b06_\ubc30\uc218\uad00_\ud6a1\ub2e8\ub3c4_\uc138\ud2b8", + "target": "pages_b06_section_b06_culvert_set_\uc785\ub825_\ud310\uc815", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/B06_culvert_set.md", + "source_location": "L27", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_b06_culvert_set_b06_\ubc30\uc218\uad00_\ud6a1\ub2e8\ub3c4_\uc138\ud2b8", + "target": "pages_b06_section_b06_culvert_set_\ud615\uc0c1_\ud45c\uc2dc_\uc21c\uc11c_2026_08_20_\uc2a4\ub0c5\uc0f7", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/B06_db.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_b06_db", + "target": "pages_b06_section_b06_db_b06_section_db_\uc0ac\uc6a9_\uad00\uacc4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/B06_db.md", + "source_location": "L19", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_b06_db_b06_section_db_\uc0ac\uc6a9_\uad00\uacc4", + "target": "pages_b06_section_b06_db_repository_\ud568\uc218", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/B06_db.md", + "source_location": "L29", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_b06_db_b06_section_db_\uc0ac\uc6a9_\uad00\uacc4", + "target": "pages_b06_section_b06_db_\ud30c\uc77c_\uacbd\ub85c", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/B06_dependencies.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_b06_dependencies", + "target": "pages_b06_section_b06_dependencies_b06_section_dependencies", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/B06_dependencies.md", + "source_location": "L20", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_b06_dependencies_b06_section_dependencies", + "target": "pages_b06_section_b06_dependencies_\uacf5\ud1b5_\ubaa8\ub4c8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/B06_frontend.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_b06_frontend", + "target": "pages_b06_section_b06_frontend_b06_section_frontend", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/B06_frontend.md", + "source_location": "L85", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_b06_frontend_b06_section_frontend", + "target": "pages_b06_section_b06_frontend_2026_08_22_\ud30c\uc77c_\ud55c\uacc4_\uc815\ub9ac", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/B06_frontend.md", + "source_location": "L58", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_b06_frontend_b06_section_frontend", + "target": "pages_b06_section_b06_frontend_api_\ud074\ub77c\uc774\uc5b8\ud2b8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/B06_frontend.md", + "source_location": "L47", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_b06_frontend_b06_section_frontend", + "target": "pages_b06_section_b06_frontend_svg_\ub80c\ub354\ub7ec_\ubc0f_\uc720\ud2f8\ub9ac\ud2f0", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/B06_frontend.md", + "source_location": "L78", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_b06_frontend_b06_section_frontend", + "target": "pages_b06_section_b06_frontend_ui_\ud328\ub110_\ud06c\uae30_\ubc0f_\ub9ac\uc0ac\uc774\uc800_\uaddc\uce59_2026_08_02_\uc2e0\uc124", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/B06_frontend.md", + "source_location": "L84", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_b06_frontend_b06_section_frontend", + "target": "pages_b06_section_b06_frontend_\uae30\uc220\ubd80\ucc44_\ud574\uacb0\ub428", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/B06_frontend.md", + "source_location": "L67", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_b06_frontend_b06_section_frontend", + "target": "pages_b06_section_b06_frontend_\uc785\ub825_\uc635\uc158_\ud45c\uc2dc_\uc635\uc158_\ubc0f_\ud6a1\ub2e8_\ubc18\ud3ed_\uc81c\uc5b4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/B06_frontend.md", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_b06_frontend_b06_section_frontend", + "target": "pages_b06_section_b06_frontend_\ud30c\uc77c_\uad6c\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/B06_frontend.md", + "source_location": "L39", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_b06_frontend_b06_section_frontend", + "target": "pages_b06_section_b06_frontend_\ud654\uba74_workflow_\uc870\ud68c_\ubc0f_\ud655\uc815_\uc804\uc6a9", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/B06_masshaul_culvert_2026_09.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_b06_masshaul_culvert_2026_09", + "target": "pages_b06_section_b06_masshaul_culvert_2026_09_b06_\ud6a1\ub2e8_\uad00_\ud615\uc0c1_\uc720\ud1a0\uace1\uc120_\ud6c4\uc18d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/B06_masshaul_culvert_2026_09.md", + "source_location": "L12", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_b06_masshaul_culvert_2026_09_b06_\ud6a1\ub2e8_\uad00_\ud615\uc0c1_\uc720\ud1a0\uace1\uc120_\ud6c4\uc18d", + "target": "pages_b06_section_b06_masshaul_culvert_2026_09_i\ud615_\uc9d1\uc218\uc815_\uad00_\ud615\uc0c1", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/B06_masshaul_culvert_2026_09.md", + "source_location": "L19", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_b06_masshaul_culvert_2026_09_b06_\ud6a1\ub2e8_\uad00_\ud615\uc0c1_\uc720\ud1a0\uace1\uc120_\ud6c4\uc18d", + "target": "pages_b06_section_b06_masshaul_culvert_2026_09_\uacc4\uc0b0_\uc0c1\ud0dc\uc640_\uacbd\uace0", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/B06_masshaul_culvert_2026_09.md", + "source_location": "L29", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_b06_masshaul_culvert_2026_09_b06_\ud6a1\ub2e8_\uad00_\ud615\uc0c1_\uc720\ud1a0\uace1\uc120_\ud6c4\uc18d", + "target": "pages_b06_section_b06_masshaul_culvert_2026_09_\ud30c\uc77c_\ucc45\uc784_\ubd84\ub9ac", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/B06_pavement_revetment.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_b06_pavement_revetment", + "target": "pages_b06_section_b06_pavement_revetment_b06_\ubb3c\ub118\uc774\ud3ec\uc7a5_\ucf58\ud06c\ub9ac\ud2b8_\ud3ec\uc7a5_\ub3c5\ub9bd_\uae30\uc2ad\ub9c9\uc774", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/B06_pavement_revetment.md", + "source_location": "L34", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_b06_pavement_revetment_b06_\ubb3c\ub118\uc774\ud3ec\uc7a5_\ucf58\ud06c\ub9ac\ud2b8_\ud3ec\uc7a5_\ub3c5\ub9bd_\uae30\uc2ad\ub9c9\uc774", + "target": "pages_b06_section_b06_pavement_revetment_\uac80\uc99d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/B06_pavement_revetment.md", + "source_location": "L24", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_b06_pavement_revetment_b06_\ubb3c\ub118\uc774\ud3ec\uc7a5_\ucf58\ud06c\ub9ac\ud2b8_\ud3ec\uc7a5_\ub3c5\ub9bd_\uae30\uc2ad\ub9c9\uc774", + "target": "pages_b06_section_b06_pavement_revetment_\ub3c5\ub9bd_\uae30\uc2ad\ub9c9\uc774", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/B06_pavement_revetment.md", + "source_location": "L12", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_b06_pavement_revetment_b06_\ubb3c\ub118\uc774\ud3ec\uc7a5_\ucf58\ud06c\ub9ac\ud2b8_\ud3ec\uc7a5_\ub3c5\ub9bd_\uae30\uc2ad\ub9c9\uc774", + "target": "pages_b06_section_b06_pavement_revetment_\ud3ec\uc7a5\uacfc_\ubb3c\ub118\uc774", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/B06_revetment_link_controls.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_b06_revetment_link_controls", + "target": "pages_b06_section_b06_revetment_link_controls_b06_\uae30\uc2ad\ub9c9\uc774_\uc5f0\ub3d9_\uacbd\uc0ac_\ub2e8\ubcc4_\uc81c\uc5b4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/B06_revetment_link_controls.md", + "source_location": "L66", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_b06_revetment_link_controls_b06_\uae30\uc2ad\ub9c9\uc774_\uc5f0\ub3d9_\uacbd\uc0ac_\ub2e8\ubcc4_\uc81c\uc5b4", + "target": "pages_b06_section_b06_revetment_link_controls_\uac80\uc99d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/B06_revetment_link_controls.md", + "source_location": "L35", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_b06_revetment_link_controls_b06_\uae30\uc2ad\ub9c9\uc774_\uc5f0\ub3d9_\uacbd\uc0ac_\ub2e8\ubcc4_\uc81c\uc5b4", + "target": "pages_b06_section_b06_revetment_link_controls_\ub2e8\ubcc4_\uad6c\uac04\uac12", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/B06_revetment_link_controls.md", + "source_location": "L58", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_b06_revetment_link_controls_b06_\uae30\uc2ad\ub9c9\uc774_\uc5f0\ub3d9_\uacbd\uc0ac_\ub2e8\ubcc4_\uc81c\uc5b4", + "target": "pages_b06_section_b06_revetment_link_controls_\uc120\ud0dd\uacfc_\ud558\uc774\ub77c\uc774\ud2b8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/B06_revetment_link_controls.md", + "source_location": "L47", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_b06_revetment_link_controls_b06_\uae30\uc2ad\ub9c9\uc774_\uc5f0\ub3d9_\uacbd\uc0ac_\ub2e8\ubcc4_\uc81c\uc5b4", + "target": "pages_b06_section_b06_revetment_link_controls_\uc5f0\ub3d9\uacfc_\uacbd\uc0ac", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/B06_revetment_link_controls.md", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_b06_revetment_link_controls_b06_\uae30\uc2ad\ub9c9\uc774_\uc5f0\ub3d9_\uacbd\uc0ac_\ub2e8\ubcc4_\uc81c\uc5b4", + "target": "pages_b06_section_b06_revetment_link_controls_\uc815\ubcf8\uacfc_\uacf5\uc6a9_\ubaa8\ub378", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/B06_revetment_link_controls.md", + "source_location": "L24", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_b06_revetment_link_controls_b06_\uae30\uc2ad\ub9c9\uc774_\uc5f0\ub3d9_\uacbd\uc0ac_\ub2e8\ubcc4_\uc81c\uc5b4", + "target": "pages_b06_section_b06_revetment_link_controls_\ud615\ud0dc\uc640_\uc870\uc815\ucc3d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/backend/B06_Section_Engine_Areas.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_backend_b06_section_engine_areas", + "target": "pages_b06_section_backend_b06_section_engine_areas_b06_section_engine_areas_\ud6a1\ub2e8_\uba74\uc801_\uc801\ubd84_\uc5f0\uc0b0_\uc5d4\uc9c4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/backend/B06_Section_Engine_Areas.md", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_backend_b06_section_engine_areas_b06_section_engine_areas_\ud6a1\ub2e8_\uba74\uc801_\uc801\ubd84_\uc5f0\uc0b0_\uc5d4\uc9c4", + "target": "pages_b06_section_backend_b06_section_engine_areas_1_\uac1c\uc694_\ubc0f_\uc5ed\ud560", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/backend/B06_Section_Engine_Areas.md", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_backend_b06_section_engine_areas_b06_section_engine_areas_\ud6a1\ub2e8_\uba74\uc801_\uc801\ubd84_\uc5f0\uc0b0_\uc5d4\uc9c4", + "target": "pages_b06_section_backend_b06_section_engine_areas_2_\uc8fc\uc694_\uae30\ub2a5_\ubc0f_\ud568\uc218", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/backend/B06_Section_Engine_Areas.md", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_backend_b06_section_engine_areas_b06_section_engine_areas_\ud6a1\ub2e8_\uba74\uc801_\uc801\ubd84_\uc5f0\uc0b0_\uc5d4\uc9c4", + "target": "pages_b06_section_backend_b06_section_engine_areas_3_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/backend/B06_Section_Router.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_backend_b06_section_router", + "target": "pages_b06_section_backend_b06_section_router_b06_section_router_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/backend/B06_Section_Router.md", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_backend_b06_section_router_b06_section_router_py", + "target": "pages_b06_section_backend_b06_section_router_\ub77c\uc6b0\ud130_api_\ubc0f_\uc8fc\uc694_\ud568\uc218_\ubaa9\ub85d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/backend/B06_Section_Router.md", + "source_location": "L25", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_backend_b06_section_router_b06_section_router_py", + "target": "pages_b06_section_backend_b06_section_router_\uc5f0\uad00_\uac1c\ub150_\ubc0f_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/backend/B06_Section_Router_Confirm.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_backend_b06_section_router_confirm", + "target": "pages_b06_section_backend_b06_section_router_confirm_b06_section_router_confirm_\uc784\uc2dc_\uc800\uc7a5_\ubc0f_\ud655\uc815_\ub77c\uc6b0\ud130", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/backend/B06_Section_Router_Confirm.md", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_backend_b06_section_router_confirm_b06_section_router_confirm_\uc784\uc2dc_\uc800\uc7a5_\ubc0f_\ud655\uc815_\ub77c\uc6b0\ud130", + "target": "pages_b06_section_backend_b06_section_router_confirm_1_\uac1c\uc694_\ubc0f_\uc5ed\ud560", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/backend/B06_Section_Router_Confirm.md", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_backend_b06_section_router_confirm_b06_section_router_confirm_\uc784\uc2dc_\uc800\uc7a5_\ubc0f_\ud655\uc815_\ub77c\uc6b0\ud130", + "target": "pages_b06_section_backend_b06_section_router_confirm_2_\uc8fc\uc694_\uae30\ub2a5_\ubc0f_\uc5d4\ub4dc\ud3ec\uc778\ud2b8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/backend/B06_Section_Router_Confirm.md", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_backend_b06_section_router_confirm_b06_section_router_confirm_\uc784\uc2dc_\uc800\uc7a5_\ubc0f_\ud655\uc815_\ub77c\uc6b0\ud130", + "target": "pages_b06_section_backend_b06_section_router_confirm_3_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/frontend/B06_Section_Api_Fetch.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_frontend_b06_section_api_fetch", + "target": "pages_b06_section_frontend_b06_section_api_fetch_b06_section_api_fetch_b06_\ud504\ub860\ud2b8\uc5d4\ub4dc_api_\ud074\ub77c\uc774\uc5b8\ud2b8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/frontend/B06_Section_Api_Fetch.md", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_frontend_b06_section_api_fetch_b06_section_api_fetch_b06_\ud504\ub860\ud2b8\uc5d4\ub4dc_api_\ud074\ub77c\uc774\uc5b8\ud2b8", + "target": "pages_b06_section_frontend_b06_section_api_fetch_1_\uac1c\uc694_\ubc0f_\uc5ed\ud560", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/frontend/B06_Section_Api_Fetch.md", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_frontend_b06_section_api_fetch_b06_section_api_fetch_b06_\ud504\ub860\ud2b8\uc5d4\ub4dc_api_\ud074\ub77c\uc774\uc5b8\ud2b8", + "target": "pages_b06_section_frontend_b06_section_api_fetch_2_\uc8fc\uc694_\uc5f0\ub3d9_api_\ud568\uc218", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_Cross_Areas.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_frontend_b06_section_ui_cross_areas", + "target": "pages_b06_section_frontend_b06_section_ui_cross_areas_b06_section_ui_cross_areas_\ud6a1\ub2e8_\ub2e8\uba74\uc801_\ud45c\uae30_\ubc0f_\ubc34\ub4dc_\ud558\uc774\ub77c\uc774\ud2b8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_Cross_Areas.md", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_frontend_b06_section_ui_cross_areas_b06_section_ui_cross_areas_\ud6a1\ub2e8_\ub2e8\uba74\uc801_\ud45c\uae30_\ubc0f_\ubc34\ub4dc_\ud558\uc774\ub77c\uc774\ud2b8", + "target": "pages_b06_section_frontend_b06_section_ui_cross_areas_1_\uac1c\uc694_\ubc0f_\uc5ed\ud560", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_Cross_Areas.md", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_frontend_b06_section_ui_cross_areas_b06_section_ui_cross_areas_\ud6a1\ub2e8_\ub2e8\uba74\uc801_\ud45c\uae30_\ubc0f_\ubc34\ub4dc_\ud558\uc774\ub77c\uc774\ud2b8", + "target": "pages_b06_section_frontend_b06_section_ui_cross_areas_2_\uc8fc\uc694_\uae30\ub2a5_\ubc0f_\ud568\uc218", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_Cross_Areas.md", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_frontend_b06_section_ui_cross_areas_b06_section_ui_cross_areas_\ud6a1\ub2e8_\ub2e8\uba74\uc801_\ud45c\uae30_\ubc0f_\ubc34\ub4dc_\ud558\uc774\ub77c\uc774\ud2b8", + "target": "pages_b06_section_frontend_b06_section_ui_cross_areas_3_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_Cross_Design.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_frontend_b06_section_ui_cross_design", + "target": "pages_b06_section_frontend_b06_section_ui_cross_design_b06_section_ui_cross_design_\ud6a1\ub2e8_\uce21\uc810\ubcc4_\uc138\ubd80_\uc124\uacc4_\ucee8\ud2b8\ub864", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_Cross_Design.md", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_frontend_b06_section_ui_cross_design_b06_section_ui_cross_design_\ud6a1\ub2e8_\uce21\uc810\ubcc4_\uc138\ubd80_\uc124\uacc4_\ucee8\ud2b8\ub864", + "target": "pages_b06_section_frontend_b06_section_ui_cross_design_1_\uac1c\uc694_\ubc0f_\uc5ed\ud560", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_Cross_Design.md", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_frontend_b06_section_ui_cross_design_b06_section_ui_cross_design_\ud6a1\ub2e8_\uce21\uc810\ubcc4_\uc138\ubd80_\uc124\uacc4_\ucee8\ud2b8\ub864", + "target": "pages_b06_section_frontend_b06_section_ui_cross_design_2_\uc8fc\uc694_\uae30\ub2a5_\ubc0f_\ud568\uc218", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_Cross_Design.md", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_frontend_b06_section_ui_cross_design_b06_section_ui_cross_design_\ud6a1\ub2e8_\uce21\uc810\ubcc4_\uc138\ubd80_\uc124\uacc4_\ucee8\ud2b8\ub864", + "target": "pages_b06_section_frontend_b06_section_ui_cross_design_3_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_MassHaul.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_frontend_b06_section_ui_masshaul", + "target": "pages_b06_section_frontend_b06_section_ui_masshaul_b06_section_ui_masshaul_\uc720\ud1a0\uace1\uc120_\uc801\ubd84_\uacc4\uc0b0_\uc5d4\uc9c4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_MassHaul.md", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_frontend_b06_section_ui_masshaul_b06_section_ui_masshaul_\uc720\ud1a0\uace1\uc120_\uc801\ubd84_\uacc4\uc0b0_\uc5d4\uc9c4", + "target": "pages_b06_section_frontend_b06_section_ui_masshaul_1_\uac1c\uc694_\ubc0f_\uc5ed\ud560", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_MassHaul.md", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_frontend_b06_section_ui_masshaul_b06_section_ui_masshaul_\uc720\ud1a0\uace1\uc120_\uc801\ubd84_\uacc4\uc0b0_\uc5d4\uc9c4", + "target": "pages_b06_section_frontend_b06_section_ui_masshaul_2_\uc8fc\uc694_\uae30\ub2a5_\ubc0f_\ud568\uc218", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_MassHaul.md", + "source_location": "L24", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_frontend_b06_section_ui_masshaul_b06_section_ui_masshaul_\uc720\ud1a0\uace1\uc120_\uc801\ubd84_\uacc4\uc0b0_\uc5d4\uc9c4", + "target": "pages_b06_section_frontend_b06_section_ui_masshaul_3_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_MassHaul_Balance.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_frontend_b06_section_ui_masshaul_balance", + "target": "pages_b06_section_frontend_b06_section_ui_masshaul_balance_b06_section_ui_masshaul_balance_\ud3c9\ud615\uc120_\ubc0f_\uc7a5\ube44_\ub760_\ubd84\ud560_\uc5d4\uc9c4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_MassHaul_Balance.md", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_frontend_b06_section_ui_masshaul_balance_b06_section_ui_masshaul_balance_\ud3c9\ud615\uc120_\ubc0f_\uc7a5\ube44_\ub760_\ubd84\ud560_\uc5d4\uc9c4", + "target": "pages_b06_section_frontend_b06_section_ui_masshaul_balance_1_\uac1c\uc694_\ubc0f_\uc5ed\ud560", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_MassHaul_Balance.md", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_frontend_b06_section_ui_masshaul_balance_b06_section_ui_masshaul_balance_\ud3c9\ud615\uc120_\ubc0f_\uc7a5\ube44_\ub760_\ubd84\ud560_\uc5d4\uc9c4", + "target": "pages_b06_section_frontend_b06_section_ui_masshaul_balance_2_\uc8fc\uc694_\uae30\ub2a5_\ubc0f_\uc54c\uace0\ub9ac\uc998", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_MassHaul_Balance.md", + "source_location": "L24", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_frontend_b06_section_ui_masshaul_balance_b06_section_ui_masshaul_balance_\ud3c9\ud615\uc120_\ubc0f_\uc7a5\ube44_\ub760_\ubd84\ud560_\uc5d4\uc9c4", + "target": "pages_b06_section_frontend_b06_section_ui_masshaul_balance_3_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_MassHaul_Balance_View.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_frontend_b06_section_ui_masshaul_balance_view", + "target": "pages_b06_section_frontend_b06_section_ui_masshaul_balance_view_b06_section_ui_masshaul_balance_view_\uc6b4\ubc18_\ub760_\uc2dc\uac01\ud654_\ub80c\ub354\ub7ec", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_MassHaul_Balance_View.md", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_frontend_b06_section_ui_masshaul_balance_view_b06_section_ui_masshaul_balance_view_\uc6b4\ubc18_\ub760_\uc2dc\uac01\ud654_\ub80c\ub354\ub7ec", + "target": "pages_b06_section_frontend_b06_section_ui_masshaul_balance_view_1_\uac1c\uc694_\ubc0f_\uc5ed\ud560", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_MassHaul_Balance_View.md", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_frontend_b06_section_ui_masshaul_balance_view_b06_section_ui_masshaul_balance_view_\uc6b4\ubc18_\ub760_\uc2dc\uac01\ud654_\ub80c\ub354\ub7ec", + "target": "pages_b06_section_frontend_b06_section_ui_masshaul_balance_view_2_\uc8fc\uc694_\uae30\ub2a5_\ubc0f_\ub80c\ub354\ub9c1", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_MassHaul_Balance_View.md", + "source_location": "L24", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_frontend_b06_section_ui_masshaul_balance_view_b06_section_ui_masshaul_balance_view_\uc6b4\ubc18_\ub760_\uc2dc\uac01\ud654_\ub80c\ub354\ub7ec", + "target": "pages_b06_section_frontend_b06_section_ui_masshaul_balance_view_3_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_MassHaul_Balloon.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_frontend_b06_section_ui_masshaul_balloon", + "target": "pages_b06_section_frontend_b06_section_ui_masshaul_balloon_b06_section_ui_masshaul_balloon_\ubb3c\ub7c9_\ub9d0\ud48d\uc120_\ubc30\uce58_\ubc0f_\uc870\uc791", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_MassHaul_Balloon.md", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_frontend_b06_section_ui_masshaul_balloon_b06_section_ui_masshaul_balloon_\ubb3c\ub7c9_\ub9d0\ud48d\uc120_\ubc30\uce58_\ubc0f_\uc870\uc791", + "target": "pages_b06_section_frontend_b06_section_ui_masshaul_balloon_1_\uac1c\uc694_\ubc0f_\uc5ed\ud560", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_MassHaul_Balloon.md", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_frontend_b06_section_ui_masshaul_balloon_b06_section_ui_masshaul_balloon_\ubb3c\ub7c9_\ub9d0\ud48d\uc120_\ubc30\uce58_\ubc0f_\uc870\uc791", + "target": "pages_b06_section_frontend_b06_section_ui_masshaul_balloon_2_\uc8fc\uc694_\uae30\ub2a5_\ubc0f_\uc54c\uace0\ub9ac\uc998", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_MassHaul_Balloon.md", + "source_location": "L25", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_frontend_b06_section_ui_masshaul_balloon_b06_section_ui_masshaul_balloon_\ubb3c\ub7c9_\ub9d0\ud48d\uc120_\ubc30\uce58_\ubc0f_\uc870\uc791", + "target": "pages_b06_section_frontend_b06_section_ui_masshaul_balloon_3_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_MassHaul_Curve.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_frontend_b06_section_ui_masshaul_curve", + "target": "pages_b06_section_frontend_b06_section_ui_masshaul_curve_b06_section_ui_masshaul_curve_\uc720\ud1a0\uace1\uc120_\uada4\uc801_\ubcf4\uac04_\ubc0f_\ub80c\ub354\ub9c1", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_MassHaul_Curve.md", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_frontend_b06_section_ui_masshaul_curve_b06_section_ui_masshaul_curve_\uc720\ud1a0\uace1\uc120_\uada4\uc801_\ubcf4\uac04_\ubc0f_\ub80c\ub354\ub9c1", + "target": "pages_b06_section_frontend_b06_section_ui_masshaul_curve_1_\uac1c\uc694_\ubc0f_\uc5ed\ud560", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_MassHaul_Curve.md", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_frontend_b06_section_ui_masshaul_curve_b06_section_ui_masshaul_curve_\uc720\ud1a0\uace1\uc120_\uada4\uc801_\ubcf4\uac04_\ubc0f_\ub80c\ub354\ub9c1", + "target": "pages_b06_section_frontend_b06_section_ui_masshaul_curve_2_\uc8fc\uc694_\uae30\ub2a5_\ubc0f_\uae30\ud558_\uc218\ud559", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_MassHaul_Curve.md", + "source_location": "L22", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_frontend_b06_section_ui_masshaul_curve_b06_section_ui_masshaul_curve_\uc720\ud1a0\uace1\uc120_\uada4\uc801_\ubcf4\uac04_\ubc0f_\ub80c\ub354\ub9c1", + "target": "pages_b06_section_frontend_b06_section_ui_masshaul_curve_3_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_MassHaul_Settle.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_frontend_b06_section_ui_masshaul_settle", + "target": "pages_b06_section_frontend_b06_section_ui_masshaul_settle_b06_section_ui_masshaul_settle_\ud1a0\ub7c9_\uc815\uc0b0_\ubc0f_\uc7a5\uac70\ub9ac_\uc0c1\uc1c4_\uc5d4\uc9c4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_MassHaul_Settle.md", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_frontend_b06_section_ui_masshaul_settle_b06_section_ui_masshaul_settle_\ud1a0\ub7c9_\uc815\uc0b0_\ubc0f_\uc7a5\uac70\ub9ac_\uc0c1\uc1c4_\uc5d4\uc9c4", + "target": "pages_b06_section_frontend_b06_section_ui_masshaul_settle_1_\uac1c\uc694_\ubc0f_\uc5ed\ud560", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_MassHaul_Settle.md", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_frontend_b06_section_ui_masshaul_settle_b06_section_ui_masshaul_settle_\ud1a0\ub7c9_\uc815\uc0b0_\ubc0f_\uc7a5\uac70\ub9ac_\uc0c1\uc1c4_\uc5d4\uc9c4", + "target": "pages_b06_section_frontend_b06_section_ui_masshaul_settle_2_\uc8fc\uc694_\uae30\ub2a5_\ubc0f_\ub85c\uc9c1", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_MassHaul_Settle.md", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_frontend_b06_section_ui_masshaul_settle_b06_section_ui_masshaul_settle_\ud1a0\ub7c9_\uc815\uc0b0_\ubc0f_\uc7a5\uac70\ub9ac_\uc0c1\uc1c4_\uc5d4\uc9c4", + "target": "pages_b06_section_frontend_b06_section_ui_masshaul_settle_3_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_MassHaul_View.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_frontend_b06_section_ui_masshaul_view", + "target": "pages_b06_section_frontend_b06_section_ui_masshaul_view_b06_section_ui_masshaul_view_\uc720\ud1a0\uace1\uc120_\uc2dc\uac01\ud654_\ub80c\ub354\ub7ec", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_MassHaul_View.md", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_frontend_b06_section_ui_masshaul_view_b06_section_ui_masshaul_view_\uc720\ud1a0\uace1\uc120_\uc2dc\uac01\ud654_\ub80c\ub354\ub7ec", + "target": "pages_b06_section_frontend_b06_section_ui_masshaul_view_1_\uac1c\uc694_\ubc0f_\uc5ed\ud560", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_MassHaul_View.md", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_frontend_b06_section_ui_masshaul_view_b06_section_ui_masshaul_view_\uc720\ud1a0\uace1\uc120_\uc2dc\uac01\ud654_\ub80c\ub354\ub7ec", + "target": "pages_b06_section_frontend_b06_section_ui_masshaul_view_2_\uc8fc\uc694_\uae30\ub2a5_\ubc0f_\ud568\uc218", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_MassHaul_View.md", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_frontend_b06_section_ui_masshaul_view_b06_section_ui_masshaul_view_\uc720\ud1a0\uace1\uc120_\uc2dc\uac01\ud654_\ub80c\ub354\ub7ec", + "target": "pages_b06_section_frontend_b06_section_ui_masshaul_view_3_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_Page.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_frontend_b06_section_ui_page", + "target": "pages_b06_section_frontend_b06_section_ui_page_b06_section_ui_page_b06_\uba54\uc778_\ud398\uc774\uc9c0_\uc624\ucf00\uc2a4\ud2b8\ub808\uc774\ud130", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_Page.md", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_frontend_b06_section_ui_page_b06_section_ui_page_b06_\uba54\uc778_\ud398\uc774\uc9c0_\uc624\ucf00\uc2a4\ud2b8\ub808\uc774\ud130", + "target": "pages_b06_section_frontend_b06_section_ui_page_1_\uac1c\uc694_\ubc0f_\uc5ed\ud560", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_Page.md", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_frontend_b06_section_ui_page_b06_section_ui_page_b06_\uba54\uc778_\ud398\uc774\uc9c0_\uc624\ucf00\uc2a4\ud2b8\ub808\uc774\ud130", + "target": "pages_b06_section_frontend_b06_section_ui_page_2_\uc8fc\uc694_\uae30\ub2a5_\ubc0f_\ud568\uc218", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_Page.md", + "source_location": "L27", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_frontend_b06_section_ui_page_b06_section_ui_page_b06_\uba54\uc778_\ud398\uc774\uc9c0_\uc624\ucf00\uc2a4\ud2b8\ub808\uc774\ud130", + "target": "pages_b06_section_frontend_b06_section_ui_page_3_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_Section_View.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_frontend_b06_section_ui_section_view", + "target": "pages_b06_section_frontend_b06_section_ui_section_view_b06_section_ui_section_view_\uc885_\ud6a1\ub2e8_\ubc0f_\uc720\ud1a0\uace1\uc120_\ubdf0_\uc870\ub9bd", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_Section_View.md", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_frontend_b06_section_ui_section_view_b06_section_ui_section_view_\uc885_\ud6a1\ub2e8_\ubc0f_\uc720\ud1a0\uace1\uc120_\ubdf0_\uc870\ub9bd", + "target": "pages_b06_section_frontend_b06_section_ui_section_view_1_\uac1c\uc694_\ubc0f_\uc5ed\ud560", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_Section_View.md", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_frontend_b06_section_ui_section_view_b06_section_ui_section_view_\uc885_\ud6a1\ub2e8_\ubc0f_\uc720\ud1a0\uace1\uc120_\ubdf0_\uc870\ub9bd", + "target": "pages_b06_section_frontend_b06_section_ui_section_view_2_\uc8fc\uc694_\uae30\ub2a5_\ubc0f_\ud568\uc218", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_Section_View.md", + "source_location": "L28", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_frontend_b06_section_ui_section_view_b06_section_ui_section_view_\uc885_\ud6a1\ub2e8_\ubc0f_\uc720\ud1a0\uace1\uc120_\ubdf0_\uc870\ub9bd", + "target": "pages_b06_section_frontend_b06_section_ui_section_view_3_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_Standard_Diagram.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_frontend_b06_section_ui_standard_diagram", + "target": "pages_b06_section_frontend_b06_section_ui_standard_diagram_b06_section_ui_standard_diagram_\ud45c\uc900\ub2e8\uba74_\ubaa8\uc2dd\ub3c4_\ucef4\ud3ec\ub10c\ud2b8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_Standard_Diagram.md", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_frontend_b06_section_ui_standard_diagram_b06_section_ui_standard_diagram_\ud45c\uc900\ub2e8\uba74_\ubaa8\uc2dd\ub3c4_\ucef4\ud3ec\ub10c\ud2b8", + "target": "pages_b06_section_frontend_b06_section_ui_standard_diagram_1_\uac1c\uc694_\ubc0f_\uc5ed\ud560", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_Standard_Diagram.md", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_frontend_b06_section_ui_standard_diagram_b06_section_ui_standard_diagram_\ud45c\uc900\ub2e8\uba74_\ubaa8\uc2dd\ub3c4_\ucef4\ud3ec\ub10c\ud2b8", + "target": "pages_b06_section_frontend_b06_section_ui_standard_diagram_2_\uc8fc\uc694_\uae30\ub2a5", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_Standard_Panel.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_frontend_b06_section_ui_standard_panel", + "target": "pages_b06_section_frontend_b06_section_ui_standard_panel_b06_section_ui_standard_panel_\ud45c\uc900\ub2e8\uba74_\uc785\ub825_\ubc0f_\uc81c\uc5b4_\ud328\ub110", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_Standard_Panel.md", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_frontend_b06_section_ui_standard_panel_b06_section_ui_standard_panel_\ud45c\uc900\ub2e8\uba74_\uc785\ub825_\ubc0f_\uc81c\uc5b4_\ud328\ub110", + "target": "pages_b06_section_frontend_b06_section_ui_standard_panel_1_\uac1c\uc694_\ubc0f_\uc5ed\ud560", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_Section/frontend/B06_Section_UI_Standard_Panel.md", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b06_section_frontend_b06_section_ui_standard_panel_b06_section_ui_standard_panel_\ud45c\uc900\ub2e8\uba74_\uc785\ub825_\ubc0f_\uc81c\uc5b4_\ud328\ub110", + "target": "pages_b06_section_frontend_b06_section_ui_standard_panel_2_\uc8fc\uc694_\uae30\ub2a5", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B07_DesignDetail/B07_frontend.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b07_designdetail_b07_frontend", + "target": "pages_b07_designdetail_b07_frontend_b07_designdetail_\ud604\uc7ac_\ucc45\uc784", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "weight": 1.0, + "source_file": "pages/B07_DesignDetail/B07_standard_drawings_2026_09.md", + "source_location": "wikilink", + "_origin": "curated", + "source": "pages_b07_designdetail_b07_standard_drawings_2026_09_b07_\uad6c\uc870\ubb3c_\ud45c\uc900\ub3c4_\uc870\uc0ac_\ud569\uc758\uc640_\ud604\uc7ac_\ud1b5\ub85c", + "target": "pages_b07_designdetail_b07_frontend_b07_designdetail_\ud604\uc7ac_\ucc45\uc784" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B07_DesignDetail/B07_standard_drawings_2026_09.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b07_designdetail_b07_standard_drawings_2026_09", + "target": "pages_b07_designdetail_b07_standard_drawings_2026_09_b07_\uad6c\uc870\ubb3c_\ud45c\uc900\ub3c4_\uc870\uc0ac_\ud569\uc758\uc640_\ud604\uc7ac_\ud1b5\ub85c", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "weight": 1.0, + "source_file": "pages/B07_DesignDetail/B07_standard_drawings_2026_09.md", + "source_location": "wikilink", + "_origin": "curated", + "source": "pages_b07_designdetail_b07_standard_drawings_2026_09_b07_\uad6c\uc870\ubb3c_\ud45c\uc900\ub3c4_\uc870\uc0ac_\ud569\uc758\uc640_\ud604\uc7ac_\ud1b5\ub85c", + "target": "pages_b08_quantity_b08_overview_2026_09_b08_quantity_2026_09_\uc218\ub7c9\uc0b0\ucd9c" + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "weight": 1.0, + "source_file": "pages/B07_DesignDetail/B07_standard_drawings_2026_09.md", + "source_location": "wikilink", + "_origin": "curated", + "source": "pages_b07_designdetail_b07_standard_drawings_2026_09_b07_\uad6c\uc870\ubb3c_\ud45c\uc900\ub3c4_\uc870\uc0ac_\ud569\uc758\uc640_\ud604\uc7ac_\ud1b5\ub85c", + "target": "pages_b09_estimation_b09_overview_2026_09_b09_estimation_2026_09_\uc6d0\uac00\uacc4\uc0b0" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B07_DesignDetail/B07_standard_drawings_2026_09.md", + "source_location": "L49", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b07_designdetail_b07_standard_drawings_2026_09_b07_\uad6c\uc870\ubb3c_\ud45c\uc900\ub3c4_\uc870\uc0ac_\ud569\uc758\uc640_\ud604\uc7ac_\ud1b5\ub85c", + "target": "pages_b07_designdetail_b07_standard_drawings_2026_09_9\uc6d4_9\uc77c_\uad6c\ud604_\uc2e4\uce21_\ubcf4\uac15", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B07_DesignDetail/B07_standard_drawings_2026_09.md", + "source_location": "L24", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b07_designdetail_b07_standard_drawings_2026_09_b07_\uad6c\uc870\ubb3c_\ud45c\uc900\ub3c4_\uc870\uc0ac_\ud569\uc758\uc640_\ud604\uc7ac_\ud1b5\ub85c", + "target": "pages_b07_designdetail_b07_standard_drawings_2026_09_\uad6c\ud604_\uc9c4\uc785\uc810", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B07_DesignDetail/B07_standard_drawings_2026_09.md", + "source_location": "L43", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b07_designdetail_b07_standard_drawings_2026_09_b07_\uad6c\uc870\ubb3c_\ud45c\uc900\ub3c4_\uc870\uc0ac_\ud569\uc758\uc640_\ud604\uc7ac_\ud1b5\ub85c", + "target": "pages_b07_designdetail_b07_standard_drawings_2026_09_\uadfc\uac70\uc640_\ub0a8\uc740_\ubd88\ud655\uc2e4\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B07_DesignDetail/B07_standard_drawings_2026_09.md", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b07_designdetail_b07_standard_drawings_2026_09_b07_\uad6c\uc870\ubb3c_\ud45c\uc900\ub3c4_\uc870\uc0ac_\ud569\uc758\uc640_\ud604\uc7ac_\ud1b5\ub85c", + "target": "pages_b07_designdetail_b07_standard_drawings_2026_09_\ub370\uc774\ud130_\ud750\ub984", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B07_DesignDetail/B07_standard_drawings_2026_09.md", + "source_location": "L35", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b07_designdetail_b07_standard_drawings_2026_09_b07_\uad6c\uc870\ubb3c_\ud45c\uc900\ub3c4_\uc870\uc0ac_\ud569\uc758\uc640_\ud604\uc7ac_\ud1b5\ub85c", + "target": "pages_b07_designdetail_b07_standard_drawings_2026_09_\uc870\uc0ac\ub85c_\ud655\uc778\ub41c_\uc124\uacc4_\uc6d0\uce59", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B07_Quantity/B07_backend.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b07_quantity_b07_backend", + "target": "pages_b07_quantity_b07_backend_b07_quantity_backend", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B07_Quantity/B07_backend.md", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b07_quantity_b07_backend_b07_quantity_backend", + "target": "pages_b07_quantity_b07_backend_\uad6c\ud604\ub418\uc9c0_\uc54a\uc740_\ud56d\ubaa9", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B07_Quantity/B07_backend.md", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b07_quantity_b07_backend_b07_quantity_backend", + "target": "pages_b07_quantity_b07_backend_\uad6c\ud604\ub41c_\ud56d\ubaa9", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B07_Quantity/B07_backend.md", + "source_location": "L30", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b07_quantity_b07_backend_b07_quantity_backend", + "target": "pages_b07_quantity_b07_backend_\ucc45\uc784_\uacbd\uacc4_\ubbf8\uacb0", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B07_Quantity/B07_db.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b07_quantity_b07_db", + "target": "pages_b07_quantity_b07_db_b07_quantity_db", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B07_Quantity/B07_frontend.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b07_quantity_b07_frontend", + "target": "pages_b07_quantity_b07_frontend_b07_quantity_frontend", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B07_Quantity/B07_frontend.md", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b07_quantity_b07_frontend_b07_quantity_frontend", + "target": "pages_b07_quantity_b07_frontend_\ud604\uc7ac_\uc0ac\uc6a9\uc790_\ub3d9\uc791", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B07_Quantity/backend/B07_Quantity_Router.md", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b07_quantity_backend_b07_quantity_router", + "target": "pages_b07_quantity_backend_b07_quantity_router_b07_quantity_router_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_DesignDetail/B08_CAD_blocks.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b08_designdetail_b08_cad_blocks", + "target": "pages_b08_designdetail_b08_cad_blocks_b08_cad_\ube14\ub85d_\ub77c\uc774\ube0c\ub7ec\ub9ac_\uc0ac\uc9c4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_DesignDetail/B08_CAD_blocks.md", + "source_location": "L29", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b08_designdetail_b08_cad_blocks_b08_cad_\ube14\ub85d_\ub77c\uc774\ube0c\ub7ec\ub9ac_\uc0ac\uc9c4", + "target": "pages_b08_designdetail_b08_cad_blocks_\uac80\uc99d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_DesignDetail/B08_CAD_blocks.md", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b08_designdetail_b08_cad_blocks_b08_cad_\ube14\ub85d_\ub77c\uc774\ube0c\ub7ec\ub9ac_\uc0ac\uc9c4", + "target": "pages_b08_designdetail_b08_cad_blocks_\uad6c\ud604", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_DesignDetail/B08_CAD_blocks.md", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b08_designdetail_b08_cad_blocks_b08_cad_\ube14\ub85d_\ub77c\uc774\ube0c\ub7ec\ub9ac_\uc0ac\uc9c4", + "target": "pages_b08_designdetail_b08_cad_blocks_\ubc94\uc704_\uacb0\uc815", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_DesignDetail/B08_CAD_commands.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b08_designdetail_b08_cad_commands", + "target": "pages_b08_designdetail_b08_cad_commands_b08_openwebcad_\uba85\ub839_\uccb4\uacc4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_DesignDetail/B08_CAD_commands.md", + "source_location": "L30", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b08_designdetail_b08_cad_commands_b08_openwebcad_\uba85\ub839_\uccb4\uacc4", + "target": "pages_b08_designdetail_b08_cad_commands_\uac80\uc99d_\uc81c\ud55c", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_DesignDetail/B08_CAD_commands.md", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b08_designdetail_b08_cad_commands_b08_openwebcad_\uba85\ub839_\uccb4\uacc4", + "target": "pages_b08_designdetail_b08_cad_commands_\uad6c\ud604_\ubc94\uc704", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_DesignDetail/B08_CAD_commands.md", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b08_designdetail_b08_cad_commands_b08_openwebcad_\uba85\ub839_\uccb4\uacc4", + "target": "pages_b08_designdetail_b08_cad_commands_\ud575\uc2ec_\uad6c\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_DesignDetail/B08_CAD_interaction.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b08_designdetail_b08_cad_interaction", + "target": "pages_b08_designdetail_b08_cad_interaction_b08_cad_\uae30\ubcf8_\uc870\uc791", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_DesignDetail/B08_CAD_interaction.md", + "source_location": "L31", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b08_designdetail_b08_cad_interaction_b08_cad_\uae30\ubcf8_\uc870\uc791", + "target": "pages_b08_designdetail_b08_cad_interaction_\uac80\uc99d_\uc81c\uc678", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_DesignDetail/B08_CAD_interaction.md", + "source_location": "L20", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b08_designdetail_b08_cad_interaction_b08_cad_\uae30\ubcf8_\uc870\uc791", + "target": "pages_b08_designdetail_b08_cad_interaction_\uc120\ud0dd_\ud3b8\uc9d1", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_DesignDetail/B08_CAD_interaction.md", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b08_designdetail_b08_cad_interaction_b08_cad_\uae30\ubcf8_\uc870\uc791", + "target": "pages_b08_designdetail_b08_cad_interaction_\uc785\ub825_\uc0c1\ud0dc", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_DesignDetail/B08_CAD_table_entity.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b08_designdetail_b08_cad_table_entity", + "target": "pages_b08_designdetail_b08_cad_table_entity_b08_cad_tableentity", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_DesignDetail/B08_CAD_table_entity.md", + "source_location": "L36", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b08_designdetail_b08_cad_table_entity_b08_cad_tableentity", + "target": "pages_b08_designdetail_b08_cad_table_entity_\uac80\uc99d_\ud6c4\uc18d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_DesignDetail/B08_CAD_table_entity.md", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b08_designdetail_b08_cad_table_entity_b08_cad_tableentity", + "target": "pages_b08_designdetail_b08_cad_table_entity_\uae30\ub2a5", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_DesignDetail/B08_CAD_table_entity.md", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b08_designdetail_b08_cad_table_entity_b08_cad_tableentity", + "target": "pages_b08_designdetail_b08_cad_table_entity_\ubaa8\ub378", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_DesignDetail/B08_CAD_table_entity.md", + "source_location": "L30", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b08_designdetail_b08_cad_table_entity_b08_cad_tableentity", + "target": "pages_b08_designdetail_b08_cad_table_entity_\uc774\uad00_\ubc94\uc704", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_DesignDetail/B08_CAD_title_block.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b08_designdetail_b08_cad_title_block", + "target": "pages_b08_designdetail_b08_cad_title_block_b08_cad_\ub3c4\uac01_\ud45c\uc81c\ub780", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_DesignDetail/B08_CAD_title_block.md", + "source_location": "L12", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b08_designdetail_b08_cad_title_block_b08_cad_\ub3c4\uac01_\ud45c\uc81c\ub780", + "target": "pages_b08_designdetail_b08_cad_title_block_\uac12_\uacf5\uae09", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_DesignDetail/B08_CAD_title_block.md", + "source_location": "L33", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b08_designdetail_b08_cad_title_block_b08_cad_\ub3c4\uac01_\ud45c\uc81c\ub780", + "target": "pages_b08_designdetail_b08_cad_title_block_\ub3c4\uac01_\ud3b8\uc9d1_\ubcf4\uc874", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_DesignDetail/B08_CAD_title_block.md", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b08_designdetail_b08_cad_title_block_b08_cad_\ub3c4\uac01_\ud45c\uc81c\ub780", + "target": "pages_b08_designdetail_b08_cad_title_block_\ud68c\uc0ac_\uc790\uc0b0\uacfc_\ub2f4\ub2f9\uc790", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_DesignDetail/B08_CAD_usability_2026-09-01.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b08_designdetail_b08_cad_usability_2026_09_01", + "target": "pages_b08_designdetail_b08_cad_usability_2026_09_01_b08_cad_\uc0ac\uc6a9\uc790_\ud3b8\uc758\uc131_\uc815\ub9ac", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_DesignDetail/B08_CAD_usability_2026-09-01.md", + "source_location": "L39", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b08_designdetail_b08_cad_usability_2026_09_01_b08_cad_\uc0ac\uc6a9\uc790_\ud3b8\uc758\uc131_\uc815\ub9ac", + "target": "pages_b08_designdetail_b08_cad_usability_2026_09_01_\uac80\uc99d_\uc0c1\ud0dc", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_DesignDetail/B08_CAD_usability_2026-09-01.md", + "source_location": "L16", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b08_designdetail_b08_cad_usability_2026_09_01_b08_cad_\uc0ac\uc6a9\uc790_\ud3b8\uc758\uc131_\uc815\ub9ac", + "target": "pages_b08_designdetail_b08_cad_usability_2026_09_01_\uad6c\ud604_\uae30\ub85d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_DesignDetail/B08_CAD_usability_2026-09-01.md", + "source_location": "L30", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b08_designdetail_b08_cad_usability_2026_09_01_b08_cad_\uc0ac\uc6a9\uc790_\ud3b8\uc758\uc131_\uc815\ub9ac", + "target": "pages_b08_designdetail_b08_cad_usability_2026_09_01_\uc0ac\uc6a9\uc790_\ud750\ub984", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_DesignDetail/B08_api.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b08_designdetail_b08_api", + "target": "pages_b08_designdetail_b08_api_b08_designdetail_api", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_DesignDetail/B08_api.md", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b08_designdetail_b08_api_b08_designdetail_api", + "target": "pages_b08_designdetail_b08_api_api_\uc5d4\ub4dc\ud3ec\uc778\ud2b8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_DesignDetail/B08_backend.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b08_designdetail_b08_backend", + "target": "pages_b08_designdetail_b08_backend_b08_designdetail_backend", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_DesignDetail/B08_backend.md", + "source_location": "L27", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b08_designdetail_b08_backend_b08_designdetail_backend", + "target": "pages_b08_designdetail_b08_backend_\ub3c4\uac01_\ud15c\ud50c\ub9bf_\ubcc0\ud658_\ubc0f_\uc885\ub2e8\ub3c4_a1_\ub3c4\uac01_\ubcd1\ud569_2026_07_26", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_DesignDetail/B08_backend.md", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b08_designdetail_b08_backend_b08_designdetail_backend", + "target": "pages_b08_designdetail_b08_backend_\ub3c4\uba74_\uad00\ub9ac_\uc885\ub2e8_30\uce21\uc810_\ubd84\ud560_cad_\uc218\ub7c9\uc0b0\ucd9c\ud45c_\ubc0f_\ub3c4\uba74_\ud15c\ud50c\ub9bf_\ud30c\uc774\ud504\ub77c\uc778", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_DesignDetail/B08_backend.md", + "source_location": "L39", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b08_designdetail_b08_backend_b08_designdetail_backend", + "target": "pages_b08_designdetail_b08_backend_\uc6cc\ud06c\ud50c\ub85c\uc6b0_\uac8c\uc774\ud305_\uc5f0\ub3d9", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_DesignDetail/B08_backend.md", + "source_location": "L31", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b08_designdetail_b08_backend_b08_designdetail_backend", + "target": "pages_b08_designdetail_b08_backend_\uc885\ub2e8\ub3c4_30\uce21\uc810_n\ubd84\ud560_\ubc0f_\ub0a9\ud488_\uc591\uc2dd_\uce21\uc810_\ud14c\uc774\ube14_2026_07_25_n_1_1", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_DesignDetail/B08_backend.md", + "source_location": "L43", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b08_designdetail_b08_backend_b08_designdetail_backend", + "target": "pages_b08_designdetail_b08_backend_\ud604\uc7ac_\ucc45\uc784_\uacbd\uacc4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_DesignDetail/B08_backend.md", + "source_location": "L35", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b08_designdetail_b08_backend_b08_designdetail_backend", + "target": "pages_b08_designdetail_b08_backend_\ud6a1\ub2e8\ub3c4_4\uac1c_\uc120\ubcc4_\ub808\uc774\uc5b4_\ubc0f_cad_\uc218\ub7c9\uc0b0\ucd9c\ud45c_2026_07_25_n_1_2_n_1_3", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_DesignDetail/B08_cad_delivery_2026_09.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b08_designdetail_b08_cad_delivery_2026_09", + "target": "pages_b08_designdetail_b08_cad_delivery_2026_09_b08_cad_\ub0a9\ud488_\ub3c4\uba74_\ud6c4\uc18d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_DesignDetail/B08_cad_delivery_2026_09.md", + "source_location": "L12", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b08_designdetail_b08_cad_delivery_2026_09_b08_cad_\ub0a9\ud488_\ub3c4\uba74_\ud6c4\uc18d", + "target": "pages_b08_designdetail_b08_cad_delivery_2026_09_cad_\ud3b8\uc9d1_\ud655\uc815", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_DesignDetail/B08_cad_delivery_2026_09.md", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b08_designdetail_b08_cad_delivery_2026_09_b08_cad_\ub0a9\ud488_\ub3c4\uba74_\ud6c4\uc18d", + "target": "pages_b08_designdetail_b08_cad_delivery_2026_09_\ud1a0\uc801\ub3c4_\uc720\uc5ed\ub3c4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_DesignDetail/B08_cross_structure_sheets.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b08_designdetail_b08_cross_structure_sheets", + "target": "pages_b08_designdetail_b08_cross_structure_sheets_b08_\ud6a1\ub2e8\ub3c4_\uad6c\uc870\ubb3c_\uc7a5_\ubc30\uce58", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_DesignDetail/B08_cross_structure_sheets.md", + "source_location": "L26", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b08_designdetail_b08_cross_structure_sheets_b08_\ud6a1\ub2e8\ub3c4_\uad6c\uc870\ubb3c_\uc7a5_\ubc30\uce58", + "target": "pages_b08_designdetail_b08_cross_structure_sheets_\uacb0\uacfc", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_DesignDetail/B08_cross_structure_sheets.md", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b08_designdetail_b08_cross_structure_sheets_b08_\ud6a1\ub2e8\ub3c4_\uad6c\uc870\ubb3c_\uc7a5_\ubc30\uce58", + "target": "pages_b08_designdetail_b08_cross_structure_sheets_\ub370\uc774\ud130_\uad6c\ud604_\ud750\ub984", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_DesignDetail/B08_cross_structure_sheets.md", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b08_designdetail_b08_cross_structure_sheets_b08_\ud6a1\ub2e8\ub3c4_\uad6c\uc870\ubb3c_\uc7a5_\ubc30\uce58", + "target": "pages_b08_designdetail_b08_cross_structure_sheets_\ubb38\uc81c\uc640_\uacb0\uc815", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_DesignDetail/B08_cross_structure_sheets.md", + "source_location": "L33", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b08_designdetail_b08_cross_structure_sheets_b08_\ud6a1\ub2e8\ub3c4_\uad6c\uc870\ubb3c_\uc7a5_\ubc30\uce58", + "target": "pages_b08_designdetail_b08_cross_structure_sheets_\ud55c\uacc4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_DesignDetail/B08_dependencies.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b08_designdetail_b08_dependencies", + "target": "pages_b08_designdetail_b08_dependencies_b08_designdetail_dependencies", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_DesignDetail/B08_dependencies.md", + "source_location": "L25", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b08_designdetail_b08_dependencies_b08_designdetail_dependencies", + "target": "pages_b08_designdetail_b08_dependencies_backend_requirements_txt", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_DesignDetail/B08_dependencies.md", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b08_designdetail_b08_dependencies_b08_designdetail_dependencies", + "target": "pages_b08_designdetail_b08_dependencies_frontend_package_json_tsconfig_json", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_DesignDetail/B08_drawing_masshaul_watershed.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b08_designdetail_b08_drawing_masshaul_watershed", + "target": "pages_b08_designdetail_b08_drawing_masshaul_watershed_b08_\ud1a0\uc801\ub3c4_\uc218\ub9ac\uc9d1\uc218\uba74\uc801\uc720\uc5ed\ub3c4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_DesignDetail/B08_drawing_masshaul_watershed.md", + "source_location": "L51", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b08_designdetail_b08_drawing_masshaul_watershed_b08_\ud1a0\uc801\ub3c4_\uc218\ub9ac\uc9d1\uc218\uba74\uc801\uc720\uc5ed\ub3c4", + "target": "pages_b08_designdetail_b08_drawing_masshaul_watershed_\uac80\uc99d_\ud55c\uacc4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_DesignDetail/B08_drawing_masshaul_watershed.md", + "source_location": "L38", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b08_designdetail_b08_drawing_masshaul_watershed_b08_\ud1a0\uc801\ub3c4_\uc218\ub9ac\uc9d1\uc218\uba74\uc801\uc720\uc5ed\ub3c4", + "target": "pages_b08_designdetail_b08_drawing_masshaul_watershed_\uad6c\ud604_\uac80\uc99d_\uc644\ub8cc", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_DesignDetail/B08_drawing_masshaul_watershed.md", + "source_location": "L56", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b08_designdetail_b08_drawing_masshaul_watershed_b08_\ud1a0\uc801\ub3c4_\uc218\ub9ac\uc9d1\uc218\uba74\uc801\uc720\uc5ed\ub3c4", + "target": "pages_b08_designdetail_b08_drawing_masshaul_watershed_\ub0a8\uc740_\uacb0\uc815", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_DesignDetail/B08_drawing_masshaul_watershed.md", + "source_location": "L20", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b08_designdetail_b08_drawing_masshaul_watershed_b08_\ud1a0\uc801\ub3c4_\uc218\ub9ac\uc9d1\uc218\uba74\uc801\uc720\uc5ed\ub3c4", + "target": "pages_b08_designdetail_b08_drawing_masshaul_watershed_\ub370\uc774\ud130_\ud750\ub984", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_DesignDetail/B08_drawing_masshaul_watershed.md", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b08_designdetail_b08_drawing_masshaul_watershed_b08_\ud1a0\uc801\ub3c4_\uc218\ub9ac\uc9d1\uc218\uba74\uc801\uc720\uc5ed\ub3c4", + "target": "pages_b08_designdetail_b08_drawing_masshaul_watershed_\ub3c4\uba74_\uae30\uc900", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_DesignDetail/B08_drawing_masshaul_watershed.md", + "source_location": "L30", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b08_designdetail_b08_drawing_masshaul_watershed_b08_\ud1a0\uc801\ub3c4_\uc218\ub9ac\uc9d1\uc218\uba74\uc801\uc720\uc5ed\ub3c4", + "target": "pages_b08_designdetail_b08_drawing_masshaul_watershed_\uc720\uc5ed_\uc815\ubcf4\ud45c", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_DesignDetail/B08_frontend.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b08_designdetail_b08_frontend", + "target": "pages_b08_designdetail_b08_frontend_b08_designdetail_frontend", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_DesignDetail/B08_frontend.md", + "source_location": "L43", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b08_designdetail_b08_frontend_b08_designdetail_frontend", + "target": "pages_b08_designdetail_b08_frontend_cad_\uacc4\ud68d\uc120_\ub808\uc774\uc5b4_\uc5f0\ub3d9_\ubc0f_\ud3b8\uc9d1_\uc9c0\uc6d0_2026_07_22", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_DesignDetail/B08_frontend.md", + "source_location": "L37", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b08_designdetail_b08_frontend_b08_designdetail_frontend", + "target": "pages_b08_designdetail_b08_frontend_openwebcad_\ub2e8\uc704_\uc815\ud569_\uc120_\ud2b9\uc131_\ud3f0\ud2b8_ui_\ubc0f_fit_in_all_2026_07_20", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_DesignDetail/B08_frontend.md", + "source_location": "L29", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b08_designdetail_b08_frontend_b08_designdetail_frontend", + "target": "pages_b08_designdetail_b08_frontend_\ub3c5\ub9bd\ud615_cad_\uc784\ubca0\ub4dc_\ubc0f_\ub370\uc774\ud130_\uc5f0\ub3d9_\uc544\ud0a4\ud14d\ucc98", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_DesignDetail/B08_frontend.md", + "source_location": "L55", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b08_designdetail_b08_frontend_b08_designdetail_frontend", + "target": "pages_b08_designdetail_b08_frontend_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_DesignDetail/B08_frontend.md", + "source_location": "L47", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b08_designdetail_b08_frontend_b08_designdetail_frontend", + "target": "pages_b08_designdetail_b08_frontend_\uc8fc\uc694_\ucef4\ud3ec\ub10c\ud2b8_\ud568\uc218", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_DesignDetail/B08_frontend.md", + "source_location": "L16", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b08_designdetail_b08_frontend_b08_designdetail_frontend", + "target": "pages_b08_designdetail_b08_frontend_\ud30c\uc77c_\uad6c\uc870", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_DesignDetail/backend/B08_DesignDetail_Router.md", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b08_designdetail_backend_b08_designdetail_router", + "target": "pages_b08_designdetail_backend_b08_designdetail_router_b08_designdetail_router_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_DesignDetail/backend/B08_DesignDetail_Router.md", + "source_location": "L20", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b08_designdetail_backend_b08_designdetail_router_b08_designdetail_router_py", + "target": "pages_b08_designdetail_backend_b08_designdetail_router_\uc2e4\uc81c_api", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_Quantity/B08_2026_09_09_completion.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b08_quantity_b08_2026_09_09_completion", + "target": "pages_b08_quantity_b08_2026_09_09_completion_b08_\uc218\ub7c9\uc0b0\ucd9c_2026_09_09_\uc644\ub8cc_\uadfc\uac70", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_Quantity/B08_2026_09_09_completion.md", + "source_location": "L28", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b08_quantity_b08_2026_09_09_completion_b08_\uc218\ub7c9\uc0b0\ucd9c_2026_09_09_\uc644\ub8cc_\uadfc\uac70", + "target": "pages_b08_quantity_b08_2026_09_09_completion_\uac80\uc99d_\uae30\ub85d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_Quantity/B08_2026_09_09_completion.md", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b08_quantity_b08_2026_09_09_completion_b08_\uc218\ub7c9\uc0b0\ucd9c_2026_09_09_\uc644\ub8cc_\uadfc\uac70", + "target": "pages_b08_quantity_b08_2026_09_09_completion_\uad6c\uc870\ubb3c_\uc218\ub7c9_\ud45c\uc2dc", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_Quantity/B08_2026_09_09_completion.md", + "source_location": "L37", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b08_quantity_b08_2026_09_09_completion_b08_\uc218\ub7c9\uc0b0\ucd9c_2026_09_09_\uc644\ub8cc_\uadfc\uac70", + "target": "pages_b08_quantity_b08_2026_09_09_completion_\ub0a8\uc740_\uacbd\uacc4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_Quantity/B08_2026_09_09_completion.md", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b08_quantity_b08_2026_09_09_completion_b08_\uc218\ub7c9\uc0b0\ucd9c_2026_09_09_\uc644\ub8cc_\uadfc\uac70", + "target": "pages_b08_quantity_b08_2026_09_09_completion_\ubc11\uc218\uc640_\uc778\uacc4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_Quantity/B08_overview_2026_09.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b08_quantity_b08_overview_2026_09", + "target": "pages_b08_quantity_b08_overview_2026_09_b08_quantity_2026_09_\uc218\ub7c9\uc0b0\ucd9c", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_Quantity/B08_overview_2026_09.md", + "source_location": "L26", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b08_quantity_b08_overview_2026_09_b08_quantity_2026_09_\uc218\ub7c9\uc0b0\ucd9c", + "target": "pages_b08_quantity_b08_overview_2026_09_\uac80\uc99d\ub41c_\ud750\ub984", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_Quantity/B08_overview_2026_09.md", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b08_quantity_b08_overview_2026_09_b08_quantity_2026_09_\uc218\ub7c9\uc0b0\ucd9c", + "target": "pages_b08_quantity_b08_overview_2026_09_\uad6c\ud604_\uad6c\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_Quantity/B08_overview_2026_09.md", + "source_location": "L34", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b08_quantity_b08_overview_2026_09_b08_quantity_2026_09_\uc218\ub7c9\uc0b0\ucd9c", + "target": "pages_b08_quantity_b08_overview_2026_09_\uc644\ub8cc_\uc81c\ud55c", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B09_Estimation/B09_2026_09_09_completion.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b09_estimation_b09_2026_09_09_completion", + "target": "pages_b09_estimation_b09_2026_09_09_completion_b09_\uc6d0\uac00\uacc4\uc0b0_2026_09_09_\uc644\ub8cc_\uadfc\uac70", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B09_Estimation/B09_2026_09_09_completion.md", + "source_location": "L22", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b09_estimation_b09_2026_09_09_completion_b09_\uc6d0\uac00\uacc4\uc0b0_2026_09_09_\uc644\ub8cc_\uadfc\uac70", + "target": "pages_b09_estimation_b09_2026_09_09_completion_\uac00\uaca9_\uc870\uac74_\uc785\ub825", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B09_Estimation/B09_2026_09_09_completion.md", + "source_location": "L38", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b09_estimation_b09_2026_09_09_completion_b09_\uc6d0\uac00\uacc4\uc0b0_2026_09_09_\uc644\ub8cc_\uadfc\uac70", + "target": "pages_b09_estimation_b09_2026_09_09_completion_\uac80\uc99d_\uae30\ub85d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B09_Estimation/B09_2026_09_09_completion.md", + "source_location": "L30", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b09_estimation_b09_2026_09_09_completion_b09_\uc6d0\uac00\uacc4\uc0b0_2026_09_09_\uc644\ub8cc_\uadfc\uac70", + "target": "pages_b09_estimation_b09_2026_09_09_completion_\uae30\uacc4_\uc81c\ube44\uc728_\uc0b0\ucd9c\ubb3c", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B09_Estimation/B09_2026_09_09_completion.md", + "source_location": "L50", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b09_estimation_b09_2026_09_09_completion_b09_\uc6d0\uac00\uacc4\uc0b0_2026_09_09_\uc644\ub8cc_\uadfc\uac70", + "target": "pages_b09_estimation_b09_2026_09_09_completion_\ub0a8\uc740_\uacbd\uacc4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B09_Estimation/B09_2026_09_09_completion.md", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b09_estimation_b09_2026_09_09_completion_b09_\uc6d0\uac00\uacc4\uc0b0_2026_09_09_\uc644\ub8cc_\uadfc\uac70", + "target": "pages_b09_estimation_b09_2026_09_09_completion_\ub2e8\uac00_\ubc11\uc218_\uc644\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B09_Estimation/B09_frontend.md", + "source_location": "L8", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b09_estimation_b09_frontend", + "target": "pages_b09_estimation_b09_frontend_b09_estimation_frontend", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B09_Estimation/B09_frontend.md", + "source_location": "L26", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b09_estimation_b09_frontend_b09_estimation_frontend", + "target": "pages_b09_estimation_b09_frontend_\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B09_Estimation/B09_frontend.md", + "source_location": "L37", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b09_estimation_b09_frontend_b09_estimation_frontend", + "target": "pages_b09_estimation_b09_frontend_\ubc31\uc5d4\ub4dc_db_\ubbf8\ucc29\uc218", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B09_Estimation/B09_frontend.md", + "source_location": "L32", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b09_estimation_b09_frontend_b09_estimation_frontend", + "target": "pages_b09_estimation_b09_frontend_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B09_Estimation/B09_frontend.md", + "source_location": "L44", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b09_estimation_b09_frontend_b09_estimation_frontend", + "target": "pages_b09_estimation_b09_frontend_\ucc38\uace0", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B09_Estimation/B09_frontend.md", + "source_location": "L20", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b09_estimation_b09_frontend_b09_estimation_frontend", + "target": "pages_b09_estimation_b09_frontend_\ucef4\ud3ec\ub10c\ud2b8_\ud568\uc218", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B09_Estimation/B09_frontend.md", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b09_estimation_b09_frontend_b09_estimation_frontend", + "target": "pages_b09_estimation_b09_frontend_\ud30c\uc77c_\uad6c\uc870", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B09_Estimation/B09_overview_2026_09.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b09_estimation_b09_overview_2026_09", + "target": "pages_b09_estimation_b09_overview_2026_09_b09_estimation_2026_09_\uc6d0\uac00\uacc4\uc0b0", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B09_Estimation/B09_overview_2026_09.md", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b09_estimation_b09_overview_2026_09_b09_estimation_2026_09_\uc6d0\uac00\uacc4\uc0b0", + "target": "pages_b09_estimation_b09_overview_2026_09_\uad6c\ud604_\uad6c\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B09_Estimation/B09_overview_2026_09.md", + "source_location": "L26", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b09_estimation_b09_overview_2026_09_b09_estimation_2026_09_\uc6d0\uac00\uacc4\uc0b0", + "target": "pages_b09_estimation_b09_overview_2026_09_\ub9c8\uac10_\uae30\ub85d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B09_Estimation/B09_overview_2026_09.md", + "source_location": "L35", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b09_estimation_b09_overview_2026_09_b09_estimation_2026_09_\uc6d0\uac00\uacc4\uc0b0", + "target": "pages_b09_estimation_b09_overview_2026_09_\uc644\ub8cc_\uacbd\uacc4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B09_Estimation/frontend/B09_Estimation_UI_Page.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b09_estimation_frontend_b09_estimation_ui_page", + "target": "pages_b09_estimation_frontend_b09_estimation_ui_page_b09_estimation_ui_page_ts", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B09_Estimation/frontend/B09_Estimation_UI_Page.md", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b09_estimation_frontend_b09_estimation_ui_page_b09_estimation_ui_page_ts", + "target": "pages_b09_estimation_frontend_b09_estimation_ui_page_\uc8fc\uc694_\ud568\uc218_\ubaa9\ub85d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B10_Payment/B10_frontend.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b10_payment_b10_frontend", + "target": "pages_b10_payment_b10_frontend_b10_payment_frontend", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B10_Payment/B10_frontend.md", + "source_location": "L32", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b10_payment_b10_frontend_b10_payment_frontend", + "target": "pages_b10_payment_b10_frontend_\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B10_Payment/B10_frontend.md", + "source_location": "L27", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b10_payment_b10_frontend_b10_payment_frontend", + "target": "pages_b10_payment_b10_frontend_\ube44\uc988\ub2c8\uc2a4_\ub85c\uc9c1_\uc804\uc81c_\ubaa9\uc5c5", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B10_Payment/B10_frontend.md", + "source_location": "L41", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b10_payment_b10_frontend_b10_payment_frontend", + "target": "pages_b10_payment_b10_frontend_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B10_Payment/B10_frontend.md", + "source_location": "L20", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b10_payment_b10_frontend_b10_payment_frontend", + "target": "pages_b10_payment_b10_frontend_\uc8fc\uc694_\ucef4\ud3ec\ub10c\ud2b8_\ubc0f_\ud568\uc218_mockup", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B10_Payment/B10_frontend.md", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b10_payment_b10_frontend_b10_payment_frontend", + "target": "pages_b10_payment_b10_frontend_\ud30c\uc77c_\uad6c\uc870", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B10_Payment/frontend/B10_Payment_UI_Page.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b10_payment_frontend_b10_payment_ui_page", + "target": "pages_b10_payment_frontend_b10_payment_ui_page_b10_payment_ui_page_ts", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B10_Payment/frontend/B10_Payment_UI_Page.md", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b10_payment_frontend_b10_payment_ui_page_b10_payment_ui_page_ts", + "target": "pages_b10_payment_frontend_b10_payment_ui_page_\uc8fc\uc694_\ud568\uc218_\ubaa9\ub85d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B11_Status/B11_frontend.md", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b11_status_b11_frontend", + "target": "pages_b11_status_b11_frontend_b11_status_frontend", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B11_Status/B11_frontend.md", + "source_location": "L29", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b11_status_b11_frontend_b11_status_frontend", + "target": "pages_b11_status_b11_frontend_\uacb0\uc7ac_\uc0c1\ud0dc_\ud750\ub984_payment_flow_status", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B11_Status/B11_frontend.md", + "source_location": "L35", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b11_status_b11_frontend_b11_status_frontend", + "target": "pages_b11_status_b11_frontend_\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B11_Status/B11_frontend.md", + "source_location": "L44", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b11_status_b11_frontend_b11_status_frontend", + "target": "pages_b11_status_b11_frontend_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B11_Status/B11_frontend.md", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b11_status_b11_frontend_b11_status_frontend", + "target": "pages_b11_status_b11_frontend_\uc8fc\uc694_\ucef4\ud3ec\ub10c\ud2b8_\ubc0f_\uae30\ub2a5_mockup", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B11_Status/B11_frontend.md", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b11_status_b11_frontend_b11_status_frontend", + "target": "pages_b11_status_b11_frontend_\ud30c\uc77c_\uad6c\uc870", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B11_Status/frontend/B11_Status_UI_Page.md", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b11_status_frontend_b11_status_ui_page", + "target": "pages_b11_status_frontend_b11_status_ui_page_b11_status_ui_page_ts", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B11_Status/frontend/B11_Status_UI_Page.md", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "source": "pages_b11_status_frontend_b11_status_ui_page_b11_status_ui_page_ts", + "target": "pages_b11_status_frontend_b11_status_ui_page_\uc8fc\uc694_\ud568\uc218_\ubaa9\ub85d", + "confidence_score": 1.0 + } + ], + "hyperedges": [ + { + "id": "workflow_b03_b08_integration", + "label": "B03-B08 Workflow Data Flow", + "nodes": [ + "b03_fileinput_route_snapshot_crs", + "b04_preprocess_drainage_compass_crs", + "b05_profile_frontend", + "b06_section_cross_design_ui_2026_09", + "b08_designdetail_frontend" + ], + "relation": "participate_in", + "confidence": "INFERRED", + "confidence_score": 0.9, + "source_file": "index.md" + }, + { + "id": "mass_haul_shared_logic", + "label": "Shared Mass Haul Calculation and UI", + "nodes": [ + "b05_profile_masshaul_structure_2026_09", + "b06_section_masshaul_culvert_2026_09", + "b08_designdetail_cad_delivery_2026_09" + ], + "relation": "participate_in", + "confidence": "EXTRACTED", + "confidence_score": 0.85, + "source_file": "pages/B05_Profile/B05_masshaul_structure_2026_09.md" + }, + { + "id": "cad_delivery_system", + "label": "CAD Delivery and Usability Framework", + "nodes": [ + "b08_designdetail_cad_interaction", + "b08_designdetail_cad_title_block", + "b08_designdetail_cad_usability_2026_09_01", + "b08_designdetail_cad_delivery_2026_09" + ], + "relation": "form", + "confidence": "EXTRACTED", + "confidence_score": 0.95, + "source_file": "pages/B08_DesignDetail/B08_cad_delivery_2026_09.md" + }, + { + "id": "las_free_workflow_chain", + "label": "LAS-Free Analysis Workflow", + "nodes": [ + "concepts_las_free_sheet_surface", + "pages_b03_fileinput_backend", + "pages_b04_preprocess_backend" + ], + "relation": "participate_in", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "concepts/las_free_sheet_surface.md" + }, + { + "id": "b08_drawing_generation_flow", + "label": "B08 Drawing Generation Flow", + "nodes": [ + "b08_designdetail_b08_designdetail_engine_cad_masshaul_py", + "b08_designdetail_b08_designdetail_engine_cad_basin_py", + "common_util_common_util_mass_haul_settle_ts" + ], + "relation": "participate_in", + "confidence": "EXTRACTED", + "confidence_score": 0.9, + "source_file": "pages/B08_DesignDetail/B08_drawing_masshaul_watershed.md" + }, + { + "id": "drainage_system_flow", + "label": "Drainage System Workflow", + "nodes": [ + "concepts_drainage_watershed", + "pages_b05_profile_b05_structures", + "pages_b06_section_b06_culvert_set", + "pages_b06_section_b06_culvert_geometry_redesign" + ], + "relation": "participate_in", + "confidence": "EXTRACTED", + "confidence_score": 0.95, + "source_file": "concepts/drainage_watershed.md" + }, + { + "id": "mass_haul_system", + "label": "Mass Haul Diagram System", + "nodes": [ + "concepts_mass_haul_diagram", + "pages_b06_section_b06_frontend", + "pages_b08_designdetail_b08_drawing_masshaul_watershed" + ], + "relation": "participate_in", + "confidence": "EXTRACTED", + "confidence_score": 0.9, + "source_file": "concepts/mass_haul_diagram.md" + }, + { + "id": "corridor_3d_generation", + "label": "3D Corridor Generation Flow", + "nodes": [ + "pages_b05_profile_b05_corridor_surface", + "pages_b05_profile_b05_corridor_plan_curves", + "pages_b05_profile_b05_corridor_cut_fill", + "pages_b05_profile_b05_corridor_patch_finish" + ], + "relation": "participate_in", + "confidence": "EXTRACTED", + "confidence_score": 0.9, + "source_file": "pages/B05_Profile/B05_corridor_surface.md" + }, + { + "id": "workflow_late_stages", + "label": "Late Workflow Stages (B07-B09)", + "nodes": [ + "pages_b07_quantity_b07_frontend", + "pages_b08_designdetail_b08_frontend", + "pages_b09_estimation_b09_frontend" + ], + "relation": "participate_in", + "confidence": "EXTRACTED", + "confidence_score": 1.0 + } + ], + "built_at_commit": "e49e4d8526c0c6fc08d488546cda8445dbea1a31" +} \ No newline at end of file diff --git a/docs/wiki/graphify-out/2026-09-12/manifest.json b/docs/wiki/graphify-out/2026-09-12/manifest.json new file mode 100644 index 00000000..d6205d55 --- /dev/null +++ b/docs/wiki/graphify-out/2026-09-12/manifest.json @@ -0,0 +1,1077 @@ +{ + "AGENTS.md": { + "mtime": 1786880751.6641867, + "ast_hash": "8c14c5a30d4d9389a046a086add3d0af", + "semantic_hash": "8c14c5a30d4d9389a046a086add3d0af" + }, + "CLAUDE.md": { + "mtime": 1786880752.3813233, + "ast_hash": "8c14c5a30d4d9389a046a086add3d0af", + "semantic_hash": "8c14c5a30d4d9389a046a086add3d0af" + }, + "architecture/project_map.md": { + "mtime": 1789128566.0330584, + "ast_hash": "556476458393d44feffa512e450b479e", + "semantic_hash": "" + }, + "architecture/public_admin_map.md": { + "mtime": 1789128566.034232, + "ast_hash": "2447c32a67951819086761e51d6d5102", + "semantic_hash": "" + }, + "architecture/shared_resources.md": { + "mtime": 1789128566.0356302, + "ast_hash": "cdeed43bee12484ec7cfac72071a7b0a", + "semantic_hash": "" + }, + "architecture/workflow_data_flow.md": { + "mtime": 1789128566.0356302, + "ast_hash": "1b92d912c7e8e0f22e23148f2ef687cb", + "semantic_hash": "" + }, + "concepts/a00_app_shell_framework.md": { + "mtime": 1789128566.0366566, + "ast_hash": "95fc25921a9b093d5f36d4fb6349288b", + "semantic_hash": "" + }, + "concepts/a00_app_shell_framework_scaffold.md": { + "mtime": 1789128566.0377986, + "ast_hash": "dbdb757e2c768a7113287507b57b18b0", + "semantic_hash": "" + }, + "concepts/api_common.md": { + "mtime": 1789128566.0388083, + "ast_hash": "171549ac76cc4b6b3519a63fe415b56e", + "semantic_hash": "" + }, + "concepts/auth_rbac.md": { + "mtime": 1789128566.0398786, + "ast_hash": "075229c640d39ac3fc1259be1db52215", + "semantic_hash": "" + }, + "concepts/b07_external_webcad_demos.md": { + "mtime": 1789128566.0408757, + "ast_hash": "7d7092662d0cf393ad2cc0d0554266fe", + "semantic_hash": "" + }, + "concepts/common_util.md": { + "mtime": 1789128566.1206372, + "ast_hash": "bb48aa43cb6fadf2e4301fcbad6c5fa6", + "semantic_hash": "" + }, + "concepts/common_util/common_util_project_delete.md": { + "mtime": 1789128566.121634, + "ast_hash": "620a44fb84ccb212cea2712e1b7f084b", + "semantic_hash": "" + }, + "concepts/common_util/common_util_storage.md": { + "mtime": 1789128566.12285, + "ast_hash": "79cc1feaede8179e4c864b9a23a0a57a", + "semantic_hash": "" + }, + "concepts/common_util/common_util_workflow_state.md": { + "mtime": 1789128566.12285, + "ast_hash": "9d9f0d554b0fbdc2eddb9e6d8d589d28", + "semantic_hash": "" + }, + "concepts/crs_metadata.md": { + "mtime": 1789128566.1300607, + "ast_hash": "032f1f7737a80af043bd2566d74c52b7", + "semantic_hash": "" + }, + "concepts/db_schema/files_surface.md": { + "mtime": 1789128566.131064, + "ast_hash": "a9ab97a793f6b3384f6674513ffc81c4", + "semantic_hash": "" + }, + "concepts/db_schema/logs_monitoring.md": { + "mtime": 1789128566.1321313, + "ast_hash": "483c75e4cc63ee236ed5624906f65e2a", + "semantic_hash": "" + }, + "concepts/db_schema/overview.md": { + "mtime": 1789128566.1321313, + "ast_hash": "465734d377e1c3419162c7fd5843b267", + "semantic_hash": "" + }, + "concepts/db_schema/projects.md": { + "mtime": 1789128566.1336615, + "ast_hash": "d461dae8f46a9cbca107a08d23f34bf0", + "semantic_hash": "" + }, + "concepts/db_schema/route_profile.md": { + "mtime": 1789128566.1336615, + "ast_hash": "07a31167bc60a798f5f7133f7a7ad26f", + "semantic_hash": "" + }, + "concepts/db_schema/route_profile/longitudinal_alignment.md": { + "mtime": 1789128566.136254, + "ast_hash": "5b909c2f3029fadf5a33de6563437a1d", + "semantic_hash": "" + }, + "concepts/db_schema/structure_output.md": { + "mtime": 1789128566.1373663, + "ast_hash": "6eb1b8feb2b81006ccb50360ea3f1062", + "semantic_hash": "" + }, + "concepts/db_schema/unconfirmed/README.md": { + "mtime": 1789128566.1383636, + "ast_hash": "3ed0f883b27f3d7ea52aaf20f40b8f1a", + "semantic_hash": "" + }, + "concepts/db_schema/users_auth.md": { + "mtime": 1789128566.1394808, + "ast_hash": "77b34c3f175a1fe9e71aca5f178ab5b0", + "semantic_hash": "" + }, + "concepts/dependencies.md": { + "mtime": 1789128566.1394808, + "ast_hash": "a3396fdb66d38d4a73ca521d5a18f1b2", + "semantic_hash": "" + }, + "concepts/design.md": { + "mtime": 1789128566.1405194, + "ast_hash": "dc63c2d93bbfa77bee9387a068c98640", + "semantic_hash": "" + }, + "concepts/drainage_watershed.md": { + "mtime": 1789128566.141651, + "ast_hash": "43a403e9b54273b65d5c34c3861c501c", + "semantic_hash": "" + }, + "concepts/law_source_quality.md": { + "mtime": 1789128566.1426482, + "ast_hash": "c52d09989d899c7a895c478efc34041a", + "semantic_hash": "" + }, + "concepts/mass_haul_diagram.md": { + "mtime": 1789128566.1437485, + "ast_hash": "a92a1232a2a992e546787cb6a5298a8d", + "semantic_hash": "" + }, + "concepts/schema_common.md": { + "mtime": 1789128566.1459785, + "ast_hash": "9e6cf4ff97b652234f9c3b84d05b9fdf", + "semantic_hash": "" + }, + "concepts/storage_paths.md": { + "mtime": 1789128566.1483488, + "ast_hash": "7dd43770b71fd5e3cc8170f6f5046097", + "semantic_hash": "" + }, + "concepts/temp_upload.md": { + "mtime": 1789128566.1493528, + "ast_hash": "da65faea55cfd3ba3278a6a76bb363ad", + "semantic_hash": "" + }, + "concepts/ui_templates.md": { + "mtime": 1789128566.1507905, + "ast_hash": "731ff804f065adeba7ca77a94bdad77b", + "semantic_hash": "" + }, + "concepts/workflow_state.md": { + "mtime": 1789128566.151879, + "ast_hash": "b16b89ab0947a7f22c6563816c2d7a64", + "semantic_hash": "" + }, + "index.md": { + "mtime": 1789132135.2547836, + "ast_hash": "07f8a8513e83d93de0bf992e1fc4e501", + "semantic_hash": "" + }, + "ingest/index.md": { + "mtime": 1786880981.4434, + "ast_hash": "e8b3c3d26ba092de3aedde1f46dd60f8", + "semantic_hash": "e8b3c3d26ba092de3aedde1f46dd60f8" + }, + "ingest/plan_2026_07.md": { + "mtime": 1786880981.419769, + "ast_hash": "ece97b7cfa1eac6b908f90e9101ecca7", + "semantic_hash": "ece97b7cfa1eac6b908f90e9101ecca7" + }, + "ingest/plan_2026_08.md": { + "mtime": 1786880981.4207659, + "ast_hash": "02c8befd6598478fd00387c309b17f08", + "semantic_hash": "02c8befd6598478fd00387c309b17f08" + }, + "ingest/plan_undated.md": { + "mtime": 1786880981.4217622, + "ast_hash": "a3ad1c0ba0fd76411040506899b2e813", + "semantic_hash": "a3ad1c0ba0fd76411040506899b2e813" + }, + "ingest/verification_2026_07.md": { + "mtime": 1786880981.4237561, + "ast_hash": "497f8801e69d22503224cc0b172ed0be", + "semantic_hash": "497f8801e69d22503224cc0b172ed0be" + }, + "ingest/verification_2026_08.md": { + "mtime": 1786880981.4247527, + "ast_hash": "a602400bb7ce84048c5d781e44111865", + "semantic_hash": "a602400bb7ce84048c5d781e44111865" + }, + "log.md": { + "mtime": 1786881299.4302566, + "ast_hash": "95e0f5f93abefcafc03cfb81ca629fa9", + "semantic_hash": "95e0f5f93abefcafc03cfb81ca629fa9" + }, + "pages/A00_Common/A00_Common.md": { + "mtime": 1789128566.8804462, + "ast_hash": "2ab3890901eeb5ffe678fa27fa3861c0", + "semantic_hash": "" + }, + "pages/A00_Common/frontend/A00_Common_AppShell.md": { + "mtime": 1789128566.882205, + "ast_hash": "a041f556de2ce40ed050fd4ab59f8532", + "semantic_hash": "" + }, + "pages/A00_Common/frontend/A00_Common_Router.md": { + "mtime": 1789128566.882205, + "ast_hash": "cef9f5f94d267e113da4b1dcf9152a9c", + "semantic_hash": "" + }, + "pages/A01_Home/A01_components.md": { + "mtime": 1789128566.883238, + "ast_hash": "d9ad46a928aa0f5117fe6039daf9ca31", + "semantic_hash": "" + }, + "pages/A01_Home/A01_frontend.md": { + "mtime": 1789128566.8842337, + "ast_hash": "623e409084424236968c6acbd4914108", + "semantic_hash": "" + }, + "pages/A01_Home/frontend/A01_Home_UI_Page.md": { + "mtime": 1789128566.8842337, + "ast_hash": "d0f1616b1ef6297bcb84cacc684ec902", + "semantic_hash": "" + }, + "pages/A02_ProgDetail/A02_components.md": { + "mtime": 1789128566.886198, + "ast_hash": "5c5bd6b0af702819b5ff6b2a6cb1339f", + "semantic_hash": "" + }, + "pages/A02_ProgDetail/A02_frontend.md": { + "mtime": 1789128566.8872313, + "ast_hash": "2f9844d58386d5dd6e9a0eb7188e9fa8", + "semantic_hash": "" + }, + "pages/A02_ProgDetail/frontend/A02_ProgDetail_UI_Page.md": { + "mtime": 1789128566.8882287, + "ast_hash": "d9f42bce9ca5aae43942650c4afdddda", + "semantic_hash": "" + }, + "pages/A03_CompDetail/A03_frontend.md": { + "mtime": 1789128566.8887608, + "ast_hash": "dad3aa0aa50b5f2707b349a020494ee3", + "semantic_hash": "" + }, + "pages/A04_NewsHistory/A04_frontend.md": { + "mtime": 1789128566.8897903, + "ast_hash": "0f18979b25fd7e002827b03883702798", + "semantic_hash": "" + }, + "pages/A05_EduDetail/A05_frontend.md": { + "mtime": 1789128566.8908274, + "ast_hash": "07b546c7cf59811a8c3bbbd46a8f4cbd", + "semantic_hash": "" + }, + "pages/A06_Login/A06_backend.md": { + "mtime": 1789128566.8931077, + "ast_hash": "f3f0b8a5e738fb1f44993f7ae468dd47", + "semantic_hash": "" + }, + "pages/A06_Login/A06_frontend.md": { + "mtime": 1789128566.894197, + "ast_hash": "ec2f570016c9117fb40e66b1607fc4cd", + "semantic_hash": "" + }, + "pages/A06_Login/backend/A06_Login_Router.md": { + "mtime": 1789128566.8952265, + "ast_hash": "99da12b382fbe1f0821c078f7a6aae7c", + "semantic_hash": "" + }, + "pages/A07_Register/A07_backend.md": { + "mtime": 1789128566.8962512, + "ast_hash": "92a7892eb9565cd7b01acf37aef2f568", + "semantic_hash": "" + }, + "pages/A07_Register/A07_frontend.md": { + "mtime": 1789128566.8962512, + "ast_hash": "5ffaea054363fa85a6bd0934e9c61aea", + "semantic_hash": "" + }, + "pages/A07_Register/backend/A07_Register_Router.md": { + "mtime": 1789128566.8972814, + "ast_hash": "632cd0718771c89b51c4b414e565ef34", + "semantic_hash": "" + }, + "pages/A08_Support/A08_backend.md": { + "mtime": 1789128566.8984466, + "ast_hash": "68598d433fbf69cfa14aff3599285db1", + "semantic_hash": "" + }, + "pages/A08_Support/A08_frontend.md": { + "mtime": 1789128566.8994758, + "ast_hash": "138ecc14ea2a5225e76444011821937d", + "semantic_hash": "" + }, + "pages/A08_Support/backend/A08_Support_Router.md": { + "mtime": 1789128566.9005065, + "ast_hash": "3a74550b70be24659ea268e7edfa4b91", + "semantic_hash": "" + }, + "pages/A09_Security/A09_backend.md": { + "mtime": 1789128566.9005065, + "ast_hash": "13a6df75b7593a805d7ae63949be1db8", + "semantic_hash": "" + }, + "pages/A09_Security/A09_frontend.md": { + "mtime": 1789128566.901871, + "ast_hash": "e6e961fb2aece3948754b9d373ad7074", + "semantic_hash": "" + }, + "pages/A09_Security/backend/A09_Security_Router.md": { + "mtime": 1789128566.9032304, + "ast_hash": "7e9f6455dd265a7cec867d6a767b5bff", + "semantic_hash": "" + }, + "pages/B01_Dashboard/B01_api.md": { + "mtime": 1789128566.9042604, + "ast_hash": "8dbbb4bf6ce733ccba9baddc63182827", + "semantic_hash": "" + }, + "pages/B01_Dashboard/B01_backend.md": { + "mtime": 1789128566.9042604, + "ast_hash": "e4b4238b22495c5fead0ae01d8bf82b9", + "semantic_hash": "" + }, + "pages/B01_Dashboard/B01_db.md": { + "mtime": 1789128566.9052906, + "ast_hash": "2a01ad9cd3120ee0a15c799f46f88482", + "semantic_hash": "" + }, + "pages/B01_Dashboard/B01_dependencies.md": { + "mtime": 1789128566.906322, + "ast_hash": "ad3827744464d69084b0dd2313acc929", + "semantic_hash": "" + }, + "pages/B01_Dashboard/B01_frontend.md": { + "mtime": 1789128566.906322, + "ast_hash": "656e77f2ce3f494ecb7da6cd4b07bcad", + "semantic_hash": "" + }, + "pages/B01_Dashboard/backend/B01_Dashboard_Router.md": { + "mtime": 1789128566.907354, + "ast_hash": "bf66149cd28dbe909b8c09021c317822", + "semantic_hash": "" + }, + "pages/B01_Dashboard/frontend/B01_Dashboard_UI_Page.md": { + "mtime": 1789128566.9095776, + "ast_hash": "2474b511d02c55094fc632b7d358a36c", + "semantic_hash": "" + }, + "pages/B02_ProjRegister/B02_backend.md": { + "mtime": 1789128566.9106069, + "ast_hash": "bcdc0c49f83922b62d10a89ebe5c43cd", + "semantic_hash": "" + }, + "pages/B02_ProjRegister/B02_db.md": { + "mtime": 1789128566.9106069, + "ast_hash": "a235253f5f15efb35d067c9f9c33090c", + "semantic_hash": "" + }, + "pages/B02_ProjRegister/B02_frontend.md": { + "mtime": 1789128566.9116426, + "ast_hash": "e7fbc2dc9a93648a5257b13116443d67", + "semantic_hash": "" + }, + "pages/B02_ProjRegister/backend/B02_ProjRegister_Router.md": { + "mtime": 1789128566.9126716, + "ast_hash": "d706994f57c209989fd67802b9e20665", + "semantic_hash": "" + }, + "pages/B03_FileInput/B03_api.md": { + "mtime": 1789128566.9147072, + "ast_hash": "dcce30661366d6d337ee7eb5f13ccfb3", + "semantic_hash": "" + }, + "pages/B03_FileInput/B03_backend.md": { + "mtime": 1789128566.9147072, + "ast_hash": "09f9f905961ed71afbfc9171760c6cd3", + "semantic_hash": "" + }, + "pages/B03_FileInput/B03_db.md": { + "mtime": 1789128566.9157364, + "ast_hash": "b9a93148547ab081ddcab04c5cb45917", + "semantic_hash": "" + }, + "pages/B03_FileInput/B03_dependencies.md": { + "mtime": 1789128566.9167657, + "ast_hash": "4f52854d54cc3093db4f98ccbec119ab", + "semantic_hash": "" + }, + "pages/B03_FileInput/B03_frontend.md": { + "mtime": 1789128566.9178221, + "ast_hash": "057f6a0ed3fa7d0a301f39a400bd5fa2", + "semantic_hash": "" + }, + "pages/B03_FileInput/backend/B03_FileInput_Router.md": { + "mtime": 1789128566.91939, + "ast_hash": "a01bb338bbb43f5f753abf3300463f31", + "semantic_hash": "" + }, + "pages/B04_PreProcess/B04_api.md": { + "mtime": 1789128566.9210112, + "ast_hash": "4bc2f848ae6d73f1ae63bf735e231f28", + "semantic_hash": "" + }, + "pages/B04_PreProcess/B04_backend.md": { + "mtime": 1789128566.922044, + "ast_hash": "eaca55917c4db8061521367d5c6092bd", + "semantic_hash": "" + }, + "pages/B04_PreProcess/B04_db.md": { + "mtime": 1789128566.9230742, + "ast_hash": "0a6239371cb6d0cd27cab87b917d8cab", + "semantic_hash": "" + }, + "pages/B04_PreProcess/B04_dependencies.md": { + "mtime": 1789128566.9230742, + "ast_hash": "f64d8f377023a8a69a30c4eb64d49d68", + "semantic_hash": "" + }, + "pages/B04_PreProcess/B04_frontend.md": { + "mtime": 1789128566.926253, + "ast_hash": "8305038e8f67b45f2540aabf5c52729b", + "semantic_hash": "" + }, + "pages/B04_PreProcess/backend/B04_PreProcess_Router.md": { + "mtime": 1789128566.926253, + "ast_hash": "214f958dcbfc43bee90543a72af0726d", + "semantic_hash": "" + }, + "pages/B05_Profile/B05_api.md": { + "mtime": 1789128566.929742, + "ast_hash": "8dd7da3b7c1bfa2e62ef78f17ef5f4c9", + "semantic_hash": "" + }, + "pages/B05_Profile/B05_backend.md": { + "mtime": 1789128566.929742, + "ast_hash": "90866d9f1be3ff6d046483549fb8eb1b", + "semantic_hash": "" + }, + "pages/B05_Profile/B05_db.md": { + "mtime": 1789128566.9358027, + "ast_hash": "9f46099c2f4a7875cfd406ab4afbe0b6", + "semantic_hash": "" + }, + "pages/B05_Profile/B05_dependencies.md": { + "mtime": 1789128566.9368322, + "ast_hash": "dd15b073981102040a28812d13592cf3", + "semantic_hash": "" + }, + "pages/B05_Profile/B05_frontend.md": { + "mtime": 1789128566.9368322, + "ast_hash": "ef06bb5899a70164e3f156cc3dadd4cd", + "semantic_hash": "" + }, + "pages/B05_Profile/B05_frontend_alignment.md": { + "mtime": 1789128566.9378617, + "ast_hash": "32b80449cb3cd67368fb4f69179ec4a2", + "semantic_hash": "" + }, + "pages/B05_Profile/B05_frontend_viewer.md": { + "mtime": 1789128566.938891, + "ast_hash": "40775b0f7a22c56e3f0e6358d21855ba", + "semantic_hash": "" + }, + "pages/B05_Profile/backend/B05_Profile_Engine_Grade.md": { + "mtime": 1789128566.9429348, + "ast_hash": "72a0565b76780144688b1bab11fc09c8", + "semantic_hash": "" + }, + "pages/B05_Profile/backend/B05_Profile_Engine_Sections.md": { + "mtime": 1789128566.9429348, + "ast_hash": "6fe528c12cf5a4be018afa459882da17", + "semantic_hash": "" + }, + "pages/B05_Profile/backend/B05_Profile_Engine_Solver.md": { + "mtime": 1789128566.9444456, + "ast_hash": "af2449cd314f670a9914d2b6f8f45316", + "semantic_hash": "" + }, + "pages/B05_Profile/backend/B05_Profile_Repository.md": { + "mtime": 1789128566.9444456, + "ast_hash": "43663b53987979dd1d81f66010229e08", + "semantic_hash": "" + }, + "pages/B05_Profile/backend/B05_Profile_Router.md": { + "mtime": 1789128566.9460983, + "ast_hash": "00dd21c88d6c0324f96df0f6b9a7d084", + "semantic_hash": "" + }, + "pages/B05_Profile/backend/B05_Profile_Router_Confirm.md": { + "mtime": 1789128566.9460983, + "ast_hash": "2a956ae11073eefb131e2a79de919141", + "semantic_hash": "" + }, + "pages/B05_Profile/backend/B05_Profile_Schema.md": { + "mtime": 1789128566.9474218, + "ast_hash": "1826639b9fd3c2f5d02c12019e3e1c12", + "semantic_hash": "" + }, + "pages/B05_Profile/frontend/B05_Profile_Api_Fetch.md": { + "mtime": 1789128566.9485497, + "ast_hash": "9f394566aa409a86eb324bdf5e79a5ec", + "semantic_hash": "" + }, + "pages/B05_Profile/frontend/B05_Profile_UI_Drainage_Panel.md": { + "mtime": 1789128566.9485497, + "ast_hash": "8356d99797f057b428525202055ea13d", + "semantic_hash": "" + }, + "pages/B05_Profile/frontend/B05_Profile_UI_Drainage_Parts.md": { + "mtime": 1789128566.9498687, + "ast_hash": "ee98fcb82a232162bce5b33405ff651d", + "semantic_hash": "" + }, + "pages/B05_Profile/frontend/B05_Profile_UI_Drainage_Pipes.md": { + "mtime": 1789128566.9498687, + "ast_hash": "733b5c1d6dbb0fe2aef0c5cf535fda0e", + "semantic_hash": "" + }, + "pages/B05_Profile/frontend/B05_Profile_UI_IrregularStations.md": { + "mtime": 1789128566.9517138, + "ast_hash": "713a82973b6a9ef871f111aa4a3dbbfc", + "semantic_hash": "" + }, + "pages/B05_Profile/frontend/B05_Profile_UI_Page.md": { + "mtime": 1789128566.9517138, + "ast_hash": "2babbfa4485a3671a57f087781a6b0d7", + "semantic_hash": "" + }, + "pages/B05_Profile/frontend/B05_Profile_UI_Panel.md": { + "mtime": 1789128566.9527416, + "ast_hash": "9d9296fc53e90b1980dd29f73444d2f1", + "semantic_hash": "" + }, + "pages/B05_Profile/frontend/B05_Profile_UI_Profile_Alignment.md": { + "mtime": 1789128566.9537709, + "ast_hash": "56e8f60166bdb4313f4364e4141d693b", + "semantic_hash": "" + }, + "pages/B05_Profile/frontend/B05_Profile_UI_Profile_Panel.md": { + "mtime": 1789128566.9537709, + "ast_hash": "653e90ca70da5e2cf2d5eed4c52a3eec", + "semantic_hash": "" + }, + "pages/B05_Profile/frontend/B05_Profile_UI_Profile_Table.md": { + "mtime": 1789128566.954801, + "ast_hash": "a155d5251d7706b88470cf41722b5631", + "semantic_hash": "" + }, + "pages/B05_Profile/frontend/B05_Profile_UI_Viewer.md": { + "mtime": 1789128566.954801, + "ast_hash": "f7c23f168db9ba637c21a2a3186542b8", + "semantic_hash": "" + }, + "pages/B05_Profile/frontend/_UI_Drainage_Render.md": { + "mtime": 1789128566.9563303, + "ast_hash": "30bc6a3980a1c680efeaa57bec1b2d58", + "semantic_hash": "" + }, + "pages/B05_Profile/frontend/_UI_Profile_Structures.md": { + "mtime": 1789128566.9563303, + "ast_hash": "2244de8d5b823842e819c5c81277a99a", + "semantic_hash": "" + }, + "pages/B05_Profile/frontend/_UI_Selection.md": { + "mtime": 1789128566.9563303, + "ast_hash": "d0b8ce4096aa69359dc1eaa403a40885", + "semantic_hash": "" + }, + "pages/B06_Section/B06_api.md": { + "mtime": 1789128566.9591234, + "ast_hash": "162e2c5818225cd09cd1f83560d4df57", + "semantic_hash": "" + }, + "pages/B06_Section/B06_backend.md": { + "mtime": 1789128566.9591234, + "ast_hash": "e7ad7db499c848cecb8d26fdde5a9b0c", + "semantic_hash": "" + }, + "pages/B06_Section/B06_db.md": { + "mtime": 1789128566.9650776, + "ast_hash": "8d323cb3f7e0f0e77f1795a048443f0c", + "semantic_hash": "" + }, + "pages/B06_Section/B06_dependencies.md": { + "mtime": 1789128566.9650776, + "ast_hash": "48fe89c8994726ef652caca047c81972", + "semantic_hash": "" + }, + "pages/B06_Section/B06_frontend.md": { + "mtime": 1789128566.9661217, + "ast_hash": "80d30b59115f60e34fc8567d8df06034", + "semantic_hash": "" + }, + "pages/B06_Section/backend/B06_Section_Engine_Areas.md": { + "mtime": 1789128566.9695668, + "ast_hash": "ee35d20c5555247061e0c2d5336313c5", + "semantic_hash": "" + }, + "pages/B06_Section/backend/B06_Section_Router.md": { + "mtime": 1789128566.9695668, + "ast_hash": "613b07a4510075787ae9b016842341e6", + "semantic_hash": "" + }, + "pages/B06_Section/backend/B06_Section_Router_Confirm.md": { + "mtime": 1789128566.9705968, + "ast_hash": "00014f0349db1a8fb783aaaad0d68c9e", + "semantic_hash": "" + }, + "pages/B06_Section/frontend/B06_Section_Api_Fetch.md": { + "mtime": 1789128566.9716263, + "ast_hash": "4c32a1d0dcfe1b090995bb36494f9b12", + "semantic_hash": "" + }, + "pages/B06_Section/frontend/B06_Section_UI_Cross_Areas.md": { + "mtime": 1789128566.972881, + "ast_hash": "8c8949f1137f72a001fd53a891d90ccc", + "semantic_hash": "" + }, + "pages/B06_Section/frontend/B06_Section_UI_Cross_Design.md": { + "mtime": 1789128566.972881, + "ast_hash": "e6571abc6f6474f25533c39246907ae8", + "semantic_hash": "" + }, + "pages/B06_Section/frontend/B06_Section_UI_MassHaul.md": { + "mtime": 1789128566.9739103, + "ast_hash": "790cf0dd68ffdb97b83d9510e71961ee", + "semantic_hash": "" + }, + "pages/B06_Section/frontend/B06_Section_UI_MassHaul_Balance.md": { + "mtime": 1789128566.9751294, + "ast_hash": "0d762cbabf338f63a5ee31e839363f87", + "semantic_hash": "" + }, + "pages/B06_Section/frontend/B06_Section_UI_MassHaul_Balance_View.md": { + "mtime": 1789128566.9751294, + "ast_hash": "e57b0e3d780c8347f42ba99ad08e65a6", + "semantic_hash": "" + }, + "pages/B06_Section/frontend/B06_Section_UI_MassHaul_Balloon.md": { + "mtime": 1789128566.9761593, + "ast_hash": "e0529db307ddb7ab030f7afefe3e6769", + "semantic_hash": "" + }, + "pages/B06_Section/frontend/B06_Section_UI_MassHaul_Curve.md": { + "mtime": 1789128566.9761593, + "ast_hash": "f46c53039b0eb5e166d7141d861f808e", + "semantic_hash": "" + }, + "pages/B06_Section/frontend/B06_Section_UI_MassHaul_Settle.md": { + "mtime": 1789128566.9777, + "ast_hash": "4a4f56b719c74469f75078a94aceb1fd", + "semantic_hash": "" + }, + "pages/B06_Section/frontend/B06_Section_UI_MassHaul_View.md": { + "mtime": 1789128566.9777, + "ast_hash": "c741040837a40f681299d797c43ac264", + "semantic_hash": "" + }, + "pages/B06_Section/frontend/B06_Section_UI_Page.md": { + "mtime": 1789128566.9787335, + "ast_hash": "bda68e406ae303ef51c42709ce1e8693", + "semantic_hash": "" + }, + "pages/B06_Section/frontend/B06_Section_UI_Section_View.md": { + "mtime": 1789128566.9797654, + "ast_hash": "fda0e89969fe56af394ff9c93c133fda", + "semantic_hash": "" + }, + "pages/B06_Section/frontend/B06_Section_UI_Standard_Diagram.md": { + "mtime": 1789128566.9797654, + "ast_hash": "01311a8a96f936eee996ed66c6e5418d", + "semantic_hash": "" + }, + "pages/B06_Section/frontend/B06_Section_UI_Standard_Panel.md": { + "mtime": 1789128566.980803, + "ast_hash": "5cb970fa935a895f092d7a58aac8dec3", + "semantic_hash": "" + }, + "pages/B07_Quantity/B07_backend.md": { + "mtime": 1789128566.9833684, + "ast_hash": "ef914dcacd4706d85a8194c5cd6ee53b", + "semantic_hash": "" + }, + "pages/B07_Quantity/B07_db.md": { + "mtime": 1789128566.9843976, + "ast_hash": "1c7a6551fd32362cf31b2744cf5df882", + "semantic_hash": "" + }, + "pages/B07_Quantity/B07_frontend.md": { + "mtime": 1789128566.9843976, + "ast_hash": "cf6d51de0255223633d9682cbfe509f2", + "semantic_hash": "" + }, + "pages/B07_Quantity/backend/B07_Quantity_Router.md": { + "mtime": 1789128566.985431, + "ast_hash": "52baff29f347e331a62e87d08f4b5c3f", + "semantic_hash": "" + }, + "pages/B08_DesignDetail/B08_api.md": { + "mtime": 1789128566.990934, + "ast_hash": "c16c3df1ed047b7cbb2719c0f6aaf97f", + "semantic_hash": "" + }, + "pages/B08_DesignDetail/B08_backend.md": { + "mtime": 1789128566.9920056, + "ast_hash": "890ff75b5cbedf2c60badee792fb1120", + "semantic_hash": "" + }, + "pages/B08_DesignDetail/B08_dependencies.md": { + "mtime": 1789128566.9940667, + "ast_hash": "a9a509c01674a3ed682c3d19f7c79186", + "semantic_hash": "" + }, + "pages/B08_DesignDetail/B08_frontend.md": { + "mtime": 1789128566.9950993, + "ast_hash": "af29b90c6a47b40d9ef1fc9fbfadb73b", + "semantic_hash": "" + }, + "pages/B08_DesignDetail/backend/B08_DesignDetail_Router.md": { + "mtime": 1789128566.9961362, + "ast_hash": "500adff1cd1cdd5b17e70120fe70fefa", + "semantic_hash": "" + }, + "pages/B09_Estimation/B09_frontend.md": { + "mtime": 1789128566.9992309, + "ast_hash": "1f8442c69032a84e823c2dd883d58c05", + "semantic_hash": "" + }, + "pages/B09_Estimation/frontend/B09_Estimation_UI_Page.md": { + "mtime": 1789128567.0007586, + "ast_hash": "4271e2ac1a5497447cd0816eb28c3525", + "semantic_hash": "" + }, + "pages/B10_Payment/B10_frontend.md": { + "mtime": 1789128567.0018797, + "ast_hash": "9f05bb56ff1bfb69f8e5bcd3472b2b8b", + "semantic_hash": "" + }, + "pages/B10_Payment/frontend/B10_Payment_UI_Page.md": { + "mtime": 1789128567.00291, + "ast_hash": "fa1707215d5877fdcca75a66f01eff79", + "semantic_hash": "" + }, + "pages/B11_Status/B11_frontend.md": { + "mtime": 1789128567.00428, + "ast_hash": "add177612157e453315b739b5cf2d3d7", + "semantic_hash": "" + }, + "pages/B11_Status/frontend/B11_Status_UI_Page.md": { + "mtime": 1789128567.00428, + "ast_hash": "ff8c8cd2314dd6c4f99a28f59aca4ded", + "semantic_hash": "" + }, + "architecture/implementation_status.md": { + "mtime": 1789128566.0320876, + "ast_hash": "9ce18141b3eacedbae4027237bb20e3d", + "semantic_hash": "" + }, + "pages/B05_Profile/B05_structures.md": { + "mtime": 1789128566.941089, + "ast_hash": "8fab371726a9a36bbc2383e6f07cff78", + "semantic_hash": "" + }, + "pages/B03_FileInput/B03_FileInput_plan_lidar_multi_file.md": { + "mtime": 1789128566.9136775, + "ast_hash": "198df123415a00be0736da2d19878e58", + "semantic_hash": "" + }, + "pages/B05_Profile/B05_Profile_plan_2026-08-18.md": { + "mtime": 1789128566.9274814, + "ast_hash": "0f88733e35bd472679b103474738ad61", + "semantic_hash": "" + }, + "pages/B05_Profile/B05_Profile_plan_2026-08-19.md": { + "mtime": 1789128566.9287126, + "ast_hash": "e84251fd2b45d24ea643fb37ecb028a6", + "semantic_hash": "" + }, + "pages/B06_Section/B06_culvert_set.md": { + "mtime": 1789128566.9640477, + "ast_hash": "dcaa2893fec0b2de4a7e5b7551e485ff", + "semantic_hash": "" + }, + "pages/B06_Section/B06_culvert_geometry_redesign.md": { + "mtime": 1789128566.963012, + "ast_hash": "5af32c8d294ca253451aeb4e9fe8402d", + "semantic_hash": "" + }, + "graphify-out/memory/query_20260821_070423_\ubc30\uc218\uad00_\ub9e4\uc124\uc2dc_\uac01\ub3c4\uc758_\uc81c\uc57d\uc870\uac74\uc774_\uc788\ub294\uc9c0_\ud655\uc778\ud574\uc918__\uc784\ub3c4\uc5d0\uc11c.md": { + "mtime": 1789128566.8670497, + "ast_hash": "e073125b483de8cb64457554656f9b14", + "semantic_hash": "e073125b483de8cb64457554656f9b14" + }, + "graphify-out/memory/query_20260821_101018_\uc784\ub3c4_\uae30\uc220\uc815\ubcf4db\uc5d0\uc11c_\uc9d1\uc218\uc815\uc758_\ud615\ud0dc\uc815\ubcf4\ub294_\uc5b4\ub5a4\uac8c_\uc788\ub294\uc9c0_\ud655\uc778\ud574\uc918.md": { + "mtime": 1789128566.8685374, + "ast_hash": "ca308dce69cb1df8564e78562e1510da", + "semantic_hash": "ca308dce69cb1df8564e78562e1510da" + }, + "pages/B05_Profile/B05_completed_followups.md": { + "mtime": 1789128566.9307716, + "ast_hash": "3d3799d16a35f95eb6b6fe3e1e604e41", + "semantic_hash": "" + }, + "pages/B05_Profile/B05_corridor_cut_fill.md": { + "mtime": 1789128566.9321947, + "ast_hash": "6d2ee90b638c062bd60f790dedbc2469", + "semantic_hash": "" + }, + "pages/B05_Profile/B05_corridor_followup_decisions.md": { + "mtime": 1789128566.9321947, + "ast_hash": "494ccef2702bb10c1cb139278b5d0e0d", + "semantic_hash": "" + }, + "pages/B05_Profile/B05_corridor_patch_finish.md": { + "mtime": 1789128566.9332204, + "ast_hash": "f7ff542106b9b30ac9faa583e431478e", + "semantic_hash": "" + }, + "pages/B05_Profile/B05_corridor_plan_curves.md": { + "mtime": 1789128566.9342268, + "ast_hash": "88f541c819fe255e0623e1ccd3b9db39", + "semantic_hash": "" + }, + "pages/B05_Profile/B05_corridor_surface.md": { + "mtime": 1789128566.9347615, + "ast_hash": "d2d170015b3ba40dae79ccf701b0370b", + "semantic_hash": "" + }, + "pages/B05_Profile/B05_corridor_turn_correction_plan.md": { + "mtime": 1789128566.9347615, + "ast_hash": "4d2c4f8ca4631c7342460463f8c9bb9d", + "semantic_hash": "" + }, + "pages/B05_Profile/B05_structure_stations.md": { + "mtime": 1789128566.941089, + "ast_hash": "3f386a3989774ea8c4305daba155c4de", + "semantic_hash": "" + }, + "pages/B06_Section/B06_culvert_basin_multitier.md": { + "mtime": 1789128566.961233, + "ast_hash": "4b952cdbb8a242fee7a88e556067a6d0", + "semantic_hash": "" + }, + "pages/B06_Section/B06_culvert_controls.md": { + "mtime": 1789128566.961233, + "ast_hash": "458355e8c172d70b30b74a62b3f84ca6", + "semantic_hash": "" + }, + "pages/B06_Section/B06_culvert_link_trim.md": { + "mtime": 1789128566.963012, + "ast_hash": "5e2a8139b5266d10768bdf799d66bb58", + "semantic_hash": "" + }, + "pages/B06_Section/B06_pavement_revetment.md": { + "mtime": 1789128566.9671514, + "ast_hash": "7126b32d1e2b072011468d09db28314a", + "semantic_hash": "" + }, + "pages/B06_Section/B06_revetment_link_controls.md": { + "mtime": 1789128566.9685347, + "ast_hash": "b9de21f38709ecf26ad470077f8581bc", + "semantic_hash": "" + }, + "concepts/completed_2026-08-29.md": { + "mtime": 1789128566.123925, + "ast_hash": "49b7d6e68f7ead9f380d939d430dd4f3", + "semantic_hash": "" + }, + "pages/B08_DesignDetail/B08_CAD_commands.md": { + "mtime": 1789128566.9874978, + "ast_hash": "bada18cf4a30d79bccad214b4c0060f5", + "semantic_hash": "" + }, + "pages/B08_DesignDetail/B08_drawing_masshaul_watershed.md": { + "mtime": 1789128566.9940667, + "ast_hash": "3865c6a1704d9f14e37e94efa3f3f808", + "semantic_hash": "" + }, + "concepts/las_free_sheet_surface.md": { + "mtime": 1789128566.1426482, + "ast_hash": "2283d81ef85b6df8ddd49e6fa4015d37", + "semantic_hash": "" + }, + "pages/B08_DesignDetail/B08_CAD_blocks.md": { + "mtime": 1789128566.9864652, + "ast_hash": "96baa5233f674a8c063b181950a03bd4", + "semantic_hash": "" + }, + "pages/B08_DesignDetail/B08_CAD_interaction.md": { + "mtime": 1789128566.9874978, + "ast_hash": "a82f2edd469f871964307eb3400ece3a", + "semantic_hash": "" + }, + "pages/B08_DesignDetail/B08_CAD_table_entity.md": { + "mtime": 1789128566.988696, + "ast_hash": "e3683457d155656960abf4a83fddc59e", + "semantic_hash": "" + }, + "pages/B08_DesignDetail/B08_cross_structure_sheets.md": { + "mtime": 1789128566.9930353, + "ast_hash": "0097119b6cbf93f33d384ec1a2718b79", + "semantic_hash": "" + }, + "concepts/completed_2026-09-01.md": { + "mtime": 1789128566.1251893, + "ast_hash": "f604000f6a1cb351275f7d329ffe89c7", + "semantic_hash": "" + }, + "concepts/completed_2026-09-01_followups.md": { + "mtime": 1789128566.1251893, + "ast_hash": "e9fa4b8e6a30f0d44dc12e9a617360e6", + "semantic_hash": "" + }, + "pages/B08_DesignDetail/B08_CAD_usability_2026-09-01.md": { + "mtime": 1789128566.990934, + "ast_hash": "0f66282ce4a6af117bd4a12e986fc647", + "semantic_hash": "" + }, + "concepts/completed_2026-09-02.md": { + "mtime": 1789128566.1262252, + "ast_hash": "c7a47d32737bc041a8251a0a834fc2d3", + "semantic_hash": "" + }, + "pages/B08_DesignDetail/B08_CAD_title_block.md": { + "mtime": 1789128566.9897254, + "ast_hash": "585c9f4ff152d7153d589ef0d9b8b0fa", + "semantic_hash": "" + }, + "concepts/completed_2026-09-03.md": { + "mtime": 1789128566.1262252, + "ast_hash": "cdf69a63e6573417d27b653c3e31f52b", + "semantic_hash": "" + }, + "pages/B03_FileInput/B03_route_snapshot_crs.md": { + "mtime": 1789128566.9178221, + "ast_hash": "1f1e720215f07fc1918e52668d4884ef", + "semantic_hash": "" + }, + "pages/B04_PreProcess/B04_drainage_compass_crs.md": { + "mtime": 1789128566.9252558, + "ast_hash": "2d76a3f82e3de673d25f4a1e1eff8c76", + "semantic_hash": "" + }, + "pages/B05_Profile/B05_masshaul_structure_2026_09.md": { + "mtime": 1789128566.938891, + "ast_hash": "4efb11fb6395d21d86ab3c900d84fc24", + "semantic_hash": "" + }, + "pages/B06_Section/B06_masshaul_culvert_2026_09.md": { + "mtime": 1789128566.9671514, + "ast_hash": "5528e84861136e396670d53f5d4295d9", + "semantic_hash": "" + }, + "pages/B08_DesignDetail/B08_cad_delivery_2026_09.md": { + "mtime": 1789128566.9930353, + "ast_hash": "3255b756581c88b5ef639bb78d73883c", + "semantic_hash": "" + }, + "concepts/completed_2026-09-03_additional.md": { + "mtime": 1789128566.127406, + "ast_hash": "25cc66160abf072e06660050049c545f", + "semantic_hash": "" + }, + "pages/B03_FileInput/B03_upload_ui_2026_09.md": { + "mtime": 1789128566.9188557, + "ast_hash": "f726e03c0d232e8f376c9d8da5f4a945", + "semantic_hash": "" + }, + "pages/B04_PreProcess/B04_compass_crs_2026_09.md": { + "mtime": 1789128566.922044, + "ast_hash": "1c9969bae3bebc20f9741ca946d18410", + "semantic_hash": "" + }, + "pages/B05_Profile/B05_profile_interaction_2026_09.md": { + "mtime": 1789128566.939921, + "ast_hash": "999b84114b0adfed77c8d39240057578", + "semantic_hash": "" + }, + "pages/B06_Section/B06_cross_design_ui_2026_09.md": { + "mtime": 1789128566.9602034, + "ast_hash": "8529f3805489094c18e05d12cf55cc6c", + "semantic_hash": "" + }, + "concepts/completed_2026-09-04.md": { + "mtime": 1789128566.1285784, + "ast_hash": "643e2b9ca48385f108b05d36ea259cbe", + "semantic_hash": "" + }, + "concepts/completed_2026-09-07.md": { + "mtime": 1789128566.1285784, + "ast_hash": "8902ae1824084f8d3d4cc5f3b8d81ab3", + "semantic_hash": "" + }, + "concepts/completed_2026-09-09.md": { + "mtime": 1789128566.1285784, + "ast_hash": "f1055d50fd7a3ce08c254eb7e13edd08", + "semantic_hash": "" + }, + "concepts/design_data_lifecycle.md": { + "mtime": 1789128566.1405194, + "ast_hash": "5971e0e95bf4d125905af264f41f7f40", + "semantic_hash": "" + }, + "concepts/multi_environment_safety.md": { + "mtime": 1789132131.6764865, + "ast_hash": "1667aa4c657a4f529de42bcaac3fcd44", + "semantic_hash": "" + }, + "concepts/quantity_cost_contract.md": { + "mtime": 1789128566.1449418, + "ast_hash": "225d4b0e265a18b6088464f6878df6c3", + "semantic_hash": "" + }, + "concepts/standard_drawing_cost_inputs.md": { + "mtime": 1789128566.1459785, + "ast_hash": "3b41ac6dd9b031b28500806d47e7e490", + "semantic_hash": "" + }, + "concepts/standard_quantity_open_2026-09-09.md": { + "mtime": 1789128566.1472788, + "ast_hash": "2d13db7fee47d39a655adbc7618970a0", + "semantic_hash": "" + }, + "pages/B07_DesignDetail/B07_frontend.md": { + "mtime": 1789128566.981803, + "ast_hash": "d93f58aec363dcfb8d0bfe6b02813926", + "semantic_hash": "" + }, + "pages/B07_DesignDetail/B07_standard_drawings_2026_09.md": { + "mtime": 1789128566.9823377, + "ast_hash": "509e4bc263279f543640c2167b62d9a2", + "semantic_hash": "" + }, + "pages/B08_Quantity/B08_2026_09_09_completion.md": { + "mtime": 1789128566.997166, + "ast_hash": "ca460948d336f2c68e8f88b0b93be2f4", + "semantic_hash": "" + }, + "pages/B08_Quantity/B08_overview_2026_09.md": { + "mtime": 1789128566.997166, + "ast_hash": "f9d8cc08d2a8b80778193734568c745d", + "semantic_hash": "" + }, + "pages/B09_Estimation/B09_2026_09_09_completion.md": { + "mtime": 1789128566.9981973, + "ast_hash": "371ba3ddd76781abd9afbf088abd0c8b", + "semantic_hash": "" + }, + "pages/B09_Estimation/B09_overview_2026_09.md": { + "mtime": 1789128567.000224, + "ast_hash": "0b98a093e67d58c91f57ab12971c3da0", + "semantic_hash": "" + } +} \ No newline at end of file diff --git a/docs/wiki/graphify-out/GRAPH_REPORT.md b/docs/wiki/graphify-out/GRAPH_REPORT.md index b800b319..8720fd8a 100644 --- a/docs/wiki/graphify-out/GRAPH_REPORT.md +++ b/docs/wiki/graphify-out/GRAPH_REPORT.md @@ -1,16 +1,16 @@ -# Graph Report - wiki (2026-09-11) +# Graph Report - wiki (2026-09-12) ## Corpus Check -- 206 files · ~57,686 words +- 211 files · ~58,469 words - Verdict: corpus is large enough that graph structure adds value. ## Summary -- 1170 nodes · 996 edges · 189 communities (155 shown, 34 thin omitted) +- 1191 nodes · 1013 edges · 193 communities (159 shown, 34 thin omitted) - Extraction: 100% EXTRACTED · 0% INFERRED · 0% AMBIGUOUS - Token cost: 0 input · 0 output ## Graph Freshness -- Built from commit: `e49e4d85` +- Built from commit: `9a9062f0` - Run `git rev-parse HEAD` and compare to check if the graph is stale. - Run `graphify update .` after code changes (no API cost). @@ -187,6 +187,10 @@ - B08_DesignDetail_Engine_Cad_Basin.py - B08_DesignDetail_Engine_Cad_MassHaul.py - B08 CAD·납품 도면 후속 +- B05 계획노선 편집 — 2026-09-12 +- B06 종횡단 공용화 — 2026-09-12 +- B08 수량 근거 표시 — 2026-09-12 +- B09 원가 근거 표시 — 2026-09-12 - OpenWebCAD Core - common_util_mass_haul_settle.ts - Drainage Watershed (유역도) @@ -229,9 +233,6 @@ - None detected. ## Hyperedges (group relationships) -- **B03-B08 Workflow Data Flow** — b03_fileinput_route_snapshot_crs, b04_preprocess_drainage_compass_crs, b05_profile_frontend, b06_section_cross_design_ui_2026_09, b08_designdetail_frontend [INFERRED 0.90] -- **Shared Mass Haul Calculation and UI** — b05_profile_masshaul_structure_2026_09, b06_section_masshaul_culvert_2026_09, b08_designdetail_cad_delivery_2026_09 [EXTRACTED 0.85] -- **CAD Delivery and Usability Framework** — b08_designdetail_cad_interaction, b08_designdetail_cad_title_block, b08_designdetail_cad_usability_2026_09_01, b08_designdetail_cad_delivery_2026_09 [EXTRACTED 0.95] - **LAS-Free Analysis Workflow** — concepts_las_free_sheet_surface, pages_b03_fileinput_backend, pages_b04_preprocess_backend [EXTRACTED 1.00] - **B08 Drawing Generation Flow** — b08_designdetail_b08_designdetail_engine_cad_masshaul_py, b08_designdetail_b08_designdetail_engine_cad_basin_py, common_util_common_util_mass_haul_settle_ts [EXTRACTED 0.90] - **Drainage System Workflow** — concepts_drainage_watershed, pages_b05_profile_b05_structures, pages_b06_section_b06_culvert_set, pages_b06_section_b06_culvert_geometry_redesign [EXTRACTED 0.95] @@ -239,23 +240,23 @@ - **3D Corridor Generation Flow** — pages_b05_profile_b05_corridor_surface, pages_b05_profile_b05_corridor_plan_curves, pages_b05_profile_b05_corridor_cut_fill, pages_b05_profile_b05_corridor_patch_finish [EXTRACTED 0.90] - **Late Workflow Stages (B07-B09)** — pages_b07_quantity_b07_frontend, pages_b08_designdetail_b08_frontend, pages_b09_estimation_b09_frontend [EXTRACTED 1.00] -## Communities (189 total, 34 thin omitted) +## Communities (193 total, 34 thin omitted) ### Community 0 - "UI Templates — Localization & Components" -Cohesion: 0.05 -Nodes (38): 2026-09-04 완료 항목, 700줄 제한 분리, 보존된 미완료 범위, 상시계획서 추가 완료 범위, 완료 범위, 추가 완료 범위, 디자인 시스템 (Design System), 레이아웃 및 둥근 테두리 (Radius & Spacing) (+30 more) +Cohesion: 0.09 +Nodes (20): 2026-09-04 완료 항목, 700줄 제한 분리, 보존된 미완료 범위, 상시계획서 추가 완료 범위, 완료 범위, 추가 완료 범위, 1. B04 vs B05 역할 분담 및 일원화, 2. 공용 배수 엔진 및 WAMIS 강우량 연동 (Phase 1~2, 2026-08-13 관측소 전환) (+12 more) ### Community 1 - "인증 / RBAC" -Cohesion: 0.06 -Nodes (31): OTP / 비밀번호 및 디바이스 신뢰, 권한 검증 헬퍼 (B01_Dashboard), 라우팅 가드 (frontend.md 5.2), 사용자 상태 생명주기, 사용처 (역참조), 세션 인증 (backend.md 6.3), 역할 (users.role), 인증 / RBAC (+23 more) +Cohesion: 0.09 +Nodes (20): OTP / 비밀번호 및 디바이스 신뢰, 권한 검증 헬퍼 (B01_Dashboard), 라우팅 가드 (frontend.md 5.2), 사용자 상태 생명주기, 사용처 (역참조), 세션 인증 (backend.md 6.3), 역할 (users.role), 인증 / RBAC (+12 more) ### Community 2 - "A00_Common — App Shell Framework" -Cohesion: 0.08 -Nodes (22): A00_Common — App Shell Framework, app_shell 구성요소, router 라우팅 테이블, A00_Common — 스캐폴드·CSS·종속성, b_page_scaffold, CSS 인젝션, 사용처, 종속성 (+14 more) +Cohesion: 0.05 +Nodes (35): A00_Common — App Shell Framework, app_shell 구성요소, router 라우팅 테이블, A00_Common — 스캐폴드·CSS·종속성, b_page_scaffold, CSS 인젝션, 사용처, 종속성 (+27 more) ### Community 3 - "2026-09-04 완료 항목" -Cohesion: 0.07 -Nodes (25): API 공통 (여러 페이지가 공유하는 엔드포인트), 공통 오류 응답 포맷 (전 라우터), 워크플로우 상태 조회, 폴링 패턴 (legacy workflow.json 설계; 현재 구현은 workflow-state API 사용), 계산 구현 원칙, 계획노선 규칙, 설계 데이터 생명주기, 정본 세 벌 (+17 more) +Cohesion: 0.04 +Nodes (40): API 공통 (여러 페이지가 공유하는 엔드포인트), 공통 오류 응답 포맷 (전 라우터), 워크플로우 상태 조회, 폴링 패턴 (legacy workflow.json 설계; 현재 구현은 workflow-state API 사용), 2026-09-12 체크 완료 항목, 상태 경계, 이관 범위, 자체검증 기록 요약 (+32 more) ### Community 4 - "배수유역 해석 및 세부설계 (Drainage Watershed)" Cohesion: 0.25 @@ -270,8 +271,8 @@ Cohesion: 0.17 Nodes (11): A09_Security — Backend, API 엔드포인트, DB 저장 (activity_logs), 권한 헬퍼, 마스터(회사 관리자) 전용 — `require_master`, 시스템 관리자 전용 — `require_system_admin`, 요청 스키마 (Pydantic), 의존성 (공통 유틸) (+3 more) ### Community 7 - "2026-08-29 완료 반영" -Cohesion: 0.10 -Nodes (17): 2026-08-29 완료 반영, B03 재업로드·B05 최신 조회, B05/B06 구조물 UI 통합, B07↔B08 순서, B07 CAD 고정 척도·횡단 장 배치, B07 CAD 테마, B07 CAD 확대·팬, 배수시설 추천 기준 (+9 more) +Cohesion: 0.08 +Nodes (22): 2026-08-29 완료 반영, B03 재업로드·B05 최신 조회, B05/B06 구조물 UI 통합, B07↔B08 순서, B07 CAD 고정 척도·횡단 장 배치, B07 CAD 테마, B07 CAD 확대·팬, 배수시설 추천 기준 (+14 more) ### Community 8 - "DB: 파일/지표면분석 테이블" Cohesion: 0.18 @@ -849,6 +850,22 @@ Nodes (3): B06 횡단 계산 미러·카드 표기, 프론트 계산 미러, 횡 Cohesion: 0.50 Nodes (3): B08 CAD·납품 도면 후속, CAD 편집·확정, 토적도·유역도 +### Community 172 - "B05 계획노선 편집 — 2026-09-12" +Cohesion: 0.50 +Nodes (3): B05 계획노선 편집 — 2026-09-12, 저장·공용화, 편집 화면 + +### Community 173 - "B06 종횡단 공용화 — 2026-09-12" +Cohesion: 0.50 +Nodes (3): B06 종횡단 공용화 — 2026-09-12, 완료 체크에서 확인된 구조, 횡단 표시 + +### Community 174 - "B08 수량 근거 표시 — 2026-09-12" +Cohesion: 0.50 +Nodes (3): B08 수량 근거 표시 — 2026-09-12, 구현 진입점, 출처 등급과 표시 + +### Community 175 - "B09 원가 근거 표시 — 2026-09-12" +Cohesion: 0.50 +Nodes (3): B09 원가 근거 표시 — 2026-09-12, 공용 근거 계약, 좌측 패널 + ### Community 182 - "2026-09-02 완료 항목" Cohesion: 0.25 Nodes (7): 2026-09-02 완료 항목, B05 구조물 3D, B05 종단 편집 후속, CAD, 노선·지표면, 작업 환경, 회귀 상태 @@ -862,7 +879,7 @@ Cohesion: 0.50 Nodes (3): 2026-09-03 추가 완료 — 화면·종단·횡단, 완료 범위, 최신 결정 ## Knowledge Gaps -- **756 isolated node(s):** `단계별 판정`, `비워크플로 영역 판정`, `구현 상태 용어`, `반드시 유지할 구분`, `미결 설계` (+751 more) +- **767 isolated node(s):** `단계별 판정`, `비워크플로 영역 판정`, `구현 상태 용어`, `반드시 유지할 구분`, `미결 설계` (+762 more) These have ≤1 connection - possible missing edges or undocumented components. - **34 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes. @@ -875,17 +892,17 @@ Nodes (3): 2026-09-03 추가 완료 — 화면·종단·횡단, 완료 범위, ## Suggested Questions _Questions this graph is uniquely positioned to answer:_ +- **Why does `B07 구조물 표준도 — 조사·합의와 현재 통로` connect `임도기술교본 원문 md 추출 품질 결함` to `현재 구현 현황 — 소스 읽기 감사`, `유토곡선 (Mass Haul Diagram) 계산 명세`?** + _High betweenness centrality (0.003) - this node is a cross-community bridge._ - **What connects `단계별 판정`, `비워크플로 영역 판정`, `구현 상태 용어` to the rest of the system?** - _756 weakly-connected nodes found - possible documentation gaps or missing edges._ + _767 weakly-connected nodes found - possible documentation gaps or missing edges._ - **Should `UI Templates — Localization & Components` be split into smaller, more focused modules?** - _Cohesion score 0.046511627906976744 - nodes in this community are weakly interconnected._ + _Cohesion score 0.08695652173913043 - nodes in this community are weakly interconnected._ - **Should `인증 / RBAC` be split into smaller, more focused modules?** - _Cohesion score 0.05555555555555555 - nodes in this community are weakly interconnected._ + _Cohesion score 0.08695652173913043 - nodes in this community are weakly interconnected._ - **Should `A00_Common — App Shell Framework` be split into smaller, more focused modules?** - _Cohesion score 0.07692307692307693 - nodes in this community are weakly interconnected._ + _Cohesion score 0.05 - nodes in this community are weakly interconnected._ - **Should `2026-09-04 완료 항목` be split into smaller, more focused modules?** - _Cohesion score 0.06896551724137931 - nodes in this community are weakly interconnected._ + _Cohesion score 0.0425531914893617 - nodes in this community are weakly interconnected._ - **Should `2026-08-29 완료 반영` be split into smaller, more focused modules?** - _Cohesion score 0.1 - nodes in this community are weakly interconnected._ -- **Should `현재 구현 현황 — 소스 읽기 감사` be split into smaller, more focused modules?** - _Cohesion score 0.058823529411764705 - nodes in this community are weakly interconnected._ \ No newline at end of file + _Cohesion score 0.07692307692307693 - nodes in this community are weakly interconnected._ \ No newline at end of file diff --git a/docs/wiki/graphify-out/graph.html b/docs/wiki/graphify-out/graph.html index b5a54c10..850eb205 100644 --- a/docs/wiki/graphify-out/graph.html +++ b/docs/wiki/graphify-out/graph.html @@ -63,12 +63,12 @@
-
1170 nodes · 996 edges · 189 communities
+
1191 nodes · 1013 edges · 193 communities