Skip to content

Latest commit

 

History

History
390 lines (290 loc) · 17.8 KB

File metadata and controls

390 lines (290 loc) · 17.8 KB

ORC 수동 설정 가이드

자동화가 돌아가려면 사람만 할 수 있는 일 4가지가 있습니다. 계정 생성, 인증, 그리고 "봉인 해제" 같은 되돌릴 수 없는 결정입니다. 나머지는 전부 코드가 합니다.

전체 소요: 처음 한 번 약 40분. 이후에는 손댈 일이 없습니다.


준비 상태 확인

먼저 지금까지 자동으로 만들어진 게 정상인지 확인하세요.

cd D:\Project\ORC
python -m pytest tests -q

38 passed 가 나와야 합니다. 안 나오면 그 아래 단계는 진행하지 마세요.


STEP 1 — 전체 패널 빌드 (로컬, 약 15분)

지금은 10개 심볼만 만들어져 있습니다. 481개 전부 만듭니다.

cd D:\Project\ORC
python -m orc.facts.build_panel
  • 심볼당 약 1.4초 → 전체 약 11분
  • 디스크: 1분봉 약 36GB, 1시간봉 약 750MB (D드라이브 여유 781GB이므로 충분)
  • 진행 중 SKIP 이 보이는 건 정상입니다 (90일 미만 심볼은 제외됨)

끝나면 QA 결과를 보세요:

python -c "import json;d=json.load(open('facts/QA_PANEL.json',encoding='utf-8'));print(sum(1 for x in d if x['usable']),'usable /',len(d))"

이어서 펀딩비 데이터를 받습니다. 네트워크 작업이라 오래 걸립니다 (약 30~60분). 백그라운드로 돌려놓고 STEP 2를 진행하세요.

python -c "import sys;sys.path.insert(0,'.');from orc.facts import panel,fetch_vision as fv;fv.fetch_funding_for(panel.available_symbols('1h'))"

STEP 2 — GitHub 저장소 만들기 (약 10분)

무료 24시간 연산은 public 저장소에서만 무제한입니다. private은 월 2,000분뿐이라 24시간 가동이 안 됩니다.

2-1. 저장소 생성

cd D:\Project\ORC
git init
git branch -M main

.gitignore 를 만듭니다 (데이터는 저장소에 넣지 않습니다):

cat > .gitignore <<'EOF'
facts/panel_1m/
facts/panel_1h/
facts/funding/
dist/
__pycache__/
*.pyc
.pytest_cache/
FINAL_TEST_TOKEN
EOF
git add -A
git commit -m "ORC: DCA research infrastructure"
gh auth login          # 브라우저 인증. 이미 로그인돼 있으면 건너뛰세요
gh repo create orc --public --source=. --push

공개해도 되는 이유: 저장소에 들어가는 건 범용 엔진과 워크플로뿐입니다. 가격 데이터도, 살아남은 전략 설정도 들어가지 않습니다. 알파가 생기면 그때 configs/registry/ 만 private 저장소로 분리하면 됩니다.

2-2. 워커에게 줄 데이터 번들 업로드

python scripts/deploy_panel.py
gh release create panel-latest dist/orc-panel.tar.gz dist/orc-panel.sha256 ^
  --title "ORC panel" --notes "development data only"

이 번들에는 2024-03-01 이후 데이터가 물리적으로 들어있지 않습니다. 클라우드 워커가 코드 버그로도 홀드아웃을 볼 수 없게 만든 장치입니다.

패널을 다시 만들 때마다 갱신하세요:

python scripts/deploy_panel.py
gh release upload panel-latest dist/orc-panel.tar.gz --clobber

2-3. Actions 쓰기 권한 켜기

브라우저에서 저장소를 열고:

Settings → Actions → General → Workflow permissions
  → "Read and write permissions" 선택 → Save

이게 없으면 워커가 결과를 커밋하지 못합니다.

2-4. 첫 실행 확인

gh workflow run orc-cycle.yml
gh run watch

