Skip to content

Commit a5e3d35

Browse files
v0.3.1-alpha.1: Stabilization + Oracle B-O1/B-O2 + Full Medium/High completion (#11)
* Update: gitignore * fix: resolve critical parsing bugs and error type loss (C-1, C-2) - Remove 5 exception-swallowing try/with blocks in Dbc.fs that silently returned defaults on parse failures, risking incorrect C code generation - Add GenerateError DU to preserve error type info through the pipeline (ParseError/ValidationError/CodeGenError no longer flattened to string) - Update Api.fs, Library.fs facade, and CLI to match GenerateError variants - Add Core test project with 13 tests (10 Dbc + 3 Api error propagation) - Fix Windows test compatibility: use mingw32-make and .exe extension - All 29 tests pass (16 Generator + 13 Core), 0 failures * docs: add ROADMAP and session reports for C-1, C-2, Windows compat work * test: add Config, Codegen, and edge case tests (H-1c, H-1d, H-1f) - ConfigTests: 16 tests for Config.validate and Config.loadFromYaml - CodegenTests: 8 tests for Codegen.generate with inline IR - EdgeCaseTests: 4 tests for empty DBC, Motorola LSB, signed, 64-bit signals Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode) Co-authored-by: Sisyphus <[email protected]> * test: add Facade tests and E2E happy-path (H-1e, H-3c) - FacadeTests: 4 tests verifying exception type mapping - ApiTests: 1 E2E happy-path test with examples/sample.dbc - fsproj: add compile items and Signal.CANdy project reference Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode) Co-authored-by: Sisyphus <[email protected]> * docs: update ROADMAP and session report for H-1, H-3 completion - Mark H-1c~H-1g, H-3a~H-3c as complete in ROADMAP - Add session report for 34 new tests (63 total, 0 failures) Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode) Co-authored-by: Sisyphus <[email protected]> * refactor: consolidate Generator into Core via Compat bridge (H-2, M-1) Remove 8 duplicated .fs files from Generator (~1100 lines), replacing them with an 83-line Compat.fs backward-compatibility bridge that re-exports Core types under the Generator namespace. Generator.fsproj now references Core directly and carries zero package dependencies of its own. Key changes: - Generator.fsproj: remove 7 Compile items + 5 PackageReferences, add Core ref - Compat.fs: bridge modules for Ir, Config, Dbc, Codegen, Result (active pattern) - Program.fs: rewritten to use Core API (Config/Dbc/Codegen/Errors) directly - Core Dbc.fs: add missing validateMuxStructure (was in legacy Generator only) All 63 tests pass (47 Core + 16 Generator), E2E roundtrip verified. * chore: remove dead code, improve codegen readability, update deps table (M-2, M-3, M-4) * feat(canfd): remove 8-byte hard limits, add CAN FD support (L-4a, L-4b) - Fix get_bits_le/set_bits_le: replace hardcoded 8-byte loop with dynamic n_bytes - Fix 64-bit mask UB: use UINT64_MAX when length==64 - Fix memset: use message.Length instead of hardcoded 8 - Add 6 F# tests (codegen + edge cases) for CAN FD payloads up to 64 bytes - Add canfd_test.dbc (DLC=64, 3 signals) and E2E test_fd_roundtrip in main.c - Update README: supported features + limitations reflect CAN FD support - get_bits_be/set_bits_be already use dynamic bit-by-bit loops, no change needed * feat(canfd): generate DLC mapping utilities and fix signed signal decode (L-4c) - Add canfd_dlc_to_len() / canfd_len_to_dlc() to generated utils (ISO 11898-1) - Fix signed signal decode: cast uint64_t to int64_t before float conversion to prevent negative values from being interpreted as huge positive numbers * test: add comprehensive CAN parsing tests with known bit patterns - Add comprehensive_test.dbc with 18 signals covering LE/BE, signed, packed, non-aligned, and scale/offset configurations - Add 7 C E2E test functions verifying byte-level encode/decode correctness - Add 5 F# unit tests for DLC mapping codegen and signal pattern generation * docs: update ROADMAP L-4c complete and add session report * docs: clean up renamed report files and add 260213 morning briefing * chore: track AGENTS.md, Report/, and ROADMAP.md publicly * docs: add git workflow setup session report * ci: add dev branch to CI push trigger and remove stale branches Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode) Co-authored-by: Sisyphus <[email protected]> * build: add global.json to pin .NET SDK 8.0.418 with latestPatch rollForward Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode) Co-authored-by: Sisyphus <[email protected]> * docs: add CI trigger cleanup and SDK pinning session report Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode) Co-authored-by: Sisyphus <[email protected]> * fix: remove dead Say.hello placeholder from Core Library.fs Sisyphus: 🪨⬆️ (OpenCode) * build: bump version to 0.3.0 in fsproj and Api.fs Sisyphus: 🪨⬆️ (OpenCode) * style: apply Fantomas formatting and add format check to CI lint Sisyphus: 🪨⬆️ (OpenCode) * docs: add v0.3.0 release session report Sisyphus: 🪨⬆️ (OpenCode) * docs: add README update session report Sisyphus: 🪨⬆️ (OpenCode) * build: add local coverage report infrastructure (ReportGenerator + script) - Add .config/dotnet-tools.json with ReportGenerator 5.4.5 local tool manifest - Add run-coverage.ps1 PowerShell script for HTML coverage report generation - Add TestResults/ and coverage_report/ to .gitignore Sisyphus: 🪨⬆️ (OpenCode) * test: add TRACE output and expand Motorola LSB suite with hand-calculated vectors - Add TRACE printf lines to test_roundtrip and test_fixed_roundtrip for visual verification - Expand motorola_lsb_suite.dbc from 1 to 4 signals (3 unsigned + 1 signed, byte-aligned) - Add test_moto_lsb_comprehensive with mathematically derived known_data byte arrays Sisyphus: 🪨⬆️ (OpenCode) * test: wire comprehensive C tests into F# integration suite - Add runCGeneratorWithDbc helper to support arbitrary DBC file paths - Add 11 new [Fact] integration tests covering LE/BE/signed/nonalign/packed/scale, CAN FD, multiplex, value table, and Motorola LSB byte-level verification - Generator test count: 16 -> 27, total: 74 -> 85 Sisyphus: 🪨⬆️ (OpenCode) * docs: add test confidence infrastructure session report Sisyphus: 🪨⬆️ (OpenCode) * feat(oracle): scaffold Python oracle test project structure * feat(oracle): add C harness template and Python harness generation * feat(oracle): implement core oracle engine with single-DBC pipeline * feat(oracle): implement dynamic tolerance framework and metadata comparison * feat(oracle): implement core oracle engine with single-DBC pipeline * feat(oracle): implement test vector generation with boundary and adversarial cases * feat(oracle): implement config matrix runner with all valid permutations - Implements run_matrix.py CLI with 8 config combinations (float/fixed × double/float × range_check) - Fixed dimensions: motorola_start_bit=msb, dispatch=direct_map (per Metis directive) - Parallel execution support via ProcessPoolExecutor (--parallel N flag) - Outputs matrix_report.json with per-config results + overall summary - Verified: 336 tests across 8 configs, all passed (42 tests/config) - TODO comment added for negative range_check tests (deferred to future task) * feat(oracle): add vendored DBC subset and corpus runner with opendbc integration - Vendored 15 DBC files from opendbc (commit 245cb1f) for diverse test coverage - Selection criteria: manufacturer diversity, signal types (LE/BE, signed, scaled), size range (4-331 msgs) - Created vendor_dbc/README.md with full attribution (opendbc MIT license, commit hash, file descriptions) - Implemented run_corpus.py (455 lines) with full CLI support: - Batch validation across corpus directory - opendbc shallow clone integration (--clone-opendbc flag) - Unsupported feature detection (float signals, extended mux) - Parallel execution via ProcessPoolExecutor (--parallel N) - Default config generation when not provided - Graceful error handling and fallback to vendor-only mode - Outputs corpus_report.json with per-DBC results (status, counts, reasons) - Verified: 15 vendor DBCs tested, 10 passed, 5 failed (real oracle failures) - Combined mode: 58 DBCs (15 vendor + 43 opendbc) when internet available * test(oracle): add comprehensive pytest suite for oracle harness - Implemented 30 test cases across 5 test modules (tolerance, vector_gen, harness, engine, metadata) - Unit tests (23) run without dotnet/gcc via '-m "not integration"' - Integration tests (7) verify full pipeline with sample + comprehensive DBCs - Fixtures provide DBC paths and inline default config - Markers separate fast unit tests from slow integration tests - Verified: all 30 tests pass, coverage for all oracle module public APIs * feat(oracle): complete integration testing with all example DBCs and config matrix - Executed oracle pipeline on all 7 example DBCs with default config - Ran config matrix on comprehensive_test.dbc (8 configs, all passed) - Ran vendor corpus on 15 curated DBCs (5 passed, 10 failed) - Total coverage: 97,346 tests across 4,975 signal-runs - Pass rate: 92.44% (89,986 passed, 7,277 failed, 83 skipped) - Documented findings in tests/oracle/ORACLE_RESULTS.md - Verified: pytest (30/30) and dotnet test (85/85) pass without regressions * chore(oracle): mark all acceptance criteria and verification items complete - Definition of Done: 6/6 verified (sample, comprehensive, matrix, corpus, pytest, all 7 DBCs) - Final Checklist: 8/8 verified (Must Have items, guardrails, no F#/C/CI modifications) - All verification commands executed successfully - Oracle test pipeline is production-ready * chore(plans): archive stale plans and activate oracle-failure-resolution * chore(oracle): remove tracked Python bytecode caches * chore(git): ignore Python cache artifacts * test(core): add DbcParserLib signal metadata type guard test * docs(oracle): sync roadmap tracking and session reports * fix(dbc): use DbcParserLib byte order instead of hardcoded LE fallback * fix(codegen): correct motorolaMsbFromLsb byte boundary traversal direction * fix(codegen): remove 8-byte clamp in LE bit utilities for CAN FD support Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode) Co-authored-by: Sisyphus <[email protected]> * fix(oracle): add overflow guard to vector generation for extreme scale signals Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode) Co-authored-by: Sisyphus <[email protected]> * docs(oracle): add Category C exception criteria and justification document * fix(codegen): skip range check for signals with DBC no-range sentinel [0|0] * fix(codegen): skip range check for inverted DBC range sentinel (min >= max) * docs(oracle): add Category C exception 5 — dbc_raw_range_sentinel Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode) Co-authored-by: Sisyphus <[email protected]> * docs(oracle): add Category C exception 5 — dbc_raw_range_sentinel * docs(oracle): update ORACLE_RESULTS with v3 corpus — 99.25% adjusted pass rate * chore: close oracle-failure-resolution boulder — 99.25% adjusted pass rate achieved * docs(agents): add evidence and historical-boundary rules Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode) Co-authored-by: Sisyphus <[email protected]> * docs(roadmap): sync oracle tracking source of truth and backlog Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode) Co-authored-by: Sisyphus <[email protected]> * docs(reports): migrate 20260212 historical reports into Reports Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode) Co-authored-by: Sisyphus <[email protected]> * docs(reports): migrate remaining 20260212 historical reports into Reports Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode) Co-authored-by: Sisyphus <[email protected]> * docs(reports): migrate late 20260212 and early 20260213 reports into Reports Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode) Co-authored-by: Sisyphus <[email protected]> * docs(reports): migrate 20260213 briefing and release reports into Reports Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode) Co-authored-by: Sisyphus <[email protected]> * docs(reports): migrate remaining 20260213 oracle reports into Reports Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode) Co-authored-by: Sisyphus <[email protected]> * docs(reports): migrate core oracle implementation reports into Reports Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode) Co-authored-by: Sisyphus <[email protected]> * docs(reports): migrate final oracle historical reports into Reports Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode) Co-authored-by: Sisyphus <[email protected]> * docs(reports): add 20260312 sync and oracle completion reports Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode) Co-authored-by: Sisyphus <[email protected]> * docs(reports): migrate 20260215 analysis report into Reports Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode) Co-authored-by: Sisyphus <[email protected]> * docs(reports): remove stale underscore-named oracle completion report Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode) Co-authored-by: Sisyphus <[email protected]> * feat(codegen): add raw-range sentinel heuristic to skip invalid range checks * docs: mark B-O1 complete, update oracle exception docs and reports * feat(oracle): add mux per-branch vector generation in engine.py Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode) Co-authored-by: Sisyphus <[email protected]> * test(oracle): add mux-specific unit tests for per-branch vector generation Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode) Co-authored-by: Sisyphus <[email protected]> * docs(oracle): update Exception 1, ORACLE_RESULTS, ROADMAP for B-O2 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode) Co-authored-by: Sisyphus <[email protected]> * docs: add B-O2 session report Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode) Co-authored-by: Sisyphus <[email protected]> * chore: mark B-O2 complete, clear boulder state, final report * refactor(oracle): remove unused db param from _generate_mux_vectors * chore: bump version to 0.3.1-alpha.1 * docs: update ROADMAP footer date * docs: add stabilization session report * style: apply fantomas formatting fixes Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode) Co-authored-by: Sisyphus <[email protected]> * docs(oracle): remove accidental line prefixes in ORACLE_RESULTS --------- Co-authored-by: Sisyphus <[email protected]>
1 parent 8088960 commit a5e3d35

