Runtime unverified

Workbench 5 패스 + ref 발급 명세

ask 작업대의 5 패스 (BRIEF→WORK→CRITIQUE→COMPOSE→GATE→HARVEST) 와 각 패스에서 발급해야 할 ref kind 를 단일 SSOT 로 못박는다.

runtime.workbenchEvidenceFlow GitHub 원본

절차

실행 순서

  1. 1

    5 패스 순서는 `BRIEF → WORK → CRITIQUE → COMPOSE → GATE → HARVEST` 로 고정.

  2. 2

    BRIEF 는 **질문 문구 하드코딩 분기 없이** 선택된 skill 의 `requiredEvidence`/`toolRefs`/`knowledgeRefs` 와 엔진 기능 설명/docstring 결과로 실행 계획을 만든다.

  3. 3

    root `skills/`가 절차 SSOT 이고, `CAPABILITIES`/docstring 이 호출 가능 API SSOT 다. AI 내부에 별도 skill resolver 나 기능 index 를 중복 생성하지 않는다.

  4. 4

    선택한 skill 의 `requiredEvidence` 는 GATE 의 동적 체크리스트로 그대로 주입된다 — CRITIQUE/GATE 에 분석 단계 (예: 6 막 인과) 를 하드코딩하지 않는다. 분석 단계가 필요한 skill 은 그 skill 의 `requiredEvidence` 로 표현한다.

  5. 5

    dataset 이 필요한 질문은 WORK 안에서 먼저 `inspect_dataset` 또는 dartlab.* 직접 호출로 schema, latest, metric 후보를 확인한다.

  6. 6

    계산은 실행 결과가 table/value/date ref 를 만들 수 있게 수행한다. 표를 만들 때 `metric` 은 숫자 컬럼, 날짜·라벨·식별자는 `meta`/`asOf`/`period`/`target` 또는 별도 문자열 컬럼.

  7. 7

    `emit_result` 는 run_python prelude 가 제공하는 예약 helper. 직접 `def emit_result` 로 만들거나 다른 값으로 덮어쓰지 않는다. WORK 결과에 `emitted` 가 비면 GATE 는 차단한다.

  8. 8

    기능 설명·API 사용법처럼 계산이 필요 없는 질문은 run_python 으로 가짜 evidence table 을 만들지 않고, skill 문서 를 근거로 좁은 설명을 제출한다.

  9. 9

    시각화는 table ref 가 있고 2 개 이상 비교 가능한 값이 있을 때만 만든다.

  10. 10

    최종 답변은 evidence refs 와 limits 만 제출해서 끝내지 않는다. 숫자·날짜·ranking material claim 은 답변 본문 안에 `[refId]` 형식으로 supporting ref 를 직접 가리켜야 한다.

  11. 11

    후보·상위·랭킹 최종 답변은 `입력/유니버스`, `필터`, `계산식/지표`, `결과` 를 포함하고, 회사/식별자, 기준 기간, 원값, metric, rank 가 들어간 markdown evidence table 을 본문에 렌더링한다.

  12. 12

    검산 실패 후 재시도할 때는 실패한 초안의 숫자 문장을 그대로 유지하지 않고, ref 로 뒷받침되는 claim 만 남긴다.

예시

이런 질문이 들어오면 이 skill 을 쓴다

  • 5 패스 어디서 무엇이 발급되나?
  • run_python 결과를 검산 답변으로 묶으려면?

출력

기대 결과

  • 검산 가능한 답변 초안
  • claim 별 ref 매칭
  • limits

5 패스 단일 SSOT

ask 작업대는 LLM 인지 단위와 1:1 대응하는 5 패스 (+ HARVEST 회수) 로 구성된다. 옛 9 노드 절차 (routeIntent → selectSkill → ... → repairOrFail) 는 본 SSOT 로 흡수되었으며, 절차 SSOT 의 단일 원천이다.

패스역할LLM발급 ref kind
BRIEF질문 해석 + skill/capability 후보 + recall + 검증 기준 + lens 분기yesskillRef, apiRef
WORKrun_python / inspect_dataset / engine_call / web_search / save_artifact 반복 실행yesexecutionRef, valueRef, tableRef, dateRef, webRef, artifactRef
CRITIQUE반대가설 / 누락 lens / 데이터 신선도 / 단위 일치 점검yes(text → state.critiques)
COMPOSE답안 + claim 별 [refId] 묶음yesanswerText (refs 인용)
GATEclaim ↔ ref 매칭 검증 (programmatic)noverifyRef
HARVESTtrace 보고 propose_skill 후보 발굴 + decision rememberyesskillProposalRef (선택), decisionRef

회귀 규칙: GATE 가 차단하면 WORK 1 회 회귀 후 COMPOSE/GATE 재실행. 두 번째 GATE 도 차단하면 답변 끝에 미통과 사유를 명시하고 종료.

패스별 도구 화이트리스트

각 패스의 LLM 은 명시된 도구만 본다. 도구 카탈로그 SSOT 는 dartlab.ai.tools.registry._SPECS.

패스도구
BRIEFread_skill, read_capability, read
WORKrun_python, inspect_dataset, engine_call, web_search, save_artifact
CRITIQUE(없음 — 사고만)
COMPOSE(없음 — 답안 합성만)
GATE(LLM 없음 — programmatic)
HARVESTpropose_skill

ref kind 발급 책임

ref kind발급 패스발급 도구검산 의미
skillRefBRIEFread_skill어떤 skill 절차를 따랐는가
apiRefBRIEFread_capability어떤 dartlab API 후보가 있는가
executionRefWORKrun_python, engine_call코드/엔진 호출이 실제 성공·실패
tableRefWORKrun_python(emit_result table=)표 답·랭킹 답의 원천
valueRefWORKrun_python(emit_result values=)단일 숫자 답의 원천
dateRefWORKrun_python(emit_result date=)답의 기준 시점
webRefWORKweb_search외부 인용 답의 원천
artifactRefWORKsave_artifact큰 표/차트의 별도 저장
verifyRefGATE(programmatic)claim ↔ ref 매칭 결과
skillProposalRefHARVESTpropose_skill발견된 신규 skill 후보
decisionRefHARVEST(자동 remember)세션 간 회상 가능 결정

절차

  • 5 패스 순서는 BRIEF → WORK → CRITIQUE → COMPOSE → GATE → HARVEST 로 고정.
  • BRIEF 는 질문 문구 하드코딩 분기 없이 선택된 skill 의 requiredEvidence/toolRefs/knowledgeRefs 와 generated capability/docstring 결과로 실행 계획을 만든다.
  • root skills/가 절차 SSOT 이고, CAPABILITIES/docstring 이 호출 가능 API SSOT 다. AI 내부에 별도 skill resolver 나 capability index 를 중복 생성하지 않는다.
  • 선택한 skill 의 requiredEvidence 는 GATE 의 동적 체크리스트로 그대로 주입된다 — CRITIQUE/GATE 에 분석 단계 (예: 6 막 인과) 를 하드코딩하지 않는다. 분석 단계가 필요한 skill 은 그 skill 의 requiredEvidence 로 표현한다.
  • dataset 이 필요한 질문은 WORK 안에서 먼저 inspect_dataset 또는 dartlab.* 직접 호출로 schema, latest, metric 후보를 확인한다.
  • 계산은 실행 결과가 table/value/date ref 를 만들 수 있게 수행한다. 표를 만들 때 metric 은 숫자 컬럼, 날짜·라벨·식별자는 meta/asOf/period/target 또는 별도 문자열 컬럼.
  • emit_result 는 run_python prelude 가 제공하는 예약 helper. 직접 def emit_result 로 만들거나 다른 값으로 덮어쓰지 않는다. WORK 결과에 emitted 가 비면 GATE 는 차단한다.
  • 기능 설명·API 사용법처럼 계산이 필요 없는 질문은 run_python 으로 가짜 evidence table 을 만들지 않고, skill/capability ref 를 근거로 좁은 설명을 제출한다.
  • 시각화는 table ref 가 있고 2 개 이상 비교 가능한 값이 있을 때만 만든다.
  • 최종 답변은 evidence refs 와 limits 만 제출해서 끝내지 않는다. 숫자·날짜·ranking material claim 은 답변 본문 안에 [refId] 형식으로 supporting ref 를 직접 가리켜야 한다.
  • 후보·상위·랭킹 최종 답변은 입력/유니버스, 필터, 계산식/지표, 결과 를 포함하고, 회사/식별자, 기준 기간, 원값, metric, rank 가 들어간 markdown evidence table 을 본문에 렌더링한다.
  • 검산 실패 후 재시도할 때는 실패한 초안의 숫자 문장을 그대로 유지하지 않고, ref 로 뒷받침되는 claim 만 남긴다.
  • 서버 audit runner 는 원문 답변과 refs/events/meta 를 캡처만 한다. 품질 pass/fail 은 저장된 답변 원문을 사람이 직접 읽고 별도 review 기록으로 판정한다.

런타임

실행 환경별 호환성

환경상태비고 / 제한
Local Python supported
Server supported
MCP supported
Web AI limited
Pyodide limited
  • 브라우저에서는 선택한 skill과 dataset snapshot 범위 안에서만 실행한다.

실패 회피

흔한 실패 · 절대 금지

흔한 실패
  • 실행 결과 없이 계산 답변 작성
  • 실패한 실행을 숨김
  • date ref 없이 최신성 주장
  • table ref 없이 ranking 또는 chart 주장
  • ranking/candidate 최종 답변에 table ref만 제출하고 사람이 읽을 evidence table을 쓰지 않음
  • 입력/유니버스, 필터, 계산식/지표, 결과를 답변에 명시하지 않아 재현 불가능함
  • 문자열 날짜/라벨 컬럼을 table metric으로 지정해 검증 실패
  • 사용법 답변의 코드 예시 숫자를 근거 없는 재무 claim처럼 제출
  • evidence refs는 제출했지만 material claim별 refs가 비어 있어 숫자 검산 실패
  • 여러 실행 중 실패한 초안의 숫자 claim을 최종 답변에 남김
  • run_python 안에서 emit_result 없이 print 만 한 결과를 GATE 가 통과시킴
절대 금지
  • tool call transcript를 최종 답변으로 노출
  • 근거 없는 숫자 claim
  • 단일값 chart
  • run_python 코드 안에서 emit_result를 재정의
  • 후보·상위·랭킹 답변을 bullet 나열로만 마무리