성공하면 6시간마다 자동으로 돕니다. PC를 꺼도 계속 돕니다.


STEP 2.5 — 24시간 감독자 (완료됨)

작업 이름 ORC Forever
실행 로그온 시 + 1시간마다 감시 재발화, 프로세스는 계속 살아 있음
실행 방식 wscript 로 창 없이 (scripts/forever_hidden.vbs)
스크립트 scripts/forever.py
시간 제한 없음 (0시간). 3시간 제한을 걸면 3시간마다 작업 중에 죽습니다
중복 방지 MultipleInstances IgnoreNew + logs/forever.lock 심장박동
기록 logs/forever_YYYY-MM-DD.log, reports/ACTIVITY.jsonl (커밋됨)

매 tick마다 runstate.next_action() 에게 지금 가장 유용한 일을 묻고 그것을 합니다. 새 가설은 그중 하나일 뿐입니다:

action 하는 일 원장 비용
reason 제안 → 적대자 → 등록 등록되면 N 증가
scout 웹 + 두 번째 벤더에서 지불자 수집reports/SCOUT.jsonl 0
kernel_review 평가기 적대적 재독 0
robustness 비용 스트레스 · 워크포워드 · 레짐 분할 0
execution_realism 분봉으로 셀 재실행 0
survivorship KT-3 폐지 표본 확대 0

등록만 배급됩니다. MAX_REGISTRATIONS_PER_DAY = 4 (롤링 24시간). 기각된 제안은 configs/killed/ 의 파일 하나와 원장 0행이므로, 하루 종일 제안하는 것은 공짜인 컴퓨트를 탐색 폭에 쓰는 것입니다. 큐-비움 규칙만으로는 등록 속도가 워커가 큐를 비우는 속도(약 하루 30건)로만 제한되고, 그러면 일주일에 프로젝트 평생 누적보다 많은 행이 N에 들어갑니다.

python scripts/forever.py --dry-run    # 지금 무엇을 할지만 말하고 아무것도 안 함
python -m orc.runstate --next          # 같은 질문, 한 줄
Get-ScheduledTaskInfo -TaskName "ORC Forever"
Start-ScheduledTask -TaskName "ORC Forever"
Stop-ScheduledTask  -TaskName "ORC Forever"    # 멈추기

감독자가 살아 있는지는 python scripts/briefing.py 첫 화면이 말합니다 — 🟢 WORKING 이면 지금 일하는 중이고, 🟡 이면 떠 있지 않습니다.


STEP 3 — 추론 계층 등록 (완료됨, 로컬 작업 스케줄러)

여기가 "아이디어를 계속 바꿔가며" 담당하는 계층입니다.

원래 계획은 Anthropic 클라우드의 /schedule 루틴이었습니다. 이 계정에서는 불가능합니다. Team/Enterprise 플랜은 조직 Owner가 Admin settings > Connectors 에서 GitHub 커넥터를 켜야 클라우드 세션이 저장소에 닿는데, Innobase 조직은 이게 꺼져 있고 계정 역할이 user 라 직접 켤 수 없습니다. 우회로인 /web-setupallow_quick_web_setup: false 로 같이 막혀 있습니다. 개인 Max 계정으로 전환하면 클라우드 루틴이 가능해지고, 그때는 이 STEP을 /schedule 로 되돌리면 됩니다.

그래서 추론 계층만 로컬로 내렸습니다. 평가는 그대로 GitHub Actions가 합니다.

작업 이름 ORC Reasoning Cycle
실행 매일 02:25 / 08:25 / 14:25 / 20:25 KST
실행 방식 wscript 로 창 없이 (scripts/reasoning_cycle_hidden.vbs)
스크립트 scripts/reasoning_cycle.ps1
프롬프트 scripts/reasoning_prompt.txt
모델 claude-opus-5
허용 도구 Read, Glob, Grep, Write, Edit, Bash(git *)
로그 logs/reasoning_YYYY-MM-DD.log (커밋 안 됨)
중복 방지 증거 지문 (python -m orc.runstate --due)
실패 시 15분 간격 2회 재시도
시간 제한 3시간 (판단 호출이 8~10회로 늘어 1시간으로는 부족)