105 files changed

Lines changed: 31717 additions & 51 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.config/dotnet-tools.json

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"version": 1,
3+
"isRoot": true,
4+
"tools": {
5+
"dotnet-reportgenerator-globaltool": {
6+
"version": "5.4.5",
7+
"commands": [
8+
"reportgenerator"
9+
]
10+
}
11+
}
12+
}

.gitignore

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,11 +62,17 @@ Thumbs.db
6262
tmp/stress_reports/
6363
analysis/
6464

65+
# Python cache
66+
__pycache__/
67+
*.py[cod]
68+
6569
# Backups/archives
6670
*.zip
6771
*.tar
6872
*.tar.gz
6973
*.tgz
7074
*.bak
7175
backup/
72-
*_backup/
76+
*_backup/
77+
TestResults/
78+
coverage_report/

.sisyphus/boulder.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"active_plan": null,
3+
"last_completed": "b-o2-oracle-multiplex-mode",
4+
"completed_at": "2026-03-12T18:30:00.000Z",
5+
"session_ids": ["ses_3202f0dc6ffeq1KOCfT7Cmzp9E"]
6+
}

AGENTS.md

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -194,14 +194,30 @@ let ``Validation fails for duplicate message IDs`` () =
194194
- **Do not modify test framework** — xUnit + FsUnit is the standard; keep assertions idiomatic
195195
- **Mutable state** only in parsing/IO-bound code where it improves clarity
196196

197+
## Evidence & Source-of-Truth
198+
199+
- **Primary evidence**: actual repository source files, tracked workspace files, current directory layout, build/test outputs, and generated reports under `Reports/`
200+
- **Secondary support**: prior reports, `.sisyphus/` planning notes, helper tools, and external references
201+
- Do not let secondary support override direct repository evidence
202+
- If something is not directly supported by source evidence, state that clearly instead of filling the gap with assumptions
203+
- Do not treat absence of evidence as proof that something was removed, deprecated, or intentionally changed
204+
205+
## Local-Only / Historical Boundaries
206+
207+
- `Reports/` is an append-only historical record for completed sessions. Existing reports must not be modified after the session that created them ends
208+
- If a prior report is stale or inaccurate, record the correction in the current session's report instead of rewriting history
209+
- `.sisyphus/` is agent working state, not canonical product source. Use it for planning/recovery context, but verify important claims against actual repo files before acting on them
210+
- `gen/` and `tmp/` are working/output areas. Do not treat them as authoritative implementation sources unless the task is explicitly about generated artifacts or transient validation output
211+
- `external_test/` may contain local validation material; do not treat proprietary/local contents there as safe-to-commit by default
212+
197213
## 작업 보고 및 로그 (Workflow & Reporting)
198214

199215
> ⚠️ **이 섹션의 규칙은 예외 없이 반드시 준수해야 합니다.**
200216
> 보고 누락은 작업 미완료와 동일하게 취급됩니다.
201217
202218
### 규칙 1: 작업 종료 시 필수 보고
203219

204-
**모든 작업 세션이 종료될 때, 반드시 `Report/` 폴더에 작업 보고서를 작성해야 한다.**
220+
**모든 작업 세션이 종료될 때, 반드시 `Reports/` 폴더에 작업 보고서를 작성해야 한다.**
205221
코드 변경이 있었든 분석만 수행했든, 세션에서 수행한 모든 내용을 기록한다.
206222
보고서가 없는 작업 세션은 **완료된 것으로 인정하지 않는다.**
207223

@@ -210,14 +226,14 @@ let ``Validation fails for duplicate message IDs`` () =
210226
보고서 파일명은 다음 형식을 **반드시** 따른다:
211227

212228
```
213-
Report/YYYYMMDD_HHMM_작업내용요약.md
229+
Reports/YYYYMMDD_HHMM_작업내용요약.md
214230
```
215231

216232
- `YYYYMMDD`: 작업 날짜 (예: 20260212)
217233
- `HHMM`: 작업 종료 시각 (24시간제, 예: 1430)
218234
- `작업내용요약`: 핵심 작업을 간결하게 (예: `Dbc_예외삼킴_수정`, `Core_테스트_구축`)
219235

220-
예시: `Report/20260212_1430_Dbc_예외삼킴_수정.md`
236+
예시: `Reports/20260212_1430_Dbc_예외삼킴_수정.md`
221237

222238
### 규칙 3: 보고서 필수 포함 항목
223239

@@ -235,6 +251,19 @@ Report/YYYYMMDD_HHMM_작업내용요약.md
235251
작업 세션에서 ROADMAP 항목을 완료했다면, **해당 세션 내에서 즉시** `ROADMAP.md`의 체크박스를 `[x]`로 갱신한다.
236252
보고서에도 완료된 ROADMAP 항목 ID를 명시한다 (예: "C-1a, C-1b 완료").
237253

254+
### 규칙 5: 보고서 불변성과 정정 방식
255+
256+
- 기존 `Reports/` 파일은 **불변의 이력**으로 취급한다. 과거 세션이 끝난 뒤에는 수정하지 않는다
257+
- 과거 보고서의 내용이 현재 사실과 어긋나는 것이 확인되면, 원본을 고치지 말고 **현재 세션 보고서**에 정정 사항을 별도 섹션으로 남긴다
258+
- 즉, **이력은 불변 / 현재 진실은 patch-forward** 원칙을 따른다
259+
260+
### 규칙 6: 장기 실행 배치의 RUN_ID 규칙 (선택 적용)
261+
262+
- 기본 규칙은 위의 `Reports/YYYYMMDD_HHMM_작업내용요약.md` 단일 보고서 방식이다
263+
- 다만 작업이 여러 세션에 걸쳐 이어지는 **장기 실행 배치**라면, 필요 시 `RUN_ID`(`yyyymmdd-hhmm`, KST 기준)를 정하고 여러 보고서가 동일한 RUN_ID를 공유하도록 할 수 있다
264+
- 같은 미종료 배치를 이어서 수행하는 경우에는 새 RUN_ID를 임의로 만들지 말고 기존 RUN_ID를 재사용한다
265+
- 이 선택 규칙은 복구성과 추적성을 높이기 위한 보강 규칙이며, 현재 레포의 기본 단일 보고서 관행을 대체하지 않는다
266+
238267
---
239268

240269
> 이 규칙들은 프로젝트의 **추적 가능성(traceability)****재현 가능성(reproducibility)**을 보장하기 위한 것입니다.

ROADMAP.md

Lines changed: 43 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
> **목표**: 코드 생성기의 **신뢰성, 유지보수성, 테스트 커버리지**를 펌웨어 양산 수준으로 끌어올린다.
44
> **근거 문서**: `Analysis/Codebase_Analysis.md` (2026-02-12 코드베이스 심층 분석)
5-
> **진행 관리**: 완료 항목은 `[x]`로 표시. 작업 보고서는 `Report/` 폴더에 기록.
5+
> **진행 관리**: 완료 항목은 `[x]`로 표시. 작업 보고서는 `Reports/` 폴더에 기록.
66
77
---
88

@@ -132,6 +132,47 @@
132132

133133
---
134134

135+
## [Tracking] — Oracle 실패해결 플랜 (2026-02-13 수립본)
136+
137+
> 본 섹션은 `Reports/`, `tests/oracle/ORACLE_RESULTS.md`, `tests/oracle/CATEGORY_C_EXCEPTIONS.md` 기준의 **진행 추적용 상태판**입니다.
138+
> 기존 C/H/M/L 항목과 별개로, 오라클 검증 파이프라인 플랜(Task 0~9)의 현재 도달 지점을 기록합니다.
139+
140+
> **Source-of-Truth 우선순위**:
141+
> 1. `Reports/20260312-1530_Oracle_실패해결_완료.md`
142+
> 2. `tests/oracle/ORACLE_RESULTS.md`
143+
> 3. `tests/oracle/CATEGORY_C_EXCEPTIONS.md`
144+
> 4. `.sisyphus/*` (보조 작업 상태; canonical source 아님)
145+
146+
- [x] **O-1. Task 0** 만료 플랜 아카이브 + boulder 갱신 (`.sisyphus/plans/archived/*`, `.sisyphus/boulder.json`, `Reports/20260312-1530_Oracle_실패해결_완료.md`)
147+
- [x] **O-2. Task 1** DbcParserLib 속성 타입 검증 (`Reports/20260312-1235_DbcParserLib_Type_Probe_Test.md`)
148+
- [x] **O-3. Task 2** C 오라클 하네스 템플릿/유틸 구현 (`Reports/20260213_1817_Oracle_하네스_템플릿_구현.md`)
149+
- [x] **O-4. Task 3** Oracle Core Engine/CLI 구현 (`Reports/20260213_1838_Oracle_Core_Engine_구현.md`, `Reports/20260213_1850_Oracle_Core_Engine_구현.md`)
150+
- [x] **O-5. Task 4** tolerance/metadata 비교 로직 구현 (`Reports/20260213_1848_Oracle_Tolerance_Metadata_Comparison.md`)
151+
- [x] **O-6. Task 5** 벡터 생성 오버플로 가드레일 (`Reports/20260312-1235_Oracle_Overflow_Guardrails.md`, commit `e0fc6fa`)
152+
- [x] **O-7. Task 6** cantools 파싱 비호환 DBC 분류 (`Reports/20260312-1235_Oracle_DBC_Parse_Triage.md`)
153+
- [x] **O-8. Task 7** Category C 예외 판정 기준 문서화 (`tests/oracle/CATEGORY_C_EXCEPTIONS.md`, `Reports/20260312-1530_Oracle_Category_C_Exception_5_추가.md`)
154+
- [x] **O-9. Task 8** Oracle pytest 스위트 구축 (`Reports/20260213_1937_Oracle_pytest_스위트_구축.md`)
155+
- [x] **O-10. Task 9** 전체 통합 실행 + 결과 문서화 (`Reports/20260312-1530_Oracle_실패해결_완료.md`, `tests/oracle/ORACLE_RESULTS.md`)
156+
157+
### Oracle 후속 backlog (우선순위순)
158+
159+
- [x] **B-O1. DBC raw-range detection heuristic**
160+
- 근거: `tests/oracle/ORACLE_RESULTS.md` Recommendation #1, `tests/oracle/CATEGORY_C_EXCEPTIONS.md` Exception 5
161+
- 범위: `[min|max]`가 raw-count sentinel로 보이는 경우의 선택적 탐지/정책 결정
162+
- 상태: **완료** (2026-03-12, commit `1017b52``isRawRangeSentinel` heuristic in `Codegen.fs`, 1,101 oracle failures eliminated)
163+
164+
- [x] **B-O2. Oracle multiplex mode**
165+
- 근거: `tests/oracle/ORACLE_RESULTS.md` Recommendation #2, Exception 1 (`cantools_oracle_limitation`)
166+
- 범위: `run_oracle.py`가 mux branch를 선택해 skip 없이 검증 가능하도록 확장
167+
- 상태: **완료** (2026-03-12 — `_generate_mux_vectors()` in `engine.py`, all vendor mux signals now tested, 0 skipped)
168+
169+
- [ ] **B-O3. Valid bitmask auto-widening**
170+
- 근거: `tests/oracle/ORACLE_RESULTS.md` Recommendation #3, `tests/oracle/CATEGORY_C_EXCEPTIONS.md` Exception 3
171+
- 범위: >32 signal 메시지에서 `uint64_t` 또는 배열 기반 valid 필드 자동 선택
172+
- 상태: **미완료 backlog** (기존 `L-3`와 연결되는 구조 개선 과제)
173+
174+
---
175+
135176
## 작업 순서 의존성 그래프
136177

137178
```
@@ -148,5 +189,5 @@ M-3 (코드 생성 가독성) ── L-1 (Scriban 도입)
148189
149190
---
150191

151-
> **최종 갱신**: 2026-02-12 (C-1, C-2, H-1, H-2, H-3, M-1, M-2, M-3, M-4 완료 [Medium] 전체 완료, L-4a, L-4b, L-4c 완료 — CAN FD DLC 매핑 완료, signed signal decode 버그 수정)
192+
> **최종 갱신**: 2026-03-13 (기존 완료 항목 상태 유지, Oracle 실패해결 플랜 O-1~O-10 완료 반영, Oracle 후속 backlog B-O1~B-O3 추가, `Reports/` 기준으로 정렬)
152193
> **참조**: `Analysis/Codebase_Analysis.md`, `AGENTS.md`
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.

0 commit comments

Comments
 (0)