개인결정론적 월간 allocator · 날짜별 제약 · Python/React 이중 검증
Flex — 제약을 숨기지 않는 근무 계획기
개인 설계·구현·검증
2026-07-01 — present
인정시간·실제 근무·휴가·일/주 상한을 하나의 결정론적 배분 계약으로 묶고, 달성 불가능한 목표는 초과 배정 대신 부족분과 이유로 표시하는 로컬 우선 근무 계획기
시스템 아키텍처
문제 해결 과정
1
목표 시간이 남은 가용 슬롯보다 커도 강제로 초과 배정하면 계획이 현실을 숨기는 문제
해결 과정
일·주 상한과 고정 계획을 먼저 적용하고 배정 가능한 시간을 계산한 뒤 부족분을 명시적 상태로 반환
결과
상한을 깨지 않고 insufficient_slots와 부족 시간을 화면에 표시
2
특정 날짜 변경이 월 전체 계획을 예기치 않게 덮어쓸 수 있는 문제
해결 과정
고정 날짜를 우선 잠그고 충돌 preview 후 나머지 날짜에만 결정론적 재배분 적용
결과
외부 시스템 쓰기 없이 preview에서 변경 범위와 충돌 경계를 표시
합성 시나리오
실제 운영·개인 데이터 없이 코드의 상태 전이와 경계만 고정 fixture로 재현합니다.
프로젝트 설명
월 목표와 날짜별 제약을 정규화한 뒤 고정 계획을 먼저 적용하고, 필요한 날짜만 선택적으로 활성화해 남은 시간을 배분합니다. 목표를 채울 수 없으면 hard limit을 깨지 않고 부족 시간과 상태를 반환합니다. 날짜 override 화면은 충돌과 초과를 preview하고 나머지 날짜의 재배분 결과를 계산하며, 공개 구현은 synthetic fixture 기반 미리보기 경계까지만 다룹니다.
주요 내용
- 고정 계획 우선·선택적 최소 활성화·hard-limit 유지의 단일 allocator 계약
- 달성 불가능 상태를 부족 시간과 원인으로 노출
- 날짜 override preview와 나머지 날짜 재배분 계산
- synthetic scenario·공개 경계 scan·Python/Playwright CI
성과 지표
| 성과 지표 | 이전 | 이후 |
|---|---|---|
| 불가능 상태 | 강제 배정 위험 | insufficient_slots + gap (hard limit 유지) |
| 날짜 변경 범위 | 월 전체 재계산 위험 | 고정 날짜 + 나머지 재배분 (preview·재배분 경계) |
기술 선택 근거
- ▶기존 _minimum_activation 흐름을 복원해 최소 근무시간을 의무 시드가 아닌 선택적 활성화 하한으로 유지
- ▶외부 시스템 연동을 추가하지 않고 URL/로컬 상태로 재현 가능한 판단 표면 제공
깨달은 점
- •최적화보다 먼저 불가능 상태를 정확히 모델링해야 계획기가 현실을 왜곡하지 않는다.
- •사용자 override는 전체 재계산보다 고정 범위와 나머지 배분 경계를 분리해야 예측 가능하다.
기술 스택
PythonReactTypeScriptFastAPIPlaywrightProperty TestingGitHub Actions