- 현재 checkpoint: 완료
- 로컬 경로:
/Users/bangbyeonghun/Documents/nlp/RL-study - 승인: A1~A8 전체 승인
- 1단계: Apache-2.0, Colab, RLOO/Dr. GRPO/GSPO, 확장 CI, 외부 Agentic benchmark
- 한국어 core 후 2단계: 영어 mirror, MkDocs, 대화형 비교 UI
- 원격 재확인:
git ls-remote --symref가 exit 0, ref 없음 - Git: 새 저장소, branch
main, 아직 commit 없음 - origin:
https://github.com/BangProx/RL-study.git(fetch/push) - 안전 조건: 기존 원격 이력이 없음을 확인했고 force-push나 원격 쓰기를 하지 않음
- 환경 메모: GitHub CLI
gh는 설치되어 있지 않아 권한 확인은 추후 push 전 수행 - 검증: 원격 ref 없음, local
main,originURL과 clean bootstrap 조건 확인
- 현재 checkpoint: C2 교육·기술 설계
- 산출물:
docs/research/C1_SOURCE_AUDIT.mddocs/sources.yml(JSON-compatible YAML 1.2)LICENSE,NOTICE,.gitignore, 초기README.md
- 고정 결정:
- clean-room PyTorch 교육 구현 + TRL v1.10.0 laptop adapter + verl v0.9.0 server adapter
- SmolLM2-135M-Instruct / Qwen3-0.6B / Qwen3-4B preset
- GSM8K train 기반 실제 RLVR, UltraFeedback Binarized는 server 선택 항목
- ALFWorld 0.4.2 text-only optional adapter
- 라이선스 경계: DAPO 공식 repo에는 감사한 commit에서 license가 없어 코드, config, 문서, asset을 복사·변형하지 않음. 논문 clean-room 구현만 허용
- 검증:
python3 -m json.tool docs/sources.yml통과- manifest assertion: papers=14, repositories=12, models=3, datasets=3
- 모든 pinned repository의
copied_files=[]확인 git diff --check통과
- 다음 작업: 17개 lesson, notebook metadata/style, typed API/config, artifact schema, 공정 비교 계약과 완료 조건 traceability를 설계하고 toy 크기를 laptop에서 측정
- 현재 checkpoint: C3 Package 기반과 수학
- 산출물:
docs/design/curriculum.md: L00~L16 objective/prerequisite/demo/exercise/sourcedocs/design/notebook-style.md: ADHD 학습 리듬, metadata, 접근성, 한영 paritydocs/design/architecture.md: typed batch/protocol, strict config, device/download, fairness, checkpoint, experiment-card와 adapter schemadocs/design/traceability.md: 완료 조건 R01~R20과 알고리즘/test 연결docs/glossary.mdscripts/benchmark_toy_sizes.py,docs/research/C2_TOY_BENCHMARK.json
- 환경 고정: project
.venvPython 3.10.12, PyTorch 2.13.0 - 실제 CPU 측정(M4 host, 3 warm-up + 20 measured step):
tiny-micro-v120,224 params, median 3.081mstiny-base-v177,312 params, median 6.430ms- canonical
tiny-v1242,976 params, median 9.598ms, p95 10.809ms
- MPS 판정: build=True지만 현재 sandbox runtime에서 available=False. 성능 수치를 만들지 않았고 C8 capability probe 대상으로 유지
- 검증:
python3 -m json.tool로 source/benchmark manifest 통과scripts/check_design_contract.py통과- lessons=17, requirements=20, source IDs=33, tiny-v1 params=242,976
- 다음 작업: packaging, strict config, seed/device, tensor/math, tiny tokenizer/LM, offline 환경/데이터, atomic checkpoint와 CLI skeleton을 unit test와 함께 구현
- 현재 checkpoint: C4 고전 RL reference 구현
- 환경:
.venvPython 3.10.12, torch 2.13.0, NumPy 2.2.6, PyYAML 6.0.3 - 산출물:
pyproject.toml, editablerl-studyCLI/package- immutable tensor/environment types, strict YAML config/hash, seed와 명시적 device
- categorical entropy/cross-entropy/forward KL, selected log-prob, masked reductions
- printable-ASCII tokenizer, canonical
tiny-v1causal LM(242,976 params) - BernoulliBandit, TinyGridWorld, TinyReasoning 256/64/128 + preference 512
- integrity hash와 atomic rename을 쓰는 checkpoint/RNG/resume 기반, JSONL metric
python -m rl_study.demofoundation smoke와 CLI preflight/train dry-run
- 첫 test 실패와 수정: canonical 128-token tokenizer를 64-vocab micro model에
잘못 연결한 통합 test를 발견해 실제 경로인
tiny-v1으로 contract를 맞춤 - 검증:
- ruff: pass
- strict mypy: 23 source files, no issues
- pytest: 31 passed in 3.15s
pip check: no broken requirements- core import 후 Transformers/TRL/verl/ALFWorld 미로딩 확인
- design contract와 CLI GRPO config dry-run 통과
- foundation demo split hash:
sha256:f6811f784261cbd0d8895519ebe6fd468c5882a0d5f156d28dac9b9abb7fe186
- 다음 작업: DP/MC/TD/Q-learning, DQN, REINFORCE, actor-critic, GAE, classic PPO의 수식 대응 loss/update, train/eval/checkpoint/resume와 instability ablation 구현
- 현재 checkpoint: C5 LLM policy·preference·reward 기반
- 산출물:
algorithms/tabular.py: value/policy iteration, MC, TD(0), Q-learningalgorithms/dqn.py: replay, frozen target, hard/soft sync, Double DQN optionalgorithms/policy_gradient.py: REINFORCE, running baseline, actor-criticmath/returns.py: discounted return, terminated/truncated-aware GAEalgorithms/ppo.py: old/current ratio, asymmetric bounds, KL/clip metrics- 5개 classic CLI train/eval/checkpoint/resume runner와 toy config
docs/algorithms/classic.md,docs/research/C4_CLASSIC_BENCHMARK.json
- local CPU 기본 결과(seed 42, TinyGridWorld):
- Q-learning/DQN/REINFORCE/actor-critic/PPO validation success 모두 1.0
- DQN frozen-initial-target ablation success 0.0 (이 toy seed의 failure demo)
- value/policy iteration 7회, value max diff 0
- MC visited-state RMSE 0, TD(0) 100 episodes RMSE 7.44e-6
- 해석 경계: 위 수치는 local toy sanity이며 논문 재현이나 일반 알고리즘 순위가 아님
- resume 증거:
- Q-learning, DQN(replay+target 포함), REINFORCE(baseline 포함), actor-critic,
PPO 모두 20 continuous == 10+checkpoint+10, state tensor
rtol=0, atol=0 - 실제 CLI Q-learning step 20 → resume step 40 → eval success 1.0
training.steps연장은 허용, model/data/algorithm immutable hash 변경은 거부
- Q-learning, DQN(replay+target 포함), REINFORCE(baseline 포함), actor-critic,
PPO 모두 20 continuous == 10+checkpoint+10, state tensor
- 검증: ruff pass, strict mypy 30 source files, pytest 56 passed in 3.43s,
JSON manifest와
pip check통과 - 다음 작업: response/action mask, token/sequence log-prob, SFT, deterministic verifier, preference batch와 reward model, frozen model/length shortcut 진단 구현
- 현재 checkpoint: C6 RLHF-PPO와 DPO
- 산출물:
- causal next-token 위치에 정렬된 prompt/action/attention mask와 sequence log-prob
- response+EOS만 최적화하는 SFT loss/trainer
- correct=1.0 / valid-format-wrong=0.1 / invalid=0 deterministic verifier
- Bradley–Terry pairwise reward loss, tiny reward/value model
- reference/reward freeze+eval+gradient-none 계약과 parameter SHA-256
- held-out numeric/format accuracy와 score-length Pearson shortcut 진단
docs/algorithms/llm-foundations.md, C5 실행 JSON
- context 수정: 기존 prompt+response가 64 token을 넘을 수 있어 prompt를 의미가 같은 짧은 형식으로 변경. 전체 combined 56~60 token, silent truncation 없음
- 현재 TinyReasoning split hash:
sha256:f238657bbf6c0a112debf7ef3ffafb452c14308dfb5ce57d9abe4f77ac1deedd - local CPU 실행:
- SFT 100 step: 첫/마지막 10 loss 16.121→0.311, validation response-token accuracy 0.902, 1.88s
- reward model 120 step: loss 0.446→0.268, held-out preference 0.797
- numeric 0.594 vs format 1.0, score-length correlation +0.832
- 해석: RM은 format/length shortcut이 강함. 성공 지표로 숨기지 않고 C6 policy update에서 reward exploitation, exact verifier, length를 분리 추적
- 검증: ruff pass, strict mypy 37 source files, pytest 69 passed in 4.25s, design/source manifest 검증 통과
- 다음 작업: old/current/reference/reward/value 역할을 분리한 toy RLHF-PPO, DPO hand-parity loss, fair SFT/RM/RLHF/DPO 실행과 checkpoint/resume 구현
- 현재 checkpoint: C7 GRPO·DAPO와 승인된 최신 변형
- 산출물:
algorithms/dpo.py: chosen/rejected policy-reference sequence log-ratio, response-only 합, beta와 label smoothing, frozen referencealgorithms/rlhf_ppo.py: old/current/reference/reward/value 분리, sampled token KL, terminal score, masked token return와 clipped PPO- DPO/RLHF CLI train/eval, policy+value optimizer를 포함한 atomic resume checkpoint
- split/prompt hash, optimizer step, generated/processed token, model forward와 peak memory를 기록하는 versioned experiment card
docs/algorithms/{dpo,rlhf-ppo}.md, 공정 비교 실행 JSON과 runner
- 공정 비교(seed 42, 같은 SFT policy hash, 같은 64 prompt occurrences, 각 8 step):
- SFT greedy exact 0.0 / format 1.0
- DPO preference accuracy 0.805 / exact 0.0 / format 0.875, offline response token 2,520 / model forward 36
- RM-RLHF exact 0.0 / format 0.0, generated token 1,368 / forward 2,128
- verifier-RLHF exact 0.031 / format 1.0, generated token 1,317 / forward 2,005
- 실패 해석: held-out RM preference accuracy 0.797만 보면 좋아 보이지만 length correlation +0.832인 shortcut이 policy update에서 format 붕괴로 증폭됐다. 이 결과를 숨기거나 알고리즘 순위로 해석하지 않고 failure case로 고정
- resume 증거:
- DPO 4 continuous == 2+resume+2, RLHF 2 continuous == 1+resume+1,
전체 wrapper state
rtol=0, atol=0 - 실제 CLI DPO step 2→4→eval, RLHF step 1→2→eval/inspect-run 성공
- DPO 4 continuous == 2+resume+2, RLHF 2 continuous == 1+resume+1,
전체 wrapper state
- 검증: ruff pass, strict mypy 44 source files, pytest 81 passed in 31.03s,
design contract, source/C6 JSON,
pip check통과 - 다음 작업: GRPO group-relative advantage와 edge case부터 구현하고 DAPO 네 요소, RLOO/Dr. GRPO/GSPO를 서로 다른 variant 이름과 ablation으로 연결
- 현재 checkpoint: C8 Laptop·server profile
- 산출물:
algorithms/grpo.py: group mean/population-std advantage, token ratio/clip, pointwise k3 KL, sequence/token/Dr. GRPO reduction, RLOO와 GSPO objectivealgorithms/dapo.py: Clip-Higher, Dynamic Sampling, global token loss, soft overlong shaping의 paper-only clean-room 구현- 다섯 알고리즘의 toy online trainer, frozen old/reference, strict config, CLI train/eval/checkpoint/resume와 versioned experiment card
docs/algorithms/{grpo-family,dapo}.md, 10-way component 비교 실행 JSON
- variant 경계:
- GRPO는 group reward mean/std + token ratio + sequence별 token 평균 + k3 KL
- RLOO는 completion 전체를 한 action으로 보는 leave-one-out REINFORCE
- Dr. GRPO는 reward std와 response-length normalization을 제거한 고정 분모
- GSPO는 token log-ratio의 평균을 exp한 sequence ratio와 sequence clipping
- DAPO 네 요소를 none/각 하나/all로 독립 toggle
- 수치 안정성: 동일 weight Transformer clone도 CPU forward에서 약
1e-6log-prob 차이가 생길 수 있어 k3에expm1과1e-5clone-equality guard를 적용하고 값·gradient가 정확히 0인지 test로 고정 - 공정 비교(seed 42, 3 rollout step, group 4):
- 10개 variant가 같은 SFT policy hash에서 시작
- non-dynamic variant는 같은 ordered prompt hash, 12 rollout / 246 token
- dynamic DAPO는 48 rollout / 987~988 token, rejected group 10, bounded budget exhausted update 1을 숨기지 않고 기록
- overlong-only exact 0.0625, dynamic exact 0.03125는 32 prompt·단일 seed의 관측값일 뿐 우승 또는 논문 규모 재현으로 해석하지 않음
- resume/CLI 증거:
- GRPO/DAPO/RLOO/Dr. GRPO/GSPO 모두 2 continuous == 1+resume+1,
전체 wrapper tensor
rtol=0, atol=0 - shell CLI GRPO step 1→2→eval/inspect-run, DAPO all-four step 1 성공
- GRPO/DAPO/RLOO/Dr. GRPO/GSPO 모두 2 continuous == 1+resume+1,
전체 wrapper tensor
- 검증: ruff pass, strict mypy 49 source files, pytest 107 passed in 129.12s,
design contract와 source/C7 JSON,
git diff --check통과 - 환경 메모: PyTorch 2.13 external device backend 자동 탐색이 이 Mac에서 매우
느려지는 현상을 분리 진단했고 CPU toy test에는
TORCH_DEVICE_BACKEND_AUTOLOAD=0을 사용. C8 troubleshooting/preflight에 반영 예정 - 다음 작업: 공개 LM/dataset loader와 explicit download guard, local LoRA one-step, resource estimator, pinned TRL/verl laptop/server recipe 구현
- 현재 checkpoint: C9 Agentic RL
- offline contract:
- audited model/dataset manifest, exact revision cache probe와 100MB download guard
- arbitrary model은 revision/license/expected bytes 없으면 Hub lookup 전 실패
- CPU/MPS/CUDA tensor probe와 device별 dtype, QLoRA CUDA+bitsandbytes hard gate
- base/adapter/gradient/Adam/activation/runtime을 분리한 resource estimator
- GSM8K
main/traindeterministic validation split, 공식 test contamination 차단
- 실제 optional stack:
- TRL 1.10.0, Transformers 4.57.6, PEFT 0.20.0, Datasets 4.8.5,
Accelerate 1.14.0;
requirements/laptop.lockSHA-256cf45c4b…321934 - SmolLM2-135M-Instruct exact revision와 GSM8K exact revision을 명시 승인 후 download
- cache 사용량 관측: model 260MB, dataset 4.5MB; 어떤 weight/data도 repo에 commit 안 함
- TRL 1.10.0, Transformers 4.57.6, PEFT 0.20.0, Datasets 4.8.5,
Accelerate 1.14.0;
- local CPU 실제 LoRA SFT:
- q/v projection rank 8, trainable 460,800 / total 134,975,808 (
0.3414%) - 2 optimizer step, completion token 103, model forward 10
- last train loss 1.0795, train-derived 8-example validation loss 1.5466
- peak RSS 1,258,356,736 bytes; 초기 estimator가 낮았던 failure를 숨기지 않고 768MiB runtime overhead 항을 추가해 보수적으로 보정
- continuous 2와 1+resume+1 adapter가 byte-identical,
SHA-256
0c56d05d…c0890f9; offline eval step 2 성공
- q/v projection rank 8, trainable 460,800 / total 134,975,808 (
- server 경계:
- verl v0.9.0 /
483b8a0…, Qwen3-4B /1cfa9a7…DAPO·GSPO Hydra recipe render와 schema/variant test 통과 - 현재 Linux CUDA 8-GPU 및 verl runtime이 없어
external-manual,result_origin=not_executed,local_executed=null; 가짜 성능/성공 output 없음
- verl v0.9.0 /
- 미실행 범위: Qwen3-0.6B는 preflight only, QLoRA는 CPU에서 unsupported, MPS는 build=True/available=False인 sandbox probe 결과만 기록
- 검증: ruff pass, strict mypy 56 source files, pytest 117 passed in 97.51s,
design contract, C8 JSON, dependency integrity와
git diff --check통과 - 다음 작업: CalculatorToolEnv/LocalLookupEnv typed step contract, agent token mask, outcome/process reward와 credit assignment, multi-turn train/eval/failure case 구현
- 현재 checkpoint: C10 한국어·영어 notebook과 Colab
- offline Agentic contract:
CalculatorToolEnv:eval없는 AST arithmetic allowlistLocalLookupEnv: immutable corpus와 answer+citation 채점- strict JSON action parser, visible tool schema, invalid/timeout, termination/truncation 분리; toy env에는 shell/network 실행 경로 없음
- observation, 원 context/action token IDs, candidate set, parsed action, tool output, process/outcome reward와 policy version을 immutable step trajectory로 보존
- 현재 action/EOS만 loss mask에 포함하고 tool output은 다음 context로만 사용
- policy/credit:
- finite admissible-action LM scorer와 on-policy Agentic REINFORCE
- final outcome broadcast baseline 대 process+outcome discounted return
- outcome은 종료 step에만 두고
process + outcome을 한 번만 합산
- 실제 동일 조건 24-step CPU 비교:
- shared initial policy
8c3c8b4…e4c5fe, task split2e24cdf…6fc0f4, ordered episode IDscc4d5a7…14a299, optimizer step 24 - broadcast: env step 69, generated 2,094, processed 116,637, forward 162, validation success 0, useful-tool-step rate 0.125
- discounted return: env step 67, generated 1,960, processed 110,253, forward 156, validation success 0, useful-tool-step rate 0.1818
- 단일 seed·8 task이므로 우열을 주장하지 않음. 두 success 0과 broadcast
last loss
-0.0도 실패/한계 증거로 그대로 보존
- shared initial policy
- lifecycle/failure evidence:
- continuous 4와 2+resume+2 model state가 모든 tensor
torch.equal - CLI train/eval/inspect-run 성공, network socket deny train 성공
- silent context truncation, stale/future trajectory, 허용 lag, tool nondeterminism, retokenization drift, repeated-call reward hacking, invalid/timeout/step-limit test
- continuous 4와 2+resume+2 model state가 모든 tensor
- ALFWorld 0.4.2 adapter:
- injected backend와 최신 admissible command allowlist 경계 unit test 통과
- package/assets 없는 Mac arm64에서는 download/install 없이
external-manual; ALFWorld MIT와 선택 Fast Downward GPL-3.0 경계를 분리
- 산출물:
docs/algorithms/agentic-rl.md,docs/research/C9_AGENTIC_BENCHMARK.json, 두 Agentic config/experiment card - 검증: ruff pass, strict mypy 65 source files, design contract, source/C9 JSON,
git diff --check통과; 전체 pytest 137 passed in 210.18s - 다음 작업: 한국어 L00~L16 notebook을 고정 리듬/빠른·전체 path로 생성하고 각 notebook을 clean top-to-bottom 실행한 뒤 영어 mirror/parity와 Colab 증거 완성
- 한국어 L00~L16:
- lesson별 핵심 식, 전체 지도상의 위치, 예측 질문, 작은 public-API 실험, 구현 대안·trade-off, 구체적 함정/test, 회상 문제와 실제 출력 기반 결론 작성
- L00 Mermaid와 ASCII fallback, 모든 lesson 3개 timed micro-section,
[필수/CORE]/[심화/DEEP DIVE], stable cell ID/source/test/code hash 적용 - 17/17 independent fresh-kernel 실행 성공, 실행 contract 통과
- 영어 mirror L00~L16:
- 한국어 최종 검증 뒤 동일 generator source에서 생성
- 17/17 independent fresh-kernel 실행 성공
- 17쌍 stable ID, code/hash, equation, source/test metadata parity 통과
- 최종 latest clean set:
- 34/34 성공, Python 3.10.12, PyTorch 2.13.0, Darwin arm64
- 한국어 코드 실행 합계 28.50초/peak RSS 528,318,464 byte
- 영어 코드 실행 합계 26.89초/peak RSS 535,986,176 byte
- append-only manifest 83 attempt 중 성공 71/실패 12; 실패 record를 삭제하지 않음
- 산출물:
docs/research/C10_NOTEBOOK_EXECUTIONS.jsonl,docs/research/C10_NOTEBOOK_REPORT.json
- 환경 진단:
- repository
.venv의 PyTorch Python file 7,279개가 macOSdataless로 offload되어 cell import timeout이 발생함 - 사용자 파일을 삭제하지 않고
/private/tmp검증 venv에 동일 PyTorch 2.13.0과 notebook dependency를 설치;pip check통과 후 최종 증거 수집 - 실패 timeout/permission/warning 기록도 manifest에 보존
- repository
- Colab source:
notebooks/colab/RL_study_quickstart.ipynb와 generator/contract checker 완성- clone → base install → offline foundation smoke + 2-action policy update → opt-in Qwen3-0.6B LoRA one-step 순서, download guard/tag/syntax/hash 검사 통과
- 2026-08-19
git ls-remote --symref origin HEAD는 ref 없이 정상 종료: 대상 원격이 비어 있어 hosted clone은 현재 실패함 - 원격 push는 GOAL 계약상 별도 사용자 승인이 필요하므로 hosted 새 runtime 실행과 날짜 증거는 아직 완료 처리하지 않음
- 다음 작업: 사용자가 첫 commit/push를 승인하면 populated remote를 재확인하고 무료 Colab 새 CPU runtime에서 toy 경로를 실행해 C10을 완료
- 현재 checkpoint: C10/C11 hosted evidence gate, C12 local release audit 준비
- 실제 demo/report/UI:
- DPO, RLHF-PPO, GRPO, DAPO, Agentic REINFORCE를 seed 42로 각각 실제 1 update 실행하고 고유 run directory 생성
summary.json, 1800×1275 PNG, JavaScript 없는 정적 report, offline 대화형 filter UI, checkpoint 5개와 experiment card 5개 생성- 같은 TinyReasoning fixed prompt에서 reward/sampled KL/entropy/clip fraction을 진단하고 Agentic metric은 의미가 달라 그래프에서 분리
- fresh venv 첫 실행 command 25.473초(목표 600초), peak RSS 595,099,648 byte; 한 seed/한 update 결과로 순위나 논문 규모 재현을 주장하지 않음
C11_DEMO_EVIDENCE.json에서 모든 artifact SHA-256, PNG 구조, checkpoint manifest file hash와 card field를 재검증
- 공개 문서·접근성:
- README 15분 quickstart/course entry/hardware/troubleshooting/contribution 경로
- MkDocs home, getting started, 17-lesson map, 수학 도구함, algorithm cards, hardware matrix, troubleshooting, provenance와 기존 implementation notes 연결
- 정적 report의 caption/alt/text conclusion, UI의 label/aria-live/noscript,
textContentrendering과 local embedded JSON 계약 - MkDocs 1.6.1 + Material 9.7.7
build --strict0.44초 성공
- provenance/community/CI:
- source 33개, 문서 사용 ID 32개, unknown 0, copied/adapted repository 0; GSM8K/TinyReasoning redistribution 조건 누락을 감사 중 발견해 보완
- CONTRIBUTING, original CODE_OF_CONDUCT, SECURITY, SUPPORT, issue/PR template
- GitHub Actions에 Linux/macOS/Windows × Python 3.10/3.12 CPU matrix와 weekly network/link/34-notebook fresh execution job 정의
- official action release 확인 후 checkout/setup-python/upload-artifact major v7 사용
- 신규 사용자 journey:
- 새
/private/tmp/rl-study-c11-journey.SNXcFg/venv에서.[dev]install과pip check, CPU preflight, README demo, artifact audit 성공 python -m rl_study.cli가 아무 출력 없이 끝나는 entrypoint bug를 발견해__main__guard와 subprocess regression test를 추가한 뒤 fresh venv 재검증- local link 64 target 통과; network 44 URL 통과, pytest docs 1개는 HTTP 429라 reachable-but-content-unvalidated로 명시; provenance/MkDocs strict 통과
- 상세 실행 순서와 한계:
docs/research/C11_USER_JOURNEY.json
- 새
- 최종 local 회귀(fresh venv): pytest 145 passed in 113.09s, ruff all pass, strict mypy 66 source files pass; notebook contract 34, bilingual parity 17, Colab source contract와 design contract 재통과
- 미완료 경계:
- 원격은 여전히 ref가 없는 빈 저장소이고 push는 별도 사용자 승인이 필요함
- 따라서 GitHub-hosted 3-OS matrix/weekly job과 fresh hosted Colab은 아직 실행하지 않았으며 성공 badge·결과를 만들지 않음
- 다음 작업: C12 local hygiene/release 문서·clean clone audit를 완료한 뒤, 사용자 push 승인 시 populated remote에서 hosted CI와 Colab evidence를 수집
- 현재 checkpoint: C10/C11 hosted evidence gate; C12 local release audit 통과
- release 준비:
- package/CFF version
0.1.0, CHANGELOG, 알려진 한계와 release contract 완성 - secret pattern, file size, symlink, JSON finite 값, version/traceability/origin과 공개 community file을 자동 검사
- package/CFF version
- clean-clone에서 발견하고 수정한 결함:
- 첫 감사에서
.gitignore의models/가src/rl_study/models/까지 제외해 실제 clone에 핵심 모듈 6개가 없는 문제를 발견 - 패턴을 top-level
/models/로 한정하고 source package를 추적한 뒤 전체 pytest 146개, ruff, strict mypy를 재통과; 수정 commitc29ad1c - sandbox 안의 Jupyter ZMQ socket 생성은 34/34가 동일 PermissionError로 거부되어 환경 제약으로 분리하고, 새 clone·새 venv의 비샌드박스 감사로 재검증
- 첫 감사에서
- 최종 clean-clone 감사:
- 최초
git status가 빈 clone, branchmain, commitc29ad1c4967b9411a68dd847d73b3e3b2502a890, exact GitHub origin 확인 - macOS arm64, Python 3.10.12, PyTorch 2.13.0의 독립 venv에서 17/17 명령 통과, 총 205.851초, auditor peak RSS 195,493,888 byte
- pytest 146개, ruff, strict mypy 66 source, design/provenance/local-link/release, notebook 34개와 17쌍 parity, Colab source, strict MkDocs 모두 통과
- 같은 감사에서 notebook 34/34를 각 fresh kernel로 재실행(52.737초)한 뒤 executed/parity contract를 다시 통과
- 명령별 반환 코드·시간·출력 SHA-256과 한계는
docs/research/C12_FINAL_AUDIT.json에 원자적으로 기록
- 최초
- 정직한 완료 경계:
- local status는
local_pass_hosted_pending; 이 감사는 GitHub-hosted CI나 fresh hosted Colab 성공을 뜻하지 않음 - R19는 exact origin/clean clone/no-force 조건으로 verified. R11/R17/R20은 첫 non-force push 후 hosted 실행 증거를 얻기 전까지 완료 처리하지 않음
- local status는
- 다음 작업: 사용자 승인 후 빈 origin을 다시 읽기 전용 확인하고
main을 non-force push한 뒤 3-OS CI/weekly job과 fresh Colab을 검증
- 현재 checkpoint: C0~C12 완료
- 격리 환경:
- local 최종 회귀는
/private/tmp/rl-study-condaConda prefix의 Python 3.12 사용 - base shell은 활성 상태였지만 base 환경에는 dependency를 설치하지 않음
pip check에서 broken requirement 0
- local 최종 회귀는
- 최종 코드 후보:
- commit
810205e55873c023a6d27accf9b72e9d1b7a9477 git push origin main을 force 없이 실행
- commit
- GitHub-hosted CI:
- run
32323026561, conclusionsuccess - Ubuntu/macOS/Windows × Python 3.10/3.12 CPU 6개와 static/docs job 모두 성공
- Windows에서 발견한 POSIX 전용 peak-RSS/system-memory 경로를 Win32 API와 cross-platform helper로 수정한 뒤 full matrix 재검증
- run
- scheduled learning-artifact audit:
- workflow_dispatch run
32323036240, job96288767091, conclusionsuccess - external/local link, 34개 fresh-kernel notebook, parity/output/Colab source, strict MkDocs와 artifact upload 모두 성공
- artifact
9390477024, 1,110,483 byte, SHA-2565f4d3a10…1fcb1b75
- workflow_dispatch run
- fresh Colab CPU runtime:
- 같은 commit을 clone하고 Python 3.12.13 / PyTorch 2.13.0+cpu에서 실행
- toy demo
completed,result_origin=local_executed, fallback false, experiment card 5개, wall 56.607초 - simple policy
p_good0.5 → 0.916 - 선택형 실제 모델 smoke는 opt-in false로 정직하게
skipped
- local 최종 회귀:
- pytest 148 passed, ruff pass, strict mypy 67 source files
- design/provenance/notebook 34/parity 17/Colab/local links/MkDocs strict 통과
- traceability
designed/pending0; R12 8-GPU verl만 근거 있는external-manual
- durable evidence:
docs/research/C10_COLAB_EVIDENCE.jsondocs/research/C12_HOSTED_AUDIT.jsonscripts/check_hosted_evidence.py