등록·수리·검사는 손으로 하지 말고 스크립트로 합니다. 작업에 들어 있는 경로는 절대 경로라서, 저장소를 옮기면 작업은 그대로 남아 있고 실행만 되지 않습니다.

python scripts/schedule.py            # 세 작업이 이 저장소를 가리키나? (아니면 exit 2)
python scripts/schedule.py --repair   # 저장소를 옮긴 뒤 경로만 다시 씀
python scripts/schedule.py --cadence  # 발화 시각을 위 네 슬롯으로 맞춤
python scripts/schedule.py --install  # 새 PC에서 처음부터 등록 (세 작업 전부)

--install 이 조용히 실패했던 두 가지는 이제 코드에 이유가 적혀 있습니다: -RepetitionDuration ([TimeSpan]::MaxValue) 는 이 빌드에서 P99999999DT23H59M59S 로 직렬화되고 Task Scheduler의 XML 스키마가 그것을 거부합니다(0x80041318) — duration을 생략하는 것이 무한 반복입니다. 그리고 -AtStartup범위 없는 -AtLogOn 은 승격을 요구합니다(0x80070005); -User $env:USERNAME 로 범위를 주면 등록됩니다.

두 번째 작업도 함께 등록돼 있습니다.

작업 이름 ORC Kernel Review
실행 매주 일요일 09:30 KST, 창 없음
하는 일 평가 커널을 4개씩 배치로 적대적 검토
로그 logs/kernel_review.log, 결과는 reports/KERNEL_REVIEW.md

첫 실행에서 결함 5건을 찾았고 그중 하나는 Track B 결과 전체를 무효화하는 lookahead였습니다. high 등급 발견은 notify.py 를 통해 알림으로 나갑니다.

대가: 발화 시각에 PC가 켜져 있어야 합니다. 꺼져 있었다면 StartWhenAvailable 설정 때문에 다음 부팅 직후 한 번 따라잡습니다. 슬롯이 네 개인 이유가 이것이기도 합니다 — 하나를 놓쳐도 여섯 시간 안에 다음이 옵니다.

08:25인 이유: Actions 워커의 0 */6 * * * 는 UTC 기준이라 09:00 / 15:00 / 21:00 / 03:00 KST에 발화합니다. 08:25에 큐를 밀어넣으면 35분 뒤 바로 수거됩니다. 시각이 어긋나면 최대 6시간을 기다리게 됩니다.

작업은 wscript 를 통해 실행되어 콘솔 창이 뜨지 않습니다. powershell.exe 를 직접 실행하면 대화형 로그온 세션에 창이 생겼다가 숨겨지는데, 그 사이 화면을 가리고 포커스를 뺏습니다. 창이 아예 생기지 않게 하는 다른 방법(S4U, 세션 0)은 등록에 관리자 권한이 필요합니다.

하루 네 번 발화하지만, 증거가 바뀌었을 때만 실제로 묻습니다. 절대 두 번 일어나서는 안 되는 일은 같은 증거에 대한 두 번의 등록입니다 — 사전등록은 되돌릴 수 없고 모든 시행이 N 에 들어가 다중검정 보정을 영구히 왜곡합니다. 날짜는 그것의 나쁜 대리물이었습니다. 자정만 지나면 바뀌지 않은 리포트에 대해 두 번째 패스를 허용하고, 반대로 아침 패스가 거부되면 — high 결함, 끊긴 네트워크, 옮겨진 디렉터리 — 그날은 아무것도 묻지 못했습니다. 2026-09-03이 정확히 그날입니다.

지금 문을 지키는 것은 python -m orc.runstate --due 입니다.

  • 큐에 답을 기다리는 질문이 있으면 → 묻지 않습니다 (워커가 아직 답하지 않은 리포트에 등록 슬롯을 쓰는 것이므로).
  • 심사 대기 제안이 있으면 → 그것을 먼저 판정합니다.
  • 그 외에는 증거 지문이 지난 패스와 다를 때만 묻습니다. 지문은 CYCLE_REPORT.md, N, 마지막 신규 시행 시각, 닫힌 가족 목록, 레지스트리로 만듭니다.

일부러 게이트를 무시하려면 -Force 를 주세요.

상태 확인과 수동 실행:

Get-ScheduledTaskInfo -TaskName "ORC Reasoning Cycle" | Select-Object LastRunTime, LastTaskResult, NextRunTime
Start-ScheduledTask -TaskName "ORC Reasoning Cycle"     # 지금 한 번 돌리기

프롬프트를 바꾸려면 scripts/reasoning_prompt.txt 만 고치면 됩니다. 스케줄러는 건드릴 필요 없습니다.

멈추려면:

Disable-ScheduledTask -TaskName "ORC Reasoning Cycle"

추론 계층이 커밋하면 GitHub Actions가 6시간 안에 집어가서 평가합니다. 이걸로 루프가 닫힙니다.


STEP 4 — 봉인 홀드아웃 (평생 3번, 지금은 하지 마세요)

최종 후보가 나왔을 때만, 그리고 일생에 3번만 가능합니다.

# 이 파일을 직접 손으로 만들어야만 열립니다
notepad D:\Project\ORC\FINAL_TEST_TOKEN

정확히 이 두 줄을 넣으세요 (한 글자라도 다르면 거부됩니다):

I am opening the sealed holdout. I understand this consumes one of three
openings for the life of this project and cannot be undone.

그 다음, 반드시 이 형태로 여세요. 컨텍스트 매니저 밖에서는 봉인 구간을 읽는 것 자체가 거부됩니다:

from orc import holdout
from orc.facts import panel

with holdout.final_test({"hypothesis_id": "H00xx", "config": {...}}, "why") as rec:
    p = panel.load("BTCUSDT", "1h", sealed_only=True)   # 봉인 구간만
    ...                                                  # 여기서 한 번 측정

sealed_only=True 가 핵심입니다. development_only=False 는 개발 구간과 봉인 구간을 붙여서 돌려주고, BTCUSDT 기준 그 창의 64.6%가 후보를 고를 때 이미 본 데이터입니다. 그 위에서 잰 숫자는 out-of-sample이 아니면서 out-of-sample처럼 보입니다.

사용하면 토큰 파일은 자동 삭제되고, 후보 해시가 ledger/FINAL_TEST_LOG.jsonl 에, 그 개봉으로 봉인 구간을 몇 번 읽었는지가 ledger/FINAL_TEST_READS.jsonl 에 영구 기록됩니다. 3회를 다 쓰면 프로젝트가 끝날 때까지 다시 열리지 않습니다.

지금 이 단계를 하지 마세요. 후보가 없습니다.


선택 사항

Oracle Cloud 상시 무료 VM

GitHub Actions가 6시간마다 재시작되는 게 불편하면 상시 VM을 쓸 수 있습니다. 2026-06-15부터 2 OCPU / 12GB로 축소됐고 용량 확보 실패가 잦습니다. 안 되면 미련 없이 건너뛰세요 — Actions만으로 충분합니다.

Hetzner CX22 (월 약 €4)

Oracle 용량 싸움이 싫으면 이쪽이 가장 편합니다. 삽질 대비 가성비가 제일 좋습니다.

1분봉 클라우드 배포

현재 번들은 1시간봉만 담습니다(9심볼 기준 9.6MB, 481심볼이면 약 500MB). 1분봉은 36GB라 클라우드에 올리지 않습니다. 최종 후보의 체결 현실성 검증만 로컬에서 하면 되므로 문제없습니다.


매일 무슨 일이 벌어지는가

02:25 / 08:25 / 14:25 / 20:25 KST   추론 계층 (로컬 스케줄러)
            증거가 바뀌었으면 새 가설 1~3개 → configs/queue/ 커밋
09:00 KST   GitHub Actions (6시간마다)  큐 수거 → 사전등록 해시 → 전 그리드 평가
            (public 저장소, 무제한 무료)  → 원장 기록 → 반응표면 + PBO
                                        → reports/ 커밋
다음날      추론 계층이 CYCLE_REPORT.md 읽고 다음 질문 결정

네 슬롯 중 하나에만 PC가 켜져 있으면 됩니다. 평가는 PC와 무관하게 돕니다. 총 비용 ₩0.

당신이 개입해야 할 때는 두 번뿐입니다:

  1. 패널을 갱신할 때 (deploy_panel.py + gh release upload)
  2. 최종 시험을 열 때 (STEP 4)

알림이 오는 경우

scripts/notify.py 가 판단합니다. 이 여섯 가지 말고는 아무 말도 하지 않습니다 — 조용하면 정상이라는 뜻이고, 조용한데 정상이 아닌 경우를 없애는 것이 이 목록의 목적입니다.

알림
clears every check 셀 하나가 모든 검사를 통과했습니다. 이 장치 전체가 만들어내려던 것입니다
ORC stalled 30시간 넘게 사이클이 끝나지 않았습니다
ORC is idle 양쪽 다 돌았는데 이틀째 새 시행이 원장에 들어오지 않았습니다. 제안이 안 나오거나, 전부 기각되거나, 그리드가 소진된 것입니다
never reached the remote 로컬에만 커밋이 있습니다. 워커는 원격에서 수거하므로 그 질문은 영원히 평가되지 않습니다
BLOCKING finding high 등급 리뷰 발견이 미처리 상태입니다. 이게 있으면 사이클이 아예 돌지 않습니다
rejected a queued hypothesis 큐 파일이 스키마·상한을 어겨 rejected/ 로 갔습니다

ORC is idlenever reached the remote 가 특히 중요합니다. 나머지는 뭔가 실패하지만, 이 둘은 전부 성공한 것처럼 보이는 채로 연구가 멈춘 상태입니다.


문제가 생기면

증상 원인 조치
Actions가 panel-latest 를 못 찾음 릴리스 미업로드 STEP 2-2
Actions가 커밋 실패 쓰기 권한 없음 STEP 2-3
test_analytic_matches_simulator 실패 두 평가기가 어긋남 다른 모든 작업 중단. 모든 결과가 무효입니다
HoldoutViolation 봉인 구간이 새어들어옴 정상 동작. panel.load() 를 쓰지 않은 코드가 있는지 확인
큐 파일이 rejected/ 로 감 스키마 오류 configs/queue/rejected/ 에서 원인 확인
아침에 새 가설이 없음 발화 시각에 PC가 꺼져 있었음 logs/reasoning_*.log 확인. 없으면 Start-ScheduledTask -TaskName "ORC Reasoning Cycle"
며칠째 새 가설이 없고 로그도 없음 저장소를 옮겨서 작업의 절대 경로가 죽었음 python scripts/schedule.py → exit 2면 --repair. python scripts/briefing.py 첫 줄이 🔴 로 같은 말을 합니다
워커는 도는데 신규 0건이 계속됨 큐가 비어 있고 코드도 안 바뀜 = 새로 물은 것이 없음 python -m orc.runstate 로 판정 확인. BRIEFING.md 의 '가동 기록' 표에서 +0 줄이 몇 개 연달아 있는지 보입니다
브리핑이 🟡 감독자가 떠 있지 않습니다 ORC Forever 가 안 돌고 있음 Start-ScheduledTask -TaskName "ORC Forever". logs/forever_*.log 가 이유를 말합니다
제안이 계속 기각됨 정상입니다 — 적대자가 일하는 것이고 원장 비용 0 configs/killed/ 의 최신 판정을 읽으십시오. 제안자는 다음 패스에서 그것을 읽습니다. 새 메커니즘이 필요하면 python scripts/scout.py
reports/ACTIVITY.jsonl 에 구멍이 있음 감독자가 그 시간 동안 일하지 않았음 그 시각의 logs/forever_*.log 를 보십시오. 이 파일이 "쉬지 않는다"는 주장의 증거입니다