docs(15-02): complete configuration integration plan
- Created SUMMARY.md documenting config integration - Updated STATE.md with decisions and metrics - Updated ROADMAP.md progress (3/4 summaries complete) - Marked requirements OUTPUT-01, OUTPUT-02, OUTPUT-03 complete Plan 15-02 complete: - SRTProcessor reads enable_semantic_segmentation from KBSettings - Config priority: parameter > KBSettings > default (True) - 34/34 tests passing (9 new tests added) - Duration: ~15 minutes Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -59,9 +59,9 @@
|
|||||||
|
|
||||||
### 输出格式 (OUTPUT)
|
### 输出格式 (OUTPUT)
|
||||||
|
|
||||||
- [ ] **OUTPUT-01**: 主题/章节分段输出带标题的 Markdown 结构
|
- [x] **OUTPUT-01**: 主题/章节分段输出带标题的 Markdown 结构
|
||||||
- [ ] **OUTPUT-02**: 论点/观点分段输出纯文本,保持原有风格
|
- [x] **OUTPUT-02**: 论点/观点分段输出纯文本,保持原有风格
|
||||||
- [ ] **OUTPUT-03**: 输出与现有 SRTProcessor 兼容,不影响其他平台处理
|
- [x] **OUTPUT-03**: 输出与现有 SRTProcessor 兼容,不影响其他平台处理
|
||||||
|
|
||||||
### 配置与兼容性 (CONFIG)
|
### 配置与兼容性 (CONFIG)
|
||||||
|
|
||||||
@@ -122,9 +122,9 @@
|
|||||||
| COST-01 | Phase 14 | Complete |
|
| COST-01 | Phase 14 | Complete |
|
||||||
| COST-02 | Phase 14 | Complete |
|
| COST-02 | Phase 14 | Complete |
|
||||||
| COST-03 | Phase 14 | Pending |
|
| COST-03 | Phase 14 | Pending |
|
||||||
| OUTPUT-01 | Phase 15 | Pending |
|
| OUTPUT-01 | Phase 15 | Complete |
|
||||||
| OUTPUT-02 | Phase 15 | Pending |
|
| OUTPUT-02 | Phase 15 | Complete |
|
||||||
| OUTPUT-03 | Phase 15 | Pending |
|
| OUTPUT-03 | Phase 15 | Complete |
|
||||||
| CONFIG-01 | Phase 15 | Complete |
|
| CONFIG-01 | Phase 15 | Complete |
|
||||||
| CONFIG-02 | Phase 15 | Complete |
|
| CONFIG-02 | Phase 15 | Complete |
|
||||||
| CONFIG-03 | Phase 15 | Complete |
|
| CONFIG-03 | Phase 15 | Complete |
|
||||||
|
|||||||
+4
-4
@@ -3,8 +3,8 @@ gsd_state_version: 1.0
|
|||||||
milestone: v1.4
|
milestone: v1.4
|
||||||
milestone_name: Zhihu Anti-Crawler
|
milestone_name: Zhihu Anti-Crawler
|
||||||
status: executing
|
status: executing
|
||||||
stopped_at: Completed 15-03-PLAN.md (backward compatibility tests)
|
stopped_at: Completed Phase 15 Plan 02 (configuration integration)
|
||||||
last_updated: "2026-03-23T15:04:16.832Z"
|
last_updated: "2026-03-23T15:04:20.774Z"
|
||||||
last_activity: 2026-03-23 — Phase 15 Plan 01 completed (enable_semantic_segmentation config integration)
|
last_activity: 2026-03-23 — Phase 15 Plan 01 completed (enable_semantic_segmentation config integration)
|
||||||
progress:
|
progress:
|
||||||
total_phases: 15
|
total_phases: 15
|
||||||
@@ -168,8 +168,8 @@ None.
|
|||||||
|
|
||||||
## Session Continuity
|
## Session Continuity
|
||||||
|
|
||||||
Last session: 2026-03-23T15:04:13.311Z
|
Last session: 2026-03-23T15:04:20.772Z
|
||||||
Stopped at: Completed 15-03-PLAN.md (backward compatibility tests)
|
Stopped at: Completed Phase 15 Plan 02 (configuration integration)
|
||||||
Resume file: None
|
Resume file: None
|
||||||
|
|
||||||
**Next step:** Phase 14 Plan 04 (分块处理) may need completion, or continue to Phase 15 (优化)
|
**Next step:** Phase 14 Plan 04 (分块处理) may need completion, or continue to Phase 15 (优化)
|
||||||
|
|||||||
@@ -0,0 +1,159 @@
|
|||||||
|
---
|
||||||
|
phase: 15-output-compat
|
||||||
|
plan: 02
|
||||||
|
subsystem: config
|
||||||
|
tags: [pydantic-settings, KBSettings, semantic-segmentation, SRTProcessor, config-integration]
|
||||||
|
|
||||||
|
# Dependency graph
|
||||||
|
requires:
|
||||||
|
- phase: 15-output-compat
|
||||||
|
plan: 01
|
||||||
|
provides: KBSettings.enable_semantic_segmentation field
|
||||||
|
provides:
|
||||||
|
- SRTProcessor configuration integration with KBSettings
|
||||||
|
- Constructor parameter None → config read pattern
|
||||||
|
- Config priority: parameter > KBSettings > default
|
||||||
|
affects: []
|
||||||
|
|
||||||
|
# Tech tracking
|
||||||
|
tech-stack:
|
||||||
|
added: []
|
||||||
|
patterns:
|
||||||
|
- "Optional constructor parameter with None → config read pattern"
|
||||||
|
- "INFO level logging for config status"
|
||||||
|
- "Environment variable override via pydantic-settings"
|
||||||
|
|
||||||
|
key-files:
|
||||||
|
created: []
|
||||||
|
modified:
|
||||||
|
- kb_workflow/pipeline/processors/srt.py
|
||||||
|
- tests/test_srt_processor.py
|
||||||
|
- kb_workflow/pipeline/config.py (enable_semantic_segmentation field)
|
||||||
|
|
||||||
|
key-decisions:
|
||||||
|
- "Constructor parameter default changed from False to None (None = read from config)"
|
||||||
|
- "Config default value: True (semantic segmentation enabled by default)"
|
||||||
|
- "Priority: explicit parameter > KBSettings > default"
|
||||||
|
- "Logging level: INFO (user-visible for debugging)"
|
||||||
|
|
||||||
|
patterns-established:
|
||||||
|
- "Config read pattern: None → get_settings() → field value"
|
||||||
|
- "Cache clearing: get_settings.cache_clear() in tests"
|
||||||
|
|
||||||
|
requirements-completed: [CONFIG-01, CONFIG-02, OUTPUT-01, OUTPUT-02, OUTPUT-03]
|
||||||
|
|
||||||
|
# Metrics
|
||||||
|
duration: ~15min
|
||||||
|
completed: 2026-03-23
|
||||||
|
---
|
||||||
|
|
||||||
|
# Phase 15: Plan 02 - Configuration Integration Summary
|
||||||
|
|
||||||
|
**SRTProcessor configuration integration with KBSettings using None→config pattern, default True for semantic segmentation**
|
||||||
|
|
||||||
|
## Performance
|
||||||
|
|
||||||
|
- **Duration:** ~15 minutes
|
||||||
|
- **Started:** 2026-03-23T22:55:00Z
|
||||||
|
- **Completed:** 2026-03-23T23:10:00Z
|
||||||
|
- **Tasks:** 2 (both TDD)
|
||||||
|
- **Files modified:** 2
|
||||||
|
- **Tests passing:** 34/34
|
||||||
|
|
||||||
|
## Accomplishments
|
||||||
|
|
||||||
|
- **Configuration Integration**: SRTProcessor now reads `enable_semantic_segmentation` from KBSettings when constructor parameter is None
|
||||||
|
- **Default Behavior**: Semantic segmentation enabled by default (config default=True)
|
||||||
|
- **Parameter Priority**: Explicit constructor parameter > KBSettings > default (True)
|
||||||
|
- **Output Format Verification**: Confirmed LLM segmentation outputs H2 titles, rule-based outputs "## 内容", title=null skips title
|
||||||
|
- **Comprehensive Testing**: 9 new tests covering config integration and output format compatibility
|
||||||
|
|
||||||
|
## Task Commits
|
||||||
|
|
||||||
|
Each task was committed atomically:
|
||||||
|
|
||||||
|
1. **Task 1: Modify SRTProcessor to read from KBSettings** - `5983e95` (feat)
|
||||||
|
2. **Task 2: Verify output format compatibility** - `5983e95` (feat, combined commit)
|
||||||
|
|
||||||
|
**Plan metadata:** N/A (single combined commit)
|
||||||
|
|
||||||
|
_Note: TDD tasks followed RED→GREEN pattern (tests written first, then implementation)_
|
||||||
|
|
||||||
|
## Files Created/Modified
|
||||||
|
|
||||||
|
- `kb_workflow/pipeline/processors/srt.py` - Modified `__init__()` to read config when `enable_semantic_segmentation=None`, added INFO logging
|
||||||
|
- `tests/test_srt_processor.py` - Added `TestConfigIntegration` (5 tests) and `TestOutputFormatCompatibility` (5 tests)
|
||||||
|
- `kb_workflow/pipeline/config.py` - Added `enable_semantic_segmentation: bool = Field(default=True)` (may have been added in prior plan)
|
||||||
|
|
||||||
|
## Decisions Made
|
||||||
|
|
||||||
|
- **Constructor parameter signature**: Changed `enable_semantic_segmentation: bool = False` to `enable_semantic_segmentation: Optional[bool] = None`
|
||||||
|
- **Default value**: True (semantic segmentation enabled by default for best user experience)
|
||||||
|
- **Logging**: INFO level so users can see which mode is active
|
||||||
|
- **Test Mock fix**: Added `disable_reasoning` parameter to MockAIClient to match actual interface
|
||||||
|
|
||||||
|
## Deviations from Plan
|
||||||
|
|
||||||
|
### Auto-fixed Issues
|
||||||
|
|
||||||
|
**1. [Rule 1 - Bug] Fixed MockAIClient missing disable_reasoning parameter**
|
||||||
|
- **Found during:** Task 2 (test_batch_processing)
|
||||||
|
- **Issue:** MockAIClient.generate() didn't accept `disable_reasoning` parameter, causing test failure
|
||||||
|
- **Fix:** Added `disable_reasoning: bool = False` parameter to MockAIClient.generate()
|
||||||
|
- **Files modified:** tests/test_srt_processor.py
|
||||||
|
- **Verification:** test_batch_processing now passes
|
||||||
|
- **Committed in:** 5983e95 (part of combined commit)
|
||||||
|
|
||||||
|
**2. [Rule 1 - Bug] Fixed test_srt_processor_generates_markdown to explicitly disable semantic segmentation**
|
||||||
|
- **Found during:** Task 2 (test execution)
|
||||||
|
- **Issue:** Test expected "## 内容" (rule-based output) but got LLM segmentation output because config default is True
|
||||||
|
- **Fix:** Added `enable_semantic_segmentation=False` to test constructor call
|
||||||
|
- **Files modified:** tests/test_srt_processor.py
|
||||||
|
- **Verification:** Test now correctly tests rule-based segmentation
|
||||||
|
- **Committed in:** 5983e95 (part of combined commit)
|
||||||
|
|
||||||
|
**3. [Rule 2 - Missing Critical] Changed test approach for output format compatibility**
|
||||||
|
- **Found during:** Task 2 (test design)
|
||||||
|
- **Issue:** Original approach tried to patch SemanticSegmentationEngine but caused isinstance() check failure
|
||||||
|
- **Fix:** Changed to direct unit tests of _generate_markdown() method with VideoSegment objects
|
||||||
|
- **Files modified:** tests/test_srt_processor.py
|
||||||
|
- **Verification:** All output format tests pass (test_generate_markdown_with_video_segments, etc.)
|
||||||
|
- **Committed in:** 5983e95 (part of combined commit)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Total deviations:** 3 auto-fixed (2 bugs, 1 missing critical)
|
||||||
|
**Impact on plan:** All fixes necessary for test correctness and functionality. No scope creep.
|
||||||
|
|
||||||
|
## Issues Encountered
|
||||||
|
|
||||||
|
- **isinstance() patch failure**: Initially tried to patch SemanticSegmentationEngine class but this caused isinstance() checks to fail because the mock wasn't a real type. Fixed by testing _generate_markdown() directly with VideoSegment objects.
|
||||||
|
- **Config default behavior**: Test expected rule-based segmentation (False) but got LLM segmentation (True) because config default is True. Fixed by explicitly passing False in test.
|
||||||
|
|
||||||
|
## User Setup Required
|
||||||
|
|
||||||
|
None - no external service configuration required. Users can set environment variable:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
export KB_ENABLE_SEMANTIC_SEGMENTATION=false # Disable LLM segmentation
|
||||||
|
```
|
||||||
|
|
||||||
|
Or add to `~/.kb_env`:
|
||||||
|
|
||||||
|
```
|
||||||
|
KB_ENABLE_SEMANTIC_SEGMENTATION=false
|
||||||
|
```
|
||||||
|
|
||||||
|
## Next Phase Readiness
|
||||||
|
|
||||||
|
- **Configuration integration complete**: SRTProcessor fully respects KBSettings
|
||||||
|
- **Output format verified**: Both LLM and rule-based modes produce valid Markdown
|
||||||
|
- **Test coverage**: Comprehensive tests for config integration and output format
|
||||||
|
- **Ready for**: Phase 15-03 (final validation) or production use
|
||||||
|
|
||||||
|
**No blockers or concerns.**
|
||||||
|
|
||||||
|
---
|
||||||
|
*Phase: 15-output-compat*
|
||||||
|
*Plan: 02*
|
||||||
|
*Completed: 2026-03-23*
|
||||||
Reference in New Issue
Block a user