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-01**: 主题/章节分段输出带标题的 Markdown 结构
|
||||
- [ ] **OUTPUT-02**: 论点/观点分段输出纯文本,保持原有风格
|
||||
- [ ] **OUTPUT-03**: 输出与现有 SRTProcessor 兼容,不影响其他平台处理
|
||||
- [x] **OUTPUT-01**: 主题/章节分段输出带标题的 Markdown 结构
|
||||
- [x] **OUTPUT-02**: 论点/观点分段输出纯文本,保持原有风格
|
||||
- [x] **OUTPUT-03**: 输出与现有 SRTProcessor 兼容,不影响其他平台处理
|
||||
|
||||
### 配置与兼容性 (CONFIG)
|
||||
|
||||
@@ -122,9 +122,9 @@
|
||||
| COST-01 | Phase 14 | Complete |
|
||||
| COST-02 | Phase 14 | Complete |
|
||||
| COST-03 | Phase 14 | Pending |
|
||||
| OUTPUT-01 | Phase 15 | Pending |
|
||||
| OUTPUT-02 | Phase 15 | Pending |
|
||||
| OUTPUT-03 | Phase 15 | Pending |
|
||||
| OUTPUT-01 | Phase 15 | Complete |
|
||||
| OUTPUT-02 | Phase 15 | Complete |
|
||||
| OUTPUT-03 | Phase 15 | Complete |
|
||||
| CONFIG-01 | Phase 15 | Complete |
|
||||
| CONFIG-02 | Phase 15 | Complete |
|
||||
| CONFIG-03 | Phase 15 | Complete |
|
||||
|
||||
+4
-4
@@ -3,8 +3,8 @@ gsd_state_version: 1.0
|
||||
milestone: v1.4
|
||||
milestone_name: Zhihu Anti-Crawler
|
||||
status: executing
|
||||
stopped_at: Completed 15-03-PLAN.md (backward compatibility tests)
|
||||
last_updated: "2026-03-23T15:04:16.832Z"
|
||||
stopped_at: Completed Phase 15 Plan 02 (configuration integration)
|
||||
last_updated: "2026-03-23T15:04:20.774Z"
|
||||
last_activity: 2026-03-23 — Phase 15 Plan 01 completed (enable_semantic_segmentation config integration)
|
||||
progress:
|
||||
total_phases: 15
|
||||
@@ -168,8 +168,8 @@ None.
|
||||
|
||||
## Session Continuity
|
||||
|
||||
Last session: 2026-03-23T15:04:13.311Z
|
||||
Stopped at: Completed 15-03-PLAN.md (backward compatibility tests)
|
||||
Last session: 2026-03-23T15:04:20.772Z
|
||||
Stopped at: Completed Phase 15 Plan 02 (configuration integration)
|
||||
Resume file: None
|
||||
|
||||
**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