Coverage report: 99%

Files Functions Classes

coverage.py v7.15.4, created at 2026-08-26 14:20 +0800

      Statements   Branches   Total
File function   coverage statements missing excluded   coverage branches partial   coverage
src\genesis\__init__.py (no function)   100% 1 0 0   100% 0 0   100%
src\genesis\config.py _expand_env   100% 7 0 0   100% 6 0   100%
src\genesis\config.py _deep_merge   100% 6 0 0   100% 4 0   100%
src\genesis\config.py _env_overrides   100% 9 0 0   100% 6 0   100%
src\genesis\config.py _load_yaml   100% 5 0 0   100% 2 0   100%
src\genesis\config.py _redact   100% 8 0 0   100% 6 0   100%
src\genesis\config.py Settings.from_dir   100% 5 0 0   100% 0 0   100%
src\genesis\config.py Settings.get_redacted   100% 1 0 0   100% 0 0   100%
src\genesis\config.py (no function)   100% 91 0 0   100% 0 0   100%
src\genesis\data_models.py (no function)   100% 213 0 0   100% 0 0   100%
src\genesis\eval\__init__.py (no function)   100% 3 0 0   100% 0 0   100%
src\genesis\eval\golden_set.py GoldenSet.__init__   100% 1 0 0   100% 0 0   100%
src\genesis\eval\golden_set.py GoldenSet.load   100% 3 0 0   100% 0 0   100%
src\genesis\eval\golden_set.py (no function)   100% 14 0 0   100% 0 0   100%
src\genesis\eval\scorer.py ChapterScorer.__init__   100% 2 0 0   100% 0 0   100%
src\genesis\eval\scorer.py ChapterScorer.score   100% 12 0 0   100% 2 0   100%
src\genesis\eval\scorer.py ChapterScorer._traceability   100% 9 0 0   100% 4 0   100%
src\genesis\eval\scorer.py ChapterScorer._placeholder_residue   100% 3 0 0   100% 0 0   100%
src\genesis\eval\scorer.py ChapterScorer._completeness   100% 9 0 0   100% 4 0   100%
src\genesis\eval\scorer.py ChapterScorer._run_llm_dimension   100% 4 0 0   100% 0 0   100%
src\genesis\eval\scorer.py ChapterScorer._language_consistency   100% 21 0 0   100% 8 0   100%
src\genesis\eval\scorer.py ChapterScorer._score_chapter   100% 4 0 0   100% 0 0   100%
src\genesis\eval\scorer.py ChapterScorer._adequacy   100% 4 0 0   100% 0 0   100%
src\genesis\eval\scorer.py (no function)   100% 40 0 0   100% 0 0   100%
src\genesis\impact\code_parser.py _relative   100% 1 0 0   100% 0 0   100%
src\genesis\impact\code_parser.py _read   100% 1 0 0   100% 0 0   100%
src\genesis\impact\code_parser.py BaseLanguageParser.source_files   100% 4 0 0   100% 2 0   100%
src\genesis\impact\code_parser.py BaseLanguageParser.parse_file   100% 1 0 0   100% 0 0   100%
src\genesis\impact\code_parser.py JavaLanguageParser.parse_file   100% 18 0 0   100% 8 0   100%
src\genesis\impact\code_parser.py JavaLanguageParser._class_name   100% 2 0 0   100% 0 0   100%
src\genesis\impact\code_parser.py JavaLanguageParser._parse_controller   100% 14 0 0   100% 6 0   100%
src\genesis\impact\code_parser.py JavaLanguageParser._parse_service   100% 2 0 0   100% 0 0   100%
src\genesis\impact\code_parser.py JavaLanguageParser._parse_entity   100% 6 0 0   50% 2 1   88%
src\genesis\impact\code_parser.py register_language_parser   100% 1 0 0   100% 0 0   100%
src\genesis\impact\code_parser.py CodeParser.parse   100% 38 0 0   100% 14 0   100%
src\genesis\impact\code_parser.py CodeParser._modules   100% 2 0 0   100% 0 0   100%
src\genesis\impact\code_parser.py (no function)   100% 38 0 0   100% 0 0   100%
src\genesis\impact\existing_system_explorer.py ExistingSystemExplorer.explore   100% 1 0 0   100% 0 0   100%
src\genesis\impact\existing_system_explorer.py (no function)   100% 4 0 0   100% 0 0   100%
src\genesis\impact\impact_agent.py _element_to_dict   100% 1 0 0   100% 0 0   100%
src\genesis\impact\impact_agent.py impact_report_to_dict   100% 2 0 0   100% 0 0   100%
src\genesis\impact\impact_agent.py _header_index   100% 5 0 0   100% 4 0   100%
src\genesis\impact\impact_agent.py ImpactAgent.run   100% 17 0 0   100% 6 0   100%
src\genesis\impact\impact_agent.py ImpactAgent._classify_table   100% 44 0 0   96% 26 1   99%
src\genesis\impact\impact_agent.py ImpactAgent._build_lookup   100% 11 0 0   100% 8 0   100%
src\genesis\impact\impact_agent.py ImpactAgent._build_lookup.add   100% 1 0 0   100% 0 0   100%
src\genesis\impact\impact_agent.py ImpactAgent._match_tokens   100% 15 0 0   100% 14 0   100%
src\genesis\impact\impact_agent.py ImpactAgent._cell   100% 4 0 0   100% 2 0   100%
src\genesis\impact\impact_agent.py ImpactAgent._unchanged_count   100% 2 0 0   100% 0 0   100%
src\genesis\impact\impact_agent.py (no function)   100% 20 0 0   100% 0 0   100%
src\genesis\inference\__init__.py (no function)   100% 5 0 0   100% 0 0   100%
src\genesis\inference\client.py HttpLLMClient.__init__   100% 8 0 0   100% 2 0   100%
src\genesis\inference\client.py HttpLLMClient.__aenter__   100% 1 0 0   100% 0 0   100%
src\genesis\inference\client.py HttpLLMClient.__aexit__   100% 1 0 0   100% 0 0   100%
src\genesis\inference\client.py HttpLLMClient.chat   100% 35 0 0   100% 12 0   100%
src\genesis\inference\client.py (no function)   100% 13 0 9   100% 0 0   100%
src\genesis\inference\engine.py InferenceEngine.__init__   100% 7 0 0   100% 0 0   100%
src\genesis\inference\engine.py InferenceEngine._wrap_user_data   100% 1 0 0   100% 0 0   100%
src\genesis\inference\engine.py InferenceEngine._render_prompt   100% 3 0 0   100% 2 0   100%
src\genesis\inference\engine.py InferenceEngine._apply_truncation   100% 5 0 0   100% 4 0   100%
src\genesis\inference\engine.py InferenceEngine._model_names   100% 11 0 0   100% 10 0   100%
src\genesis\inference\engine.py InferenceEngine._call   100% 2 0 0   100% 0 0   100%
src\genesis\inference\engine.py InferenceEngine.chat   100% 16 0 0   100% 4 0   100%
src\genesis\inference\engine.py InferenceEngine.chat_structured   100% 36 0 0   100% 10 0   100%
src\genesis\inference\engine.py (no function)   100% 22 0 0   100% 0 0   100%
src\genesis\inference\exceptions.py (no function)   100% 11 0 0   100% 0 0   100%
src\genesis\inference\factory.py _load_dotenv   100% 13 0 0   90% 10 1   96%
src\genesis\inference\factory.py build_inference_engine   100% 10 0 0   100% 2 0   100%
src\genesis\inference\factory.py (no function)   100% 12 0 0   100% 0 0   100%
src\genesis\inference\prompt_registry.py PromptRegistry.__init__   100% 1 0 0   100% 0 0   100%
src\genesis\inference\prompt_registry.py PromptRegistry.register   100% 1 0 0   100% 0 0   100%
src\genesis\inference\prompt_registry.py PromptRegistry.get   100% 12 0 0   100% 8 0   100%
src\genesis\inference\prompt_registry.py PromptRegistry.list_versions   100% 1 0 0   100% 0 0   100%
src\genesis\inference\prompt_registry.py PromptRegistry.render   100% 2 0 0   100% 0 0   100%
src\genesis\inference\prompt_registry.py (no function)   100% 10 0 0   100% 0 0   100%
src\genesis\inference\token.py _is_cjk_char   100% 2 0 0   100% 0 0   100%
src\genesis\inference\token.py approximate_token_count   100% 4 0 0   100% 0 0   100%
src\genesis\inference\token.py _tiktoken_estimator   100% 9 0 0   100% 0 0   100%
src\genesis\inference\token.py make_estimator   100% 3 0 0   100% 2 0   100%
src\genesis\inference\token.py (no function)   100% 8 0 0   100% 0 0   100%
src\genesis\inference\types.py (no function)   100% 38 0 0   100% 0 0   100%
src\genesis\orchestrator\__init__.py (no function)   100% 3 0 0   100% 0 0   100%
src\genesis\orchestrator\datagate.py DataGate.__init__   100% 3 0 0   100% 0 0   100%
src\genesis\orchestrator\datagate.py DataGate.load   100% 10 0 0   100% 4 0   100%
src\genesis\orchestrator\datagate.py DataGate._select_tables   100% 4 0 0   100% 2 0   100%
src\genesis\orchestrator\datagate.py DataGate._estimate   100% 8 0 0   100% 4 0   100%
src\genesis\orchestrator\datagate.py (no function)   100% 18 0 0   100% 0 0   100%
src\genesis\orchestrator\task_queue.py _now   100% 1 0 0   100% 0 0   100%
src\genesis\orchestrator\task_queue.py PersistentTaskQueue.__init__   100% 4 0 0   100% 0 0   100%
src\genesis\orchestrator\task_queue.py PersistentTaskQueue._init_schema   100% 3 0 0   100% 0 0   100%
src\genesis\orchestrator\task_queue.py PersistentTaskQueue.close   100% 1 0 0   100% 0 0   100%
src\genesis\orchestrator\task_queue.py PersistentTaskQueue.enqueue   100% 7 0 0   100% 2 0   100%
src\genesis\orchestrator\task_queue.py PersistentTaskQueue.poll   100% 2 0 0   100% 0 0   100%
src\genesis\orchestrator\task_queue.py PersistentTaskQueue.update_status   100% 7 0 0   100% 4 0   100%
src\genesis\orchestrator\task_queue.py PersistentTaskQueue.get   100% 2 0 0   100% 0 0   100%
src\genesis\orchestrator\task_queue.py PersistentTaskQueue.cancel   100% 5 0 0   100% 2 0   100%
src\genesis\orchestrator\task_queue.py PersistentTaskQueue.recover   100% 6 0 0   100% 2 0   100%
src\genesis\orchestrator\task_queue.py PersistentTaskQueue._find_by_idem   100% 4 0 0   100% 2 0   100%
src\genesis\orchestrator\task_queue.py PersistentTaskQueue._row_to_handle   100% 5 0 0   100% 4 0   100%
src\genesis\orchestrator\task_queue.py (no function)   100% 51 0 15   100% 0 0   100%
src\genesis\parsers\_word_common.py heading_level   100% 4 0 0   100% 0 0   100%
src\genesis\parsers\_word_common.py (no function)   100% 2 0 0   100% 0 0   100%
src\genesis\parsers\excel_parser.py ExcelParser.parse   100% 52 0 4   100% 28 0   100%
src\genesis\parsers\excel_parser.py (no function)   100% 21 0 0   100% 0 0   100%
src\genesis\parsers\excel_reader.py open_workbook   100% 4 0 0   100% 2 0   100%
src\genesis\parsers\excel_reader.py sheet_matrix   100% 1 0 0   100% 0 0   100%
src\genesis\parsers\excel_reader.py (no function)   100% 7 0 0   100% 0 0   100%
src\genesis\parsers\formatting_detector.py _to_rgb_hex   100% 13 0 0   100% 8 0   100%
src\genesis\parsers\formatting_detector.py cell_formatting   100% 9 0 0   100% 4 0   100%
src\genesis\parsers\formatting_detector.py cell_comment   100% 3 0 0   100% 2 0   100%
src\genesis\parsers\formatting_detector.py collect_comments   100% 7 0 0   100% 6 0   100%
src\genesis\parsers\formatting_detector.py (no function)   100% 8 0 0   100% 0 0   100%
src\genesis\parsers\free_text_extractor.py extract_text_blocks   100% 13 0 0   100% 8 0   100%
src\genesis\parsers\free_text_extractor.py build_free_text_table   100% 4 0 0   100% 2 0   100%
src\genesis\parsers\free_text_extractor.py (no function)   100% 5 0 0   100% 0 0   100%
src\genesis\parsers\merge_fill.py forward_fill   100% 12 0 0   100% 10 0   100%
src\genesis\parsers\merge_fill.py (no function)   100% 3 0 0   100% 0 0   100%
src\genesis\parsers\paragraph_splitter.py _is_blank_row   100% 1 0 0   100% 0 0   100%
src\genesis\parsers\paragraph_splitter.py split_paragraphs   100% 12 0 0   100% 10 0   100%
src\genesis\parsers\paragraph_splitter.py (no function)   100% 4 0 0   100% 0 0   100%
src\genesis\parsers\provenance.py build_source_uri   100% 1 0 0   100% 0 0   100%
src\genesis\parsers\provenance.py (no function)   100% 1 0 0   100% 0 0   100%
src\genesis\parsers\resolver.py parse_source_uri   100% 9 0 0   100% 6 0   100%
src\genesis\parsers\resolver.py provenance_to_uri   100% 2 0 0   100% 0 0   100%
src\genesis\parsers\resolver.py resolve_source_uri   100% 7 0 0   100% 8 0   100%
src\genesis\parsers\resolver.py validate_source_uris   100% 10 0 0   100% 4 0   100%
src\genesis\parsers\resolver.py _matches   100% 4 0 0   100% 2 0   100%
src\genesis\parsers\resolver.py (no function)   100% 19 0 0   100% 0 0   100%
src\genesis\parsers\rule_doc_parser.py _is_list_item   100% 3 0 0   100% 2 0   100%
src\genesis\parsers\rule_doc_parser.py _table_to_markdown   100% 7 0 0   100% 4 0   100%
src\genesis\parsers\rule_doc_parser.py RuleDocParser.parse   100% 23 0 0   100% 12 0   100%
src\genesis\parsers\rule_doc_parser.py (no function)   100% 12 0 0   100% 0 0   100%
src\genesis\parsers\sheet_detector.py _name_hit   100% 4 0 0   100% 4 0   100%
src\genesis\parsers\sheet_detector.py _header_hit   100% 7 0 0   100% 10 0   100%
src\genesis\parsers\sheet_detector.py detect_sheet_type   100% 1 0 0   100% 0 0   100%
src\genesis\parsers\sheet_detector.py (no function)   100% 8 0 0   100% 0 0   100%
src\genesis\parsers\sheet_nature.py _non_empty   100% 1 0 0   100% 0 0   100%
src\genesis\parsers\sheet_nature.py find_header_row   100% 4 0 0   100% 4 0   100%
src\genesis\parsers\sheet_nature.py _free_text_like   100% 9 0 0   100% 6 0   100%
src\genesis\parsers\sheet_nature.py classify_sheet   100% 4 0 4   100% 2 0   100%
src\genesis\parsers\sheet_nature.py (no function)   100% 11 0 0   100% 0 0   100%
src\genesis\parsers\source_aggregator.py _validate_path   100% 6 0 0   100% 4 0   100%
src\genesis\parsers\source_aggregator.py SourceParser.__init__   100% 1 0 0   100% 0 0   100%
src\genesis\parsers\source_aggregator.py SourceParser.parse   100% 23 0 0   100% 8 0   100%
src\genesis\parsers\source_aggregator.py (no function)   100% 14 0 0   100% 0 0   100%
src\genesis\parsers\table_extractor.py column_letter   100% 5 0 0   100% 2 0   100%
src\genesis\parsers\table_extractor.py extract_table   100% 14 0 0   100% 8 0   100%
src\genesis\parsers\table_extractor.py (no function)   100% 5 0 0   100% 0 0   100%
src\genesis\parsers\word_template_parser.py WordTemplateParser.parse   100% 22 0 0   100% 12 0   100%
src\genesis\parsers\word_template_parser.py (no function)   100% 10 0 0   100% 0 0   100%
src\genesis\qa\guardrails.py resolve_qa_model   100% 8 0 0   100% 6 0   100%
src\genesis\qa\guardrails.py QALoopController.round   100% 1 0 0   100% 0 0   100%
src\genesis\qa\guardrails.py QALoopController.can_continue   100% 1 0 0   100% 0 0   100%
src\genesis\qa\guardrails.py QALoopController.advance   100% 2 0 0   100% 0 0   100%
src\genesis\qa\guardrails.py QALoopController.is_exhausted   100% 1 0 0   100% 0 0   100%
src\genesis\qa\guardrails.py (no function)   100% 14 0 0   100% 0 0   100%
src\genesis\qa\qa_loop.py QALoop.__init__   100% 1 0 0   100% 0 0   100%
src\genesis\qa\qa_loop.py QALoop._build   96% 23 1 0   75% 8 2   90%
src\genesis\qa\qa_loop.py QALoop.run   100% 11 0 0   100% 2 0   100%
src\genesis\qa\qa_loop.py (no function)   100% 18 0 0   100% 0 0   100%
src\genesis\qa\report.py (no function)   100% 10 0 0   100% 0 0   100%
src\genesis\qa\validator.py QAValidator.__init__   100% 1 0 0   100% 0 0   100%
src\genesis\qa\validator.py QAValidator._to_artifact   100% 5 0 0   100% 2 0   100%
src\genesis\qa\validator.py QAValidator.validate_chapter   100% 3 0 0   100% 0 0   100%
src\genesis\qa\validator.py QAValidator.validate_document   100% 1 0 0   100% 0 0   100%
src\genesis\qa\validator.py QAValidator.validate_doc   100% 7 0 0   100% 0 0   100%
src\genesis\qa\validator.py (no function)   100% 10 0 0   100% 0 0   100%
src\genesis\services\rag_service.py CannedRagService.__init__   100% 1 0 0   100% 0 0   100%
src\genesis\services\rag_service.py CannedRagService._load_rules_text   85% 13 2 0   83% 6 1   84%
src\genesis\services\rag_service.py CannedRagService.retrieve_write_rules   100% 1 0 0   100% 0 0   100%
src\genesis\services\rag_service.py CannedRagService.retrieve_design_rules   100% 1 0 0   100% 0 0   100%
src\genesis\services\rag_service.py (no function)   100% 10 0 2   100% 0 0   100%
src\genesis\state_machine.py SessionStateMachine.__init__   100% 4 0 0   100% 2 0   100%
src\genesis\state_machine.py SessionStateMachine.state   100% 1 0 0   100% 0 0   100%
src\genesis\state_machine.py SessionStateMachine.cancelled_from   100% 1 0 0   100% 0 0   100%
src\genesis\state_machine.py SessionStateMachine.transition   100% 7 0 0   100% 4 0   100%
src\genesis\state_machine.py SessionStateMachine.cancel   100% 5 0 0   100% 2 0   100%
src\genesis\state_machine.py SessionStateMachine.resume   100% 6 0 0   100% 2 0   100%
src\genesis\state_machine.py (no function)   100% 16 0 0   100% 0 0   100%
src\genesis\writer\__init__.py (no function)   100% 3 0 0   100% 0 0   100%
src\genesis\writer\context_builder.py build_contexts   100% 9 0 0   100% 2 0   100%
src\genesis\writer\context_builder.py (no function)   100% 6 0 0   100% 0 0   100%
src\genesis\writer\docx_injector.py DocxInjector.__init__   100% 1 0 0   100% 0 0   100%
src\genesis\writer\docx_injector.py DocxInjector.inject   100% 8 0 0   100% 2 0   100%
src\genesis\writer\docx_injector.py DocxInjector._heading_level   71% 7 2 0   100% 2 0   78%
src\genesis\writer\docx_injector.py DocxInjector._iter_body_items   100% 7 0 0   100% 6 0   100%
src\genesis\writer\docx_injector.py DocxInjector._dedupe_bare_subheadings   93% 30 2 0   91% 22 2   92%
src\genesis\writer\docx_injector.py DocxInjector._inject_sections   100% 9 0 0   100% 6 0   100%
src\genesis\writer\docx_injector.py DocxInjector._inject_inline   100% 4 0 0   100% 4 0   100%
src\genesis\writer\docx_injector.py DocxInjector._replace_paragraph_with_blocks   100% 6 0 0   100% 4 0   100%
src\genesis\writer\docx_injector.py DocxInjector._block_element   100% 18 0 0   100% 10 0   100%
src\genesis\writer\docx_injector.py DocxInjector._set_paragraph_text   100% 3 0 0   100% 2 0   100%
src\genesis\writer\docx_injector.py DocxInjector._has_residue   100% 4 0 0   100% 4 0   100%
src\genesis\writer\docx_injector.py DocxInjector._collect_residue   100% 5 0 0   100% 4 0   100%
src\genesis\writer\docx_injector.py (no function)   100% 30 0 0   100% 0 0   100%
src\genesis\writer\exceptions.py (no function)   100% 2 0 0   100% 0 0   100%
src\genesis\writer\language.py _in_range   100% 2 0 0   100% 0 0   100%
src\genesis\writer\language.py has_kana   100% 1 0 0   100% 0 0   100%
src\genesis\writer\language.py has_cjk   100% 1 0 0   100% 0 0   100%
src\genesis\writer\language.py detect_script   100% 7 0 0   100% 6 0   100%
src\genesis\writer\language.py resolve_expected_language   100% 9 0 0   100% 8 0   100%
src\genesis\writer\language.py find_language_violations   100% 18 0 0   100% 18 0   100%
src\genesis\writer\language.py (no function)   100% 13 0 0   100% 0 0   100%
src\genesis\writer\models.py ContentBlock.from_dict   100% 1 0 0   100% 0 0   100%
src\genesis\writer\models.py ChapterContent.from_llm   100% 4 0 0   100% 2 0   100%
src\genesis\writer\models.py GenerationContext._language_instruction   100% 5 0 0   100% 4 0   100%
src\genesis\writer\models.py GenerationContext.to_vars   100% 3 0 0   100% 0 0   100%
src\genesis\writer\models.py _render_table   100% 12 0 0   100% 4 0   100%
src\genesis\writer\models.py _format_chapter_data   100% 13 0 0   100% 6 0   100%
src\genesis\writer\models.py _format_impact   100% 24 0 0   100% 18 0   100%
src\genesis\writer\models.py _format_impact.keep   100% 1 0 0   100% 0 0   100%
src\genesis\writer\models.py (no function)   100% 54 0 0   100% 0 0   100%
src\genesis\writer\orchestrator.py _section_id_of   100% 3 0 0   100% 2 0   100%
src\genesis\writer\orchestrator.py _warn_unanchored   100% 3 0 0   100% 2 0   100%
src\genesis\writer\orchestrator.py WriteOrchestrator.generate   100% 39 0 0   94% 16 1   98%
src\genesis\writer\orchestrator.py (no function)   100% 20 0 0   100% 0 0   100%
src\genesis\writer\renderer.py render_chapter_blocks   100% 12 0 0   100% 10 0   100%
src\genesis\writer\renderer.py (no function)   100% 4 0 0   100% 0 0   100%
src\genesis\writer\template_mapper.py map_template   100% 21 0 0   83% 12 2   94%
src\genesis\writer\template_mapper.py (no function)   100% 6 0 0   100% 0 0   100%
src\genesis\writer\writer_agent.py WriterAgent.__init__   100% 5 0 0   100% 0 0   100%
src\genesis\writer\writer_agent.py WriterAgent._chunk_source   100% 5 0 0   100% 2 0   100%
src\genesis\writer\writer_agent.py WriterAgent._resolve_prompt   90% 10 1 0   75% 4 1   86%
src\genesis\writer\writer_agent.py WriterAgent._call_llm   100% 14 0 0   75% 8 2   91%
src\genesis\writer\writer_agent.py WriterAgent.generate_chapter   88% 24 3 0   100% 8 0   91%
src\genesis\writer\writer_agent.py (no function)   100% 17 0 0   100% 0 0   100%
src\genesis\writer\writer_state.py WriterState.__init__   100% 3 0 0   100% 0 0   100%
src\genesis\writer\writer_state.py WriterState.record_success   100% 2 0 0   100% 0 0   100%
src\genesis\writer\writer_state.py WriterState.record_eval   100% 1 0 0   100% 0 0   100%
src\genesis\writer\writer_state.py WriterState.needs_regeneration   100% 7 0 0   100% 6 0   100%
src\genesis\writer\writer_state.py (no function)   100% 8 0 0   100% 0 0   100%
Total     99% 2316 11 44   98% 642 14   99%

No items found using the specified filter.

10 empty functions skipped.