ChildProcessManager::setupEventHandlers | Child process stderr: errorCode: 908
RCA: ChildProcessManager::setupEventHandlers | Child process stderr: errorCode: 908
Overview#
What Happened#
2026-05-26 16:08:09Z에 cupixworks-any-bimrevision-agent 서비스에서 BIM revision 비교 작업 중 child process가 stderr로 errorCode: 908을 출력했다. 이는 소스 모델의 bounding box가 비교 가능한 최대 크기(5000m)를 초과하여 비교가 불가능함을 나타내는 에러이다. 단일 발생이며 특정 고객의 대형 모델에 의한 데이터 기반 에러이다.
Quick Facts#
| Field | Value |
|---|---|
| exception.class | ForgeAgentError |
| exception.message | The source model bounding box is too large for reliable comparison (max extent: 645970.2m, limit: 5000m) |
| top_frame | compare-utils.js:60 (validateBoundsSize) |
| runtime | Node.js (forge-agents@10.98.0) |
| env | production, us-west-2 |
Affected Teams#
| Team / Domain | Error Count | Impact |
|---|---|---|
| fortis (Fortis Construction) | 1 | BIM revision 비교 실패, bim_comparison_state가 Error로 전환됨. 사용자(phil.miller@fortisconstruction.com)의 BIM revision 23701 비교 결과를 볼 수 없음. |
Timeline#
- 16:08:04.612Z —
BaseService::runByMessage시작 (bim_revision.id: 23701) - 16:08:05.146Z —
BimRevisionService::REVISE-BEGIN(bim_id: 16801, src_revision_id: 23701 V3, prev_revision_id: 19729 V2) - 16:08:05.146Z —
runBimCompare시작 - 16:08:09.080Z — forge-agents child process에서
validateBoundsSize실패 (max extent: 645970.2m > limit: 5000m) - 16:08:09.081Z —
errorCode: 908stderr 출력 →ChildProcessManager::setupEventHandlers가 error 레벨로 기록 - 16:08:09.082Z —
forgeErrorCode: 908→ForgeErrorMapper가REV908로 매핑, critical error로 판정 - 16:08:09.083Z —
BimRevisionService::runcatch 블록에서bim_comparison_state: Error업데이트 - 16:08:09.519Z — 정상 cleanup 수행 (workspace 삭제, SQS message 삭제)
Error Log#
ChildProcessManager::setupEventHandlers | Child process stderr: errorCode: 908
Impact#
- Service:
cupixworks-any-bimrevision-agent - Team: fortis
- 발생 횟수: 1
- 최초 발생: 2026-05-26T16:08:09.081Z
- 최근 발생: 2026-05-26T16:08:09.081Z
Root Cause Summary#
@cupix/forge-agents 패키지의 validateBoundsSize 함수가 소스 BIM 모델(revision 23701)의 bounding box 최대 축 길이(645,970.2m)를 검증했을 때, 설정된 최대 한도(5,000m)를 초과하여 ForgeAgentError(errorCode: 908)를 throw했다. 이 에러는 child process의 stderr로 출력되어 ChildProcessManager::setupEventHandlers에서 error 레벨 로그로 캡처되었다. 이 에러는 forge-agents 라이브러리의 의도된 안전 검증으로, 부동소수점 정밀도 문제로 인한 부정확한 비교 결과를 방지하기 위한 것이다. 근본 원인은 사용자가 업로드한 BIM 모델의 좌표계가 비정상적으로 큰 값을 포함하고 있는 것이다.
Technical Analysis#
Code Path#
- Entry point:
bim-revision-service.ts:150—BimRevisionService::run메서드에서 SQS 메시지 처리 시작
await this.runBimCompare(this.cpBimRevision, this.cpPreviousBimRevision);
- BIM 비교 실행 위임:
bim-revision-service.ts:647—BimCompareManager.execute()호출
const bimCompareResults = await this.bimCompareManager.execute(params);
- Child process IPC:
bim-compare.manager.ts:65—ChildProcessManager.execute()호출
try {
const result = await this.childProcessManager.execute<ForgeAgent.Result>('execute', params);
logger.debug('BimCompareManager::execute | completed successfully');
return result;
- Child process 내부:
bim-compare.process.ts:72—ForgeAgent.extract()호출
const result: ForgeAgent.Result = await ForgeAgent.extract(params.apiConfig, params.urn, {
region: params.region,
extractRoom: false,
extractMeta: false,
extractCompare: {
urn: params.previousUrn,
region: params.previousRegion,
query: params.query
}
});
-
Failure point:
compare-utils.js:60(forge-agents 패키지 내부) —validateBoundsSize함수에서 모델 bounding box 크기 검증 실패. 모델의 최대 축 길이 645,970.2m이 설정 한도 5,000m(maxBoundsSize파라미터)을 초과. -
stderr 캡처:
child-process.manager.ts:138-141—ChildProcessManager가 child process의 stderr를 error 레벨로 로깅
this.process.stderr?.on('data', (data: Buffer) => {
const text = data.toString();
logger.error(`ChildProcessManager::setupEventHandlers | Child process stderr: ${text}`);
});
- 에러 처리:
bim-revision-service.ts:663-671—ForgeErrorMapper가 errorCode 908을 critical error로 판정,REV908로 매핑 후 throw
if (forgeErrorCode) {
if (ForgeErrorMapper.isIgnorableError(forgeErrorCode)) {
logger.warn('BimRevisionService::runBimCompare | Ignorable Forge error detected - forgeErrorCode: %s, message: %s', forgeErrorCode, forgeErrorMessage);
} else {
const errorCode = ForgeErrorMapper.mapForgeErrorToRevisionError(forgeErrorCode);
logger.error('BimRevisionService::runBimCompare | Critical Forge error detected - forgeErrorCode: %s, mapped to revisionErrorCode: %s', forgeErrorCode, errorCode);
this.setErrorCode(errorCode);
throw new Error(`BimRevisionService::runBimCompare | Forge error: ${forgeErrorCode} - ${forgeErrorMessage}`);
}
}
Log Evidence#
Datadog 검색 쿼리:
service:cupixworks-any-bimrevision-agent status:error @environment:production
시간 범위: 2026-05-26T15:08:00Z ~ 2026-05-26T17:08:00Z
핵심 로그 시퀀스 (bim_revision.id: 23701):
16:08:05.146Z [info] BimRevisionService::REVISE-BEGIN | bim_id:16801, src_revision_id:23701 (V3), prev_revision_id:19729 (V2)
16:08:05.183Z [info] loadBimRevisionEntityParameters | compareConfig - alignmentMethod: auto, maxBoundsSize: 5000, gridAlignmentZ: false
16:08:05.184Z [info] runBimCompare | params - urn: dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6...
에러 발생:
16:08:09.080Z [error] ForgeAgentError: The source model bounding box is too large for reliable comparison (max extent: 645970.2m, limit: 5000m). Large models cause floating-point precision issues that make comparison unreliable.
Stack trace:
validateBoundsSize (compare-utils.js:60)
-> CompareExtractor.compare (compare-extractor.js:58)
-> extractComparison (app.js:133)
-> Object.extract (app.js:82)
-> BimCompareProcess.execute (bim-compare.process.cjs:6459)
-> BimCompareProcess.processMessage (bim-compare.process.cjs:6435)
-> BimCompareProcess.handleMessage (bim-compare.process.cjs:5919)
에러 처리 로그:
16:08:09.082Z [warn] CPBimRevision::validateBimComparerResult | forgeErrorCode: 908
16:08:09.083Z [error] BimRevisionService::runBimCompare | Critical Forge error detected - forgeErrorCode: 908, mapped to revisionErrorCode: REV908
16:08:09.083Z [error] BimRevisionService::run | error: "BimRevisionService::runBimCompare | Forge error: 908 - The source model bounding box is too large..."
정상 cleanup 확인:
16:08:09.519Z [info] BimRevisionService::REVISE-END
16:08:09.519Z [info] BaseService::cleanUpAnythingRelatedModel | path: /tmp/workspace/23701
16:08:09.520Z [info] AwsQueueManager::deleteMessage
Hypotheses Considered#
| # | Hypothesis | Evidence for | Evidence against | Verdict |
|---|---|---|---|---|
| H1 | 사용자가 비정상적으로 큰 좌표계를 가진 BIM 모델을 업로드함 (잘못된 단위 또는 좌표 오프셋) | 로그: max extent 645,970.2m (약 646km), 정상 건물 모델은 수백m 이하. maxBoundsSize: 5000m 한도를 ~129배 초과. |
— | Confirmed |
| H2 | forge-agents의 maxBoundsSize 설정이 너무 낮게 설정됨 |
5000m은 대부분 건축 모델에 충분하지만 일부 인프라 모델(고속도로, 파이프라인)에는 부족할 수 있음 | 645,970m은 어떤 합리적인 건축/인프라 모델에도 비정상적. 일반적인 대형 프로젝트도 수km 수준. 한도를 올려도 이 모델은 부동소수점 문제 발생 가능. | Rejected |
| H3 | 모델 좌표 변환 실패로 인한 잘못된 bounding box 계산 | 이론적으로 좌표 변환 오류가 극단적 값을 생성할 수 있음 | 에러 메시지가 "source model bounding box"를 직접 언급하며, 이는 모델 자체의 geometry 데이터에서 계산된 값. 변환 전 원본 데이터 검증 단계에서 발생. | Rejected |
Fix Recommendation#
즉시 조치 (Critical)#
코드 수정 불필요 — 이 에러는 forge-agents의 의도된 안전 검증이 정상 작동한 결과이다. 서비스는 에러를 올바르게 처리하고 (REV908 상태 업데이트, cleanup 수행, SQS 메시지 삭제) 정상적으로 종료했다.
다만, ChildProcessManager::setupEventHandlers의 stderr 로깅(child-process.manager.ts:138-141)이 모든 stderr 출력을 무조건 error 레벨로 기록하는 것은 과도하다. forge-agents가 에러 정보를 stderr에 출력한 후, 이것이 IPC 응답의 Error 필드로도 반환되어 BimRevisionService::runBimCompare에서 다시 error 로그를 생성한다. 동일 에러가 2번 error 로깅되는 중복이 발생한다.
- 파일:
applications/agents/packages/base/src/manager/child-process.manager.ts:140 - 방향: stderr 출력을
warn레벨로 낮추는 것을 검토. child process의 stderr는 진단 정보이며, 실제 에러 처리는 IPC 응답에서 수행됨.
단기 개선 (1주 이내)#
- Fortis Construction 팀(team_id: 708, user: phil.miller@fortisconstruction.com)에게 BIM revision 23701의 소스 모델 좌표계 확인을 요청. 모델이 밀리미터 단위로 작성되었으나 미터로 해석되고 있을 가능성이 있음 (645,970m ≈ 645km → mm 단위라면 약 646m).
- Tesla API의
bim_comparison_state: Error(error_code:REV908)가 사용자에게 적절한 에러 메시지로 표시되는지 확인.
장기 개선 (재발 방지)#
- forge-agents의
validateBoundsSize단계에서 단위 변환 미스매치를 감지하는 휴리스틱 추가 검토 (예: 값이 1000배 차이나면 단위 불일치 가능성 경고). - 사용자 업로드 시점에 BIM 모델의 bounding box 크기를 사전 검증하여, 비교 실행 전에 문제를 감지하고 사용자에게 피드백을 제공하는 방안 검토.
Monitoring#
현재 에러는 단발성이며 특정 모델에 의한 것이므로 추가 모니터링은 선택 사항이다.
재발 모니터링 쿼리:
service:cupixworks-any-bimrevision-agent status:error "errorCode: 908"
동일 팀/사용자의 반복 실패 모니터링:
service:cupixworks-any-bimrevision-agent status:error @team.id:708
Risk Assessment#
- Risk level: low
- 예상 복잡도: trivial (코드 수정 불필요, 사용자 측 데이터 문제)