contextcompass 2.15.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- contextcompass-2.15.0.dist-info/METADATA +673 -0
- contextcompass-2.15.0.dist-info/RECORD +452 -0
- contextcompass-2.15.0.dist-info/WHEEL +4 -0
- contextcompass-2.15.0.dist-info/entry_points.txt +2 -0
- contextcompass-2.15.0.dist-info/licenses/LICENSE +21 -0
- contextcompass_cli/__init__.py +74 -0
- contextcompass_cli/__main__.py +195 -0
- contextcompass_cli/_package/AGENTS.MD +310 -0
- contextcompass_cli/_package/CONTEXT_COMPACTION.md +110 -0
- contextcompass_cli/_package/MANIFEST.md +485 -0
- contextcompass_cli/_package/PROFILE_CLASS_CREATION_GUIDE.md +426 -0
- contextcompass_cli/_package/README.md +266 -0
- contextcompass_cli/_package/SKILLS.MD +144 -0
- contextcompass_cli/_package/agent_onboarding/default/continuity_fact_checker/AGENTS.MD +54 -0
- contextcompass_cli/_package/agent_onboarding/default/continuity_fact_checker/README.md +43 -0
- contextcompass_cli/_package/agent_onboarding/default/continuity_fact_checker/SKILLS.MD +44 -0
- contextcompass_cli/_package/agent_onboarding/default/continuity_fact_checker/WORKFLOWS.MD +15 -0
- contextcompass_cli/_package/agent_onboarding/default/continuity_fact_checker/behavioral_guidelines/continuity_fact_checker_workflow.md +23 -0
- contextcompass_cli/_package/agent_onboarding/default/continuity_fact_checker/examples/continuity_fact_checker_task_flow.md +24 -0
- contextcompass_cli/_package/agent_onboarding/default/continuity_fact_checker/policies/continuity_fact_checker_handoff_policy.md +20 -0
- contextcompass_cli/_package/agent_onboarding/default/continuity_fact_checker/policies/continuity_fact_checker_quality_policy.md +22 -0
- contextcompass_cli/_package/agent_onboarding/default/continuity_fact_checker/skills/continuity_fact_checker.md +37 -0
- contextcompass_cli/_package/agent_onboarding/default/continuity_fact_checker/skills/continuity_fact_checker_advanced_context.md +17 -0
- contextcompass_cli/_package/agent_onboarding/default/continuity_fact_checker/skills/continuity_fact_checker_deliverables.md +26 -0
- contextcompass_cli/_package/agent_onboarding/default/continuity_fact_checker/skills/continuity_fact_checker_execution.md +23 -0
- contextcompass_cli/_package/agent_onboarding/default/continuity_fact_checker/workflows/README.md +8 -0
- contextcompass_cli/_package/agent_onboarding/default/design_engineer/AGENTS.MD +85 -0
- contextcompass_cli/_package/agent_onboarding/default/design_engineer/README.md +62 -0
- contextcompass_cli/_package/agent_onboarding/default/design_engineer/SKILLS.MD +74 -0
- contextcompass_cli/_package/agent_onboarding/default/design_engineer/WORKFLOWS.MD +15 -0
- contextcompass_cli/_package/agent_onboarding/default/design_engineer/behavioral_guidelines/design_engineer_workflow.md +25 -0
- contextcompass_cli/_package/agent_onboarding/default/design_engineer/behavioral_guidelines/design_validation_and_handoff.md +25 -0
- contextcompass_cli/_package/agent_onboarding/default/design_engineer/examples/adr_example.md +40 -0
- contextcompass_cli/_package/agent_onboarding/default/design_engineer/examples/design_task_flow.md +33 -0
- contextcompass_cli/_package/agent_onboarding/default/design_engineer/policies/decision_record_policy.md +23 -0
- contextcompass_cli/_package/agent_onboarding/default/design_engineer/policies/design_quality_policy.md +30 -0
- contextcompass_cli/_package/agent_onboarding/default/design_engineer/policies/design_review_policy.md +22 -0
- contextcompass_cli/_package/agent_onboarding/default/design_engineer/policies/system_document_quality_rubric.md +236 -0
- contextcompass_cli/_package/agent_onboarding/default/design_engineer/skills/adr_and_decision_hygiene.md +38 -0
- contextcompass_cli/_package/agent_onboarding/default/design_engineer/skills/api_and_interface_design.md +36 -0
- contextcompass_cli/_package/agent_onboarding/default/design_engineer/skills/architecture_contexts.md +40 -0
- contextcompass_cli/_package/agent_onboarding/default/design_engineer/skills/architecture_patch_contracts.md +43 -0
- contextcompass_cli/_package/agent_onboarding/default/design_engineer/skills/architecture_tradeoffs.md +33 -0
- contextcompass_cli/_package/agent_onboarding/default/design_engineer/skills/code_description_patch_contracts.md +46 -0
- contextcompass_cli/_package/agent_onboarding/default/design_engineer/skills/component_patch_contracts.md +41 -0
- contextcompass_cli/_package/agent_onboarding/default/design_engineer/skills/data_modeling.md +34 -0
- contextcompass_cli/_package/agent_onboarding/default/design_engineer/skills/decomposition_and_boundaries.md +42 -0
- contextcompass_cli/_package/agent_onboarding/default/design_engineer/skills/design_engineer_execution.md +65 -0
- contextcompass_cli/_package/agent_onboarding/default/design_engineer/skills/design_review_protocol.md +34 -0
- contextcompass_cli/_package/agent_onboarding/default/design_engineer/skills/nonfunctional_requirements.md +34 -0
- contextcompass_cli/_package/agent_onboarding/default/design_engineer/skills/patch_framework_design.md +79 -0
- contextcompass_cli/_package/agent_onboarding/default/design_engineer/skills/requirements_to_architecture.md +39 -0
- contextcompass_cli/_package/agent_onboarding/default/design_engineer/skills/src_architecture_instructions.md +347 -0
- contextcompass_cli/_package/agent_onboarding/default/design_engineer/skills/src_components_instructions.md +405 -0
- contextcompass_cli/_package/agent_onboarding/default/design_engineer/skills/system_design_method.md +45 -0
- contextcompass_cli/_package/agent_onboarding/default/design_engineer/skills/tests_architecture_instructions.md +375 -0
- contextcompass_cli/_package/agent_onboarding/default/design_engineer/skills/tests_components_instructions.md +406 -0
- contextcompass_cli/_package/agent_onboarding/default/design_engineer/workflows/README.md +8 -0
- contextcompass_cli/_package/agent_onboarding/default/developmental_editor/AGENTS.MD +53 -0
- contextcompass_cli/_package/agent_onboarding/default/developmental_editor/README.md +42 -0
- contextcompass_cli/_package/agent_onboarding/default/developmental_editor/SKILLS.MD +44 -0
- contextcompass_cli/_package/agent_onboarding/default/developmental_editor/WORKFLOWS.MD +15 -0
- contextcompass_cli/_package/agent_onboarding/default/developmental_editor/behavioral_guidelines/developmental_editor_workflow.md +23 -0
- contextcompass_cli/_package/agent_onboarding/default/developmental_editor/examples/developmental_editor_task_flow.md +23 -0
- contextcompass_cli/_package/agent_onboarding/default/developmental_editor/policies/developmental_editor_handoff_policy.md +20 -0
- contextcompass_cli/_package/agent_onboarding/default/developmental_editor/policies/developmental_editor_quality_policy.md +22 -0
- contextcompass_cli/_package/agent_onboarding/default/developmental_editor/skills/developmental_editor.md +36 -0
- contextcompass_cli/_package/agent_onboarding/default/developmental_editor/skills/developmental_editor_advanced_context.md +17 -0
- contextcompass_cli/_package/agent_onboarding/default/developmental_editor/skills/developmental_editor_deliverables.md +25 -0
- contextcompass_cli/_package/agent_onboarding/default/developmental_editor/skills/developmental_editor_execution.md +23 -0
- contextcompass_cli/_package/agent_onboarding/default/developmental_editor/workflows/README.md +8 -0
- contextcompass_cli/_package/agent_onboarding/default/draft_writer/AGENTS.MD +54 -0
- contextcompass_cli/_package/agent_onboarding/default/draft_writer/README.md +43 -0
- contextcompass_cli/_package/agent_onboarding/default/draft_writer/SKILLS.MD +44 -0
- contextcompass_cli/_package/agent_onboarding/default/draft_writer/WORKFLOWS.MD +15 -0
- contextcompass_cli/_package/agent_onboarding/default/draft_writer/behavioral_guidelines/draft_writer_workflow.md +23 -0
- contextcompass_cli/_package/agent_onboarding/default/draft_writer/examples/draft_writer_task_flow.md +24 -0
- contextcompass_cli/_package/agent_onboarding/default/draft_writer/policies/draft_writer_handoff_policy.md +20 -0
- contextcompass_cli/_package/agent_onboarding/default/draft_writer/policies/draft_writer_quality_policy.md +22 -0
- contextcompass_cli/_package/agent_onboarding/default/draft_writer/skills/draft_writer.md +37 -0
- contextcompass_cli/_package/agent_onboarding/default/draft_writer/skills/draft_writer_advanced_context.md +17 -0
- contextcompass_cli/_package/agent_onboarding/default/draft_writer/skills/draft_writer_deliverables.md +26 -0
- contextcompass_cli/_package/agent_onboarding/default/draft_writer/skills/draft_writer_execution.md +23 -0
- contextcompass_cli/_package/agent_onboarding/default/draft_writer/workflows/README.md +8 -0
- contextcompass_cli/_package/agent_onboarding/default/engineer/AGENTS.MD +493 -0
- contextcompass_cli/_package/agent_onboarding/default/engineer/README.md +53 -0
- contextcompass_cli/_package/agent_onboarding/default/engineer/SKILLS.MD +263 -0
- contextcompass_cli/_package/agent_onboarding/default/engineer/WORKFLOWS.MD +15 -0
- contextcompass_cli/_package/agent_onboarding/default/engineer/behavioral_guidelines/engineer_workflow.md +24 -0
- contextcompass_cli/_package/agent_onboarding/default/engineer/behavioral_guidelines/task_execution_and_validation.md +34 -0
- contextcompass_cli/_package/agent_onboarding/default/engineer/examples/artifact_workflow.md +104 -0
- contextcompass_cli/_package/agent_onboarding/default/engineer/examples/eng_task_flow.md +30 -0
- contextcompass_cli/_package/agent_onboarding/default/engineer/policies/ctx_autonomy_policy.md +34 -0
- contextcompass_cli/_package/agent_onboarding/default/engineer/policies/ctx_autonomy_rubric.md +161 -0
- contextcompass_cli/_package/agent_onboarding/default/engineer/policies/engineer_quality_policy.md +33 -0
- contextcompass_cli/_package/agent_onboarding/default/engineer/skills/context_protocol.md +70 -0
- contextcompass_cli/_package/agent_onboarding/default/engineer/skills/documentation_standards.md +120 -0
- contextcompass_cli/_package/agent_onboarding/default/engineer/skills/engineer_execution.md +62 -0
- contextcompass_cli/_package/agent_onboarding/default/engineer/skills/package_maintenance.md +195 -0
- contextcompass_cli/_package/agent_onboarding/default/engineer/skills/patch_artifact_consumption.md +68 -0
- contextcompass_cli/_package/agent_onboarding/default/engineer/skills/patch_framework_gating.md +72 -0
- contextcompass_cli/_package/agent_onboarding/default/engineer/skills/src_graph_generation.md +341 -0
- contextcompass_cli/_package/agent_onboarding/default/engineer/skills/src_graph_usage.md +161 -0
- contextcompass_cli/_package/agent_onboarding/default/engineer/skills/staleness_protocol.md +49 -0
- contextcompass_cli/_package/agent_onboarding/default/engineer/skills/system_document_build.md +360 -0
- contextcompass_cli/_package/agent_onboarding/default/engineer/skills/system_orientation.md +83 -0
- contextcompass_cli/_package/agent_onboarding/default/engineer/skills/technical_expertise.md +48 -0
- contextcompass_cli/_package/agent_onboarding/default/engineer/workflows/README.md +9 -0
- contextcompass_cli/_package/agent_onboarding/default/general/AGENTS.MD +283 -0
- contextcompass_cli/_package/agent_onboarding/default/general/README.md +38 -0
- contextcompass_cli/_package/agent_onboarding/default/general/SKILLS.MD +92 -0
- contextcompass_cli/_package/agent_onboarding/default/general/WORKFLOWS.MD +23 -0
- contextcompass_cli/_package/agent_onboarding/default/general/behavioral_guidelines/README.md +12 -0
- contextcompass_cli/_package/agent_onboarding/default/general/behavioral_guidelines/agent_lifecycle_and_heartbeat.md +37 -0
- contextcompass_cli/_package/agent_onboarding/default/general/behavioral_guidelines/onboarding_summary.md +41 -0
- contextcompass_cli/_package/agent_onboarding/default/general/behavioral_guidelines/work_intake_and_execution.md +44 -0
- contextcompass_cli/_package/agent_onboarding/default/general/policies/policy_skills.md +174 -0
- contextcompass_cli/_package/agent_onboarding/default/general/skills/active_documentation.md +86 -0
- contextcompass_cli/_package/agent_onboarding/default/general/skills/active_pointerboard.md +81 -0
- contextcompass_cli/_package/agent_onboarding/default/general/skills/agent_identity.md +38 -0
- contextcompass_cli/_package/agent_onboarding/default/general/skills/agent_lifecycle.md +21 -0
- contextcompass_cli/_package/agent_onboarding/default/general/skills/agent_stance.md +38 -0
- contextcompass_cli/_package/agent_onboarding/default/general/skills/career_selection.md +83 -0
- contextcompass_cli/_package/agent_onboarding/default/general/skills/compaction_requirements.md +147 -0
- contextcompass_cli/_package/agent_onboarding/default/general/skills/configuration_standards.md +72 -0
- contextcompass_cli/_package/agent_onboarding/default/general/skills/context_compaction.md +104 -0
- contextcompass_cli/_package/agent_onboarding/default/general/skills/context_gold.md +31 -0
- contextcompass_cli/_package/agent_onboarding/default/general/skills/context_management.md +79 -0
- contextcompass_cli/_package/agent_onboarding/default/general/skills/context_window_budget.md +64 -0
- contextcompass_cli/_package/agent_onboarding/default/general/skills/execution_contract.md +234 -0
- contextcompass_cli/_package/agent_onboarding/default/general/skills/general.md +22 -0
- contextcompass_cli/_package/agent_onboarding/default/general/skills/llm_full_usage.md +111 -0
- contextcompass_cli/_package/agent_onboarding/default/general/skills/mailbox_protocol.md +85 -0
- contextcompass_cli/_package/agent_onboarding/default/general/skills/memory_management.md +28 -0
- contextcompass_cli/_package/agent_onboarding/default/general/skills/mrp_policy.md +40 -0
- contextcompass_cli/_package/agent_onboarding/default/general/skills/package_upgrade.md +135 -0
- contextcompass_cli/_package/agent_onboarding/default/general/skills/reactive_documentation.md +105 -0
- contextcompass_cli/_package/agent_onboarding/default/general/skills/repo_topology.md +25 -0
- contextcompass_cli/_package/agent_onboarding/default/general/skills/role_local_workflows.md +41 -0
- contextcompass_cli/_package/agent_onboarding/default/general/skills/security_and_secrets.md +46 -0
- contextcompass_cli/_package/agent_onboarding/default/general/skills/self_certification.md +49 -0
- contextcompass_cli/_package/agent_onboarding/default/general/skills/ticket_closure_attention_sync.md +57 -0
- contextcompass_cli/_package/agent_onboarding/default/general/skills/ticket_microcycle.md +44 -0
- contextcompass_cli/_package/agent_onboarding/default/general/skills/ticketing.md +175 -0
- contextcompass_cli/_package/agent_onboarding/default/general/skills/ticketing_skill_contract.md +52 -0
- contextcompass_cli/_package/agent_onboarding/default/general/skills/unknowns_gate_reference.md +66 -0
- contextcompass_cli/_package/agent_onboarding/default/general/skills/user_approved_certification.md +32 -0
- contextcompass_cli/_package/agent_onboarding/default/general/skills/workflow.md +289 -0
- contextcompass_cli/_package/agent_onboarding/default/general/workflows/README.md +9 -0
- contextcompass_cli/_package/agent_onboarding/default/general/workflows/cleanup_context_compass.md +205 -0
- contextcompass_cli/_package/agent_onboarding/default/general/workflows/role_creation.md +39 -0
- contextcompass_cli/_package/agent_onboarding/default/general/workflows/start_context_compass_work.md +102 -0
- contextcompass_cli/_package/agent_onboarding/default/general/workflows/sync_attention_board.md +91 -0
- contextcompass_cli/_package/agent_onboarding/default/general/workflows/turn_in_selected_tickets.md +95 -0
- contextcompass_cli/_package/agent_onboarding/default/general/workflows/workflow_creation.md +38 -0
- contextcompass_cli/_package/agent_onboarding/default/line_copy_editor/AGENTS.MD +53 -0
- contextcompass_cli/_package/agent_onboarding/default/line_copy_editor/README.md +42 -0
- contextcompass_cli/_package/agent_onboarding/default/line_copy_editor/SKILLS.MD +44 -0
- contextcompass_cli/_package/agent_onboarding/default/line_copy_editor/WORKFLOWS.MD +15 -0
- contextcompass_cli/_package/agent_onboarding/default/line_copy_editor/behavioral_guidelines/line_copy_editor_workflow.md +23 -0
- contextcompass_cli/_package/agent_onboarding/default/line_copy_editor/examples/line_copy_editor_task_flow.md +23 -0
- contextcompass_cli/_package/agent_onboarding/default/line_copy_editor/policies/line_copy_editor_handoff_policy.md +20 -0
- contextcompass_cli/_package/agent_onboarding/default/line_copy_editor/policies/line_copy_editor_quality_policy.md +22 -0
- contextcompass_cli/_package/agent_onboarding/default/line_copy_editor/skills/line_copy_editor.md +36 -0
- contextcompass_cli/_package/agent_onboarding/default/line_copy_editor/skills/line_copy_editor_advanced_context.md +17 -0
- contextcompass_cli/_package/agent_onboarding/default/line_copy_editor/skills/line_copy_editor_deliverables.md +25 -0
- contextcompass_cli/_package/agent_onboarding/default/line_copy_editor/skills/line_copy_editor_execution.md +23 -0
- contextcompass_cli/_package/agent_onboarding/default/line_copy_editor/workflows/README.md +8 -0
- contextcompass_cli/_package/agent_onboarding/default/new/AGENTS.MD +79 -0
- contextcompass_cli/_package/agent_onboarding/default/new/README.md +54 -0
- contextcompass_cli/_package/agent_onboarding/default/new/SKILLS.MD +35 -0
- contextcompass_cli/_package/agent_onboarding/default/new/WORKFLOWS.MD +15 -0
- contextcompass_cli/_package/agent_onboarding/default/new/behavioral_guidelines/user_onboarding_flow.md +52 -0
- contextcompass_cli/_package/agent_onboarding/default/new/policies/new_onboarding_policy.md +59 -0
- contextcompass_cli/_package/agent_onboarding/default/new/skills/configuration_map_guide.md +83 -0
- contextcompass_cli/_package/agent_onboarding/default/new/skills/first_time_profile_setup.md +60 -0
- contextcompass_cli/_package/agent_onboarding/default/new/skills/new.md +54 -0
- contextcompass_cli/_package/agent_onboarding/default/new/skills/onboarding_completion_and_next_step.md +54 -0
- contextcompass_cli/_package/agent_onboarding/default/new/skills/profile_model_explained.md +120 -0
- contextcompass_cli/_package/agent_onboarding/default/new/skills/system_overview_for_user.md +51 -0
- contextcompass_cli/_package/agent_onboarding/default/new/workflows/README.md +8 -0
- contextcompass_cli/_package/agent_onboarding/default/platform_engineer/AGENTS.MD +63 -0
- contextcompass_cli/_package/agent_onboarding/default/platform_engineer/README.md +41 -0
- contextcompass_cli/_package/agent_onboarding/default/platform_engineer/SKILLS.MD +62 -0
- contextcompass_cli/_package/agent_onboarding/default/platform_engineer/WORKFLOWS.MD +15 -0
- contextcompass_cli/_package/agent_onboarding/default/platform_engineer/behavioral_guidelines/incident_workflow.md +17 -0
- contextcompass_cli/_package/agent_onboarding/default/platform_engineer/behavioral_guidelines/platform_engineer_workflow.md +18 -0
- contextcompass_cli/_package/agent_onboarding/default/platform_engineer/examples/platform_task_flow.md +22 -0
- contextcompass_cli/_package/agent_onboarding/default/platform_engineer/policies/operational_safety_policy.md +20 -0
- contextcompass_cli/_package/agent_onboarding/default/platform_engineer/policies/platform_quality_policy.md +22 -0
- contextcompass_cli/_package/agent_onboarding/default/platform_engineer/policies/production_change_management_policy.md +18 -0
- contextcompass_cli/_package/agent_onboarding/default/platform_engineer/skills/ci_cd_and_release.md +28 -0
- contextcompass_cli/_package/agent_onboarding/default/platform_engineer/skills/deployment_and_environments.md +25 -0
- contextcompass_cli/_package/agent_onboarding/default/platform_engineer/skills/incident_response_and_runbooks.md +35 -0
- contextcompass_cli/_package/agent_onboarding/default/platform_engineer/skills/infrastructure_as_code.md +24 -0
- contextcompass_cli/_package/agent_onboarding/default/platform_engineer/skills/observability_and_monitoring.md +28 -0
- contextcompass_cli/_package/agent_onboarding/default/platform_engineer/skills/performance_capacity_cost.md +20 -0
- contextcompass_cli/_package/agent_onboarding/default/platform_engineer/skills/platform_engineer_execution.md +41 -0
- contextcompass_cli/_package/agent_onboarding/default/platform_engineer/skills/platform_security_basics.md +25 -0
- contextcompass_cli/_package/agent_onboarding/default/platform_engineer/workflows/README.md +8 -0
- contextcompass_cli/_package/agent_onboarding/default/proofreader/AGENTS.MD +53 -0
- contextcompass_cli/_package/agent_onboarding/default/proofreader/README.md +42 -0
- contextcompass_cli/_package/agent_onboarding/default/proofreader/SKILLS.MD +44 -0
- contextcompass_cli/_package/agent_onboarding/default/proofreader/WORKFLOWS.MD +15 -0
- contextcompass_cli/_package/agent_onboarding/default/proofreader/behavioral_guidelines/proofreader_workflow.md +23 -0
- contextcompass_cli/_package/agent_onboarding/default/proofreader/examples/proofreader_task_flow.md +23 -0
- contextcompass_cli/_package/agent_onboarding/default/proofreader/policies/proofreader_handoff_policy.md +20 -0
- contextcompass_cli/_package/agent_onboarding/default/proofreader/policies/proofreader_quality_policy.md +22 -0
- contextcompass_cli/_package/agent_onboarding/default/proofreader/skills/proofreader.md +36 -0
- contextcompass_cli/_package/agent_onboarding/default/proofreader/skills/proofreader_advanced_context.md +17 -0
- contextcompass_cli/_package/agent_onboarding/default/proofreader/skills/proofreader_deliverables.md +25 -0
- contextcompass_cli/_package/agent_onboarding/default/proofreader/skills/proofreader_execution.md +23 -0
- contextcompass_cli/_package/agent_onboarding/default/proofreader/workflows/README.md +8 -0
- contextcompass_cli/_package/agent_onboarding/default/qa_engineer/AGENTS.MD +58 -0
- contextcompass_cli/_package/agent_onboarding/default/qa_engineer/README.md +41 -0
- contextcompass_cli/_package/agent_onboarding/default/qa_engineer/SKILLS.MD +61 -0
- contextcompass_cli/_package/agent_onboarding/default/qa_engineer/WORKFLOWS.MD +15 -0
- contextcompass_cli/_package/agent_onboarding/default/qa_engineer/behavioral_guidelines/qa_workflow.md +18 -0
- contextcompass_cli/_package/agent_onboarding/default/qa_engineer/behavioral_guidelines/release_signoff_workflow.md +17 -0
- contextcompass_cli/_package/agent_onboarding/default/qa_engineer/examples/qa_task_flow.md +24 -0
- contextcompass_cli/_package/agent_onboarding/default/qa_engineer/policies/defect_severity_policy.md +24 -0
- contextcompass_cli/_package/agent_onboarding/default/qa_engineer/policies/quality_gate_policy.md +18 -0
- contextcompass_cli/_package/agent_onboarding/default/qa_engineer/policies/test_evidence_policy.md +18 -0
- contextcompass_cli/_package/agent_onboarding/default/qa_engineer/skills/bug_triage_and_repro.md +23 -0
- contextcompass_cli/_package/agent_onboarding/default/qa_engineer/skills/qa_engineer_execution.md +29 -0
- contextcompass_cli/_package/agent_onboarding/default/qa_engineer/skills/quality_metrics.md +24 -0
- contextcompass_cli/_package/agent_onboarding/default/qa_engineer/skills/regression_and_release_quality.md +28 -0
- contextcompass_cli/_package/agent_onboarding/default/qa_engineer/skills/test_automation_practices.md +30 -0
- contextcompass_cli/_package/agent_onboarding/default/qa_engineer/skills/test_case_design.md +27 -0
- contextcompass_cli/_package/agent_onboarding/default/qa_engineer/skills/test_data_and_environments.md +20 -0
- contextcompass_cli/_package/agent_onboarding/default/qa_engineer/skills/test_strategy_and_planning.md +31 -0
- contextcompass_cli/_package/agent_onboarding/default/qa_engineer/workflows/README.md +8 -0
- contextcompass_cli/_package/agent_onboarding/default/researcher/AGENTS.MD +55 -0
- contextcompass_cli/_package/agent_onboarding/default/researcher/README.md +44 -0
- contextcompass_cli/_package/agent_onboarding/default/researcher/SKILLS.MD +44 -0
- contextcompass_cli/_package/agent_onboarding/default/researcher/WORKFLOWS.MD +15 -0
- contextcompass_cli/_package/agent_onboarding/default/researcher/behavioral_guidelines/researcher_workflow.md +23 -0
- contextcompass_cli/_package/agent_onboarding/default/researcher/examples/researcher_task_flow.md +25 -0
- contextcompass_cli/_package/agent_onboarding/default/researcher/policies/researcher_handoff_policy.md +20 -0
- contextcompass_cli/_package/agent_onboarding/default/researcher/policies/researcher_quality_policy.md +22 -0
- contextcompass_cli/_package/agent_onboarding/default/researcher/skills/researcher.md +38 -0
- contextcompass_cli/_package/agent_onboarding/default/researcher/skills/researcher_advanced_context.md +17 -0
- contextcompass_cli/_package/agent_onboarding/default/researcher/skills/researcher_deliverables.md +27 -0
- contextcompass_cli/_package/agent_onboarding/default/researcher/skills/researcher_execution.md +23 -0
- contextcompass_cli/_package/agent_onboarding/default/researcher/workflows/README.md +8 -0
- contextcompass_cli/_package/agent_onboarding/default/security_engineer/AGENTS.MD +55 -0
- contextcompass_cli/_package/agent_onboarding/default/security_engineer/README.md +43 -0
- contextcompass_cli/_package/agent_onboarding/default/security_engineer/SKILLS.MD +62 -0
- contextcompass_cli/_package/agent_onboarding/default/security_engineer/WORKFLOWS.MD +15 -0
- contextcompass_cli/_package/agent_onboarding/default/security_engineer/behavioral_guidelines/security_signoff_and_escalation.md +22 -0
- contextcompass_cli/_package/agent_onboarding/default/security_engineer/behavioral_guidelines/security_workflow.md +18 -0
- contextcompass_cli/_package/agent_onboarding/default/security_engineer/examples/security_review_flow.md +22 -0
- contextcompass_cli/_package/agent_onboarding/default/security_engineer/policies/risk_acceptance_policy.md +17 -0
- contextcompass_cli/_package/agent_onboarding/default/security_engineer/policies/secrets_and_keys_policy.md +19 -0
- contextcompass_cli/_package/agent_onboarding/default/security_engineer/policies/security_review_policy.md +22 -0
- contextcompass_cli/_package/agent_onboarding/default/security_engineer/skills/authn_authz_basics.md +24 -0
- contextcompass_cli/_package/agent_onboarding/default/security_engineer/skills/dependency_and_supply_chain.md +20 -0
- contextcompass_cli/_package/agent_onboarding/default/security_engineer/skills/incident_response_security.md +22 -0
- contextcompass_cli/_package/agent_onboarding/default/security_engineer/skills/logging_audit_privacy.md +16 -0
- contextcompass_cli/_package/agent_onboarding/default/security_engineer/skills/secure_architecture_review.md +20 -0
- contextcompass_cli/_package/agent_onboarding/default/security_engineer/skills/secure_coding_review.md +22 -0
- contextcompass_cli/_package/agent_onboarding/default/security_engineer/skills/security_engineer_execution.md +28 -0
- contextcompass_cli/_package/agent_onboarding/default/security_engineer/skills/threat_modeling.md +25 -0
- contextcompass_cli/_package/agent_onboarding/default/security_engineer/skills/vulnerability_management.md +22 -0
- contextcompass_cli/_package/agent_onboarding/default/security_engineer/workflows/README.md +8 -0
- contextcompass_cli/_package/agent_onboarding/default/story_designer/AGENTS.MD +56 -0
- contextcompass_cli/_package/agent_onboarding/default/story_designer/README.md +45 -0
- contextcompass_cli/_package/agent_onboarding/default/story_designer/SKILLS.MD +44 -0
- contextcompass_cli/_package/agent_onboarding/default/story_designer/WORKFLOWS.MD +15 -0
- contextcompass_cli/_package/agent_onboarding/default/story_designer/behavioral_guidelines/story_designer_workflow.md +23 -0
- contextcompass_cli/_package/agent_onboarding/default/story_designer/examples/story_designer_task_flow.md +26 -0
- contextcompass_cli/_package/agent_onboarding/default/story_designer/policies/story_designer_handoff_policy.md +20 -0
- contextcompass_cli/_package/agent_onboarding/default/story_designer/policies/story_designer_quality_policy.md +22 -0
- contextcompass_cli/_package/agent_onboarding/default/story_designer/skills/story_designer.md +39 -0
- contextcompass_cli/_package/agent_onboarding/default/story_designer/skills/story_designer_advanced_context.md +17 -0
- contextcompass_cli/_package/agent_onboarding/default/story_designer/skills/story_designer_deliverables.md +28 -0
- contextcompass_cli/_package/agent_onboarding/default/story_designer/skills/story_designer_execution.md +23 -0
- contextcompass_cli/_package/agent_onboarding/default/story_designer/workflows/README.md +8 -0
- contextcompass_cli/_package/agent_onboarding/default/story_novel_artist/AGENTS.MD +56 -0
- contextcompass_cli/_package/agent_onboarding/default/story_novel_artist/README.md +45 -0
- contextcompass_cli/_package/agent_onboarding/default/story_novel_artist/SKILLS.MD +44 -0
- contextcompass_cli/_package/agent_onboarding/default/story_novel_artist/WORKFLOWS.MD +15 -0
- contextcompass_cli/_package/agent_onboarding/default/story_novel_artist/behavioral_guidelines/story_novel_artist_workflow.md +23 -0
- contextcompass_cli/_package/agent_onboarding/default/story_novel_artist/examples/story_novel_artist_task_flow.md +26 -0
- contextcompass_cli/_package/agent_onboarding/default/story_novel_artist/policies/story_novel_artist_handoff_policy.md +20 -0
- contextcompass_cli/_package/agent_onboarding/default/story_novel_artist/policies/story_novel_artist_quality_policy.md +22 -0
- contextcompass_cli/_package/agent_onboarding/default/story_novel_artist/skills/story_novel_artist.md +39 -0
- contextcompass_cli/_package/agent_onboarding/default/story_novel_artist/skills/story_novel_artist_advanced_context.md +17 -0
- contextcompass_cli/_package/agent_onboarding/default/story_novel_artist/skills/story_novel_artist_deliverables.md +28 -0
- contextcompass_cli/_package/agent_onboarding/default/story_novel_artist/skills/story_novel_artist_execution.md +23 -0
- contextcompass_cli/_package/agent_onboarding/default/story_novel_artist/workflows/README.md +8 -0
- contextcompass_cli/_package/agent_onboarding/user_defined/data_engineer/AGENTS.MD +66 -0
- contextcompass_cli/_package/agent_onboarding/user_defined/data_engineer/SKILLS.MD +15 -0
- contextcompass_cli/_package/agent_onboarding/user_defined/data_engineer/WORKFLOWS.MD +15 -0
- contextcompass_cli/_package/agent_onboarding/user_defined/data_engineer/behavioral_guidelines/data_engineer_behavior_overrides.md +6 -0
- contextcompass_cli/_package/agent_onboarding/user_defined/data_engineer/policies/data_engineer_policy_overrides.md +6 -0
- contextcompass_cli/_package/agent_onboarding/user_defined/data_engineer/profile_overrides.md +9 -0
- contextcompass_cli/_package/agent_onboarding/user_defined/data_engineer/skills/data_engineer_skill_overrides.md +6 -0
- contextcompass_cli/_package/agent_onboarding/user_defined/data_engineer/workflows/README.md +8 -0
- contextcompass_cli/_package/agent_onboarding/user_defined/synaptic_finishing_developer/AGENTS.MD +145 -0
- contextcompass_cli/_package/agent_onboarding/user_defined/synaptic_finishing_developer/SKILLS.MD +37 -0
- contextcompass_cli/_package/agent_onboarding/user_defined/synaptic_finishing_developer/WORKFLOWS.MD +17 -0
- contextcompass_cli/_package/agent_onboarding/user_defined/synaptic_finishing_developer/behavioral_guidelines/synaptic_finishing_developer_behavior_overrides.md +12 -0
- contextcompass_cli/_package/agent_onboarding/user_defined/synaptic_finishing_developer/examples/python/comment_finishing_examples.py +65 -0
- contextcompass_cli/_package/agent_onboarding/user_defined/synaptic_finishing_developer/examples/python/docstring_finishing_examples.py +126 -0
- contextcompass_cli/_package/agent_onboarding/user_defined/synaptic_finishing_developer/examples/python/pytest_component_finishing_examples.py +51 -0
- contextcompass_cli/_package/agent_onboarding/user_defined/synaptic_finishing_developer/examples/python/pytest_integration_finishing_examples.py +59 -0
- contextcompass_cli/_package/agent_onboarding/user_defined/synaptic_finishing_developer/examples/python/pytest_unit_finishing_examples.py +66 -0
- contextcompass_cli/_package/agent_onboarding/user_defined/synaptic_finishing_developer/policies/synaptic_finishing_developer_policy_overrides.md +14 -0
- contextcompass_cli/_package/agent_onboarding/user_defined/synaptic_finishing_developer/profile_overrides.md +17 -0
- contextcompass_cli/_package/agent_onboarding/user_defined/synaptic_finishing_developer/skills/documentation/comment_craft.md +51 -0
- contextcompass_cli/_package/agent_onboarding/user_defined/synaptic_finishing_developer/skills/documentation/docstring_craft.md +86 -0
- contextcompass_cli/_package/agent_onboarding/user_defined/synaptic_finishing_developer/skills/documentation/docstring_test_alignment.md +51 -0
- contextcompass_cli/_package/agent_onboarding/user_defined/synaptic_finishing_developer/skills/documentation/system_aware_docstrings.md +64 -0
- contextcompass_cli/_package/agent_onboarding/user_defined/synaptic_finishing_developer/skills/synaptic_finishing_developer_skill_overrides.md +11 -0
- contextcompass_cli/_package/agent_onboarding/user_defined/synaptic_finishing_developer/skills/testing/component_tests.md +45 -0
- contextcompass_cli/_package/agent_onboarding/user_defined/synaptic_finishing_developer/skills/testing/evidence_reporting.md +25 -0
- contextcompass_cli/_package/agent_onboarding/user_defined/synaptic_finishing_developer/skills/testing/mocking.md +35 -0
- contextcompass_cli/_package/agent_onboarding/user_defined/synaptic_finishing_developer/skills/testing/pytest_integration.md +32 -0
- contextcompass_cli/_package/agent_onboarding/user_defined/synaptic_finishing_developer/skills/testing/pytest_unit.md +49 -0
- contextcompass_cli/_package/agent_onboarding/user_defined/synaptic_finishing_developer/skills/testing/regression_tests.md +24 -0
- contextcompass_cli/_package/agent_onboarding/user_defined/synaptic_finishing_developer/skills/testing/testing_overview.md +71 -0
- contextcompass_cli/_package/agent_onboarding/user_defined/synaptic_finishing_developer/workflows/README.md +8 -0
- contextcompass_cli/_package/agent_onboarding/user_defined/synaptic_finishing_developer/workflows/optimize_pytests_for_repo.md +272 -0
- contextcompass_cli/_package/agent_onboarding/user_defined/synaptic_finishing_developer/workflows/polish_repo_documentation.md +247 -0
- contextcompass_cli/_package/agent_onboarding/user_defined/synaptic_python_developer/AGENTS.MD +386 -0
- contextcompass_cli/_package/agent_onboarding/user_defined/synaptic_python_developer/README.md +31 -0
- contextcompass_cli/_package/agent_onboarding/user_defined/synaptic_python_developer/SKILLS.MD +44 -0
- contextcompass_cli/_package/agent_onboarding/user_defined/synaptic_python_developer/WORKFLOWS.MD +16 -0
- contextcompass_cli/_package/agent_onboarding/user_defined/synaptic_python_developer/behavioral_guidelines/synaptic_behavior_overrides.md +17 -0
- contextcompass_cli/_package/agent_onboarding/user_defined/synaptic_python_developer/examples/python/anti_patterns.py +19 -0
- contextcompass_cli/_package/agent_onboarding/user_defined/synaptic_python_developer/examples/python/cleanup_patterns.py +22 -0
- contextcompass_cli/_package/agent_onboarding/user_defined/synaptic_python_developer/examples/python/docstrings.py +19 -0
- contextcompass_cli/_package/agent_onboarding/user_defined/synaptic_python_developer/examples/python/logging_patterns.py +11 -0
- contextcompass_cli/_package/agent_onboarding/user_defined/synaptic_python_developer/examples/python/protocols_and_abc.py +15 -0
- contextcompass_cli/_package/agent_onboarding/user_defined/synaptic_python_developer/examples/python/pytest_component_examples.py +15 -0
- contextcompass_cli/_package/agent_onboarding/user_defined/synaptic_python_developer/examples/python/pytest_integration_examples.py +17 -0
- contextcompass_cli/_package/agent_onboarding/user_defined/synaptic_python_developer/examples/python/pytest_unit_examples.py +13 -0
- contextcompass_cli/_package/agent_onboarding/user_defined/synaptic_python_developer/policies/synaptic_policy_overrides.md +22 -0
- contextcompass_cli/_package/agent_onboarding/user_defined/synaptic_python_developer/profile_overrides.md +27 -0
- contextcompass_cli/_package/agent_onboarding/user_defined/synaptic_python_developer/skills/python/attribute_aliasing_skill_benchmark.py +35 -0
- contextcompass_cli/_package/agent_onboarding/user_defined/synaptic_python_developer/skills/python/banned_patterns.md +110 -0
- contextcompass_cli/_package/agent_onboarding/user_defined/synaptic_python_developer/skills/python/cleanup_and_disposal.md +79 -0
- contextcompass_cli/_package/agent_onboarding/user_defined/synaptic_python_developer/skills/python/comments.md +39 -0
- contextcompass_cli/_package/agent_onboarding/user_defined/synaptic_python_developer/skills/python/docstrings.md +90 -0
- contextcompass_cli/_package/agent_onboarding/user_defined/synaptic_python_developer/skills/python/error_model.md +28 -0
- contextcompass_cli/_package/agent_onboarding/user_defined/synaptic_python_developer/skills/python/hot_path_attribute_aliasing.md +52 -0
- contextcompass_cli/_package/agent_onboarding/user_defined/synaptic_python_developer/skills/python/init_and_ownership.md +35 -0
- contextcompass_cli/_package/agent_onboarding/user_defined/synaptic_python_developer/skills/python/interfaces.md +47 -0
- contextcompass_cli/_package/agent_onboarding/user_defined/synaptic_python_developer/skills/python/logging.md +37 -0
- contextcompass_cli/_package/agent_onboarding/user_defined/synaptic_python_developer/skills/python/module_scope.md +38 -0
- contextcompass_cli/_package/agent_onboarding/user_defined/synaptic_python_developer/skills/python/refactor_limits.md +44 -0
- contextcompass_cli/_package/agent_onboarding/user_defined/synaptic_python_developer/skills/python/typing.md +52 -0
- contextcompass_cli/_package/agent_onboarding/user_defined/synaptic_python_developer/skills/synaptic_skill_overrides.md +24 -0
- contextcompass_cli/_package/agent_onboarding/user_defined/synaptic_python_developer/skills/testing/evidence_reporting.md +35 -0
- contextcompass_cli/_package/agent_onboarding/user_defined/synaptic_python_developer/skills/testing/mocking.md +31 -0
- contextcompass_cli/_package/agent_onboarding/user_defined/synaptic_python_developer/skills/testing/pytest_integration.md +36 -0
- contextcompass_cli/_package/agent_onboarding/user_defined/synaptic_python_developer/skills/testing/pytest_unit.md +42 -0
- contextcompass_cli/_package/agent_onboarding/user_defined/synaptic_python_developer/skills/testing/regression_tests.md +26 -0
- contextcompass_cli/_package/agent_onboarding/user_defined/synaptic_python_developer/skills/testing/testing_overview.md +196 -0
- contextcompass_cli/_package/agent_onboarding/user_defined/synaptic_python_developer/workflows/README.md +8 -0
- contextcompass_cli/_package/agent_onboarding/user_defined/synaptic_python_developer/workflows/synaptic_python_developer_onboarding.md +226 -0
- contextcompass_cli/_package/artifact_board.md +64 -0
- contextcompass_cli/_package/artifacts/IMPORTANT_CONSIDERATION.md +43 -0
- contextcompass_cli/_package/artifacts/README.md +41 -0
- contextcompass_cli/_package/attention_board.md +79 -0
- contextcompass_cli/_package/config/context_compass_config.yaml +101 -0
- contextcompass_cli/_package/context_management/README.md +21 -0
- contextcompass_cli/_package/context_management/artifacts/.gitkeep +1 -0
- contextcompass_cli/_package/context_management/context_artifact_template.md +42 -0
- contextcompass_cli/_package/context_management/context_board.md +27 -0
- contextcompass_cli/_package/examples/adr_example.md +29 -0
- contextcompass_cli/_package/examples/artifact_workflow.md +20 -0
- contextcompass_cli/_package/examples/continuity_fact_checker_task_flow.md +23 -0
- contextcompass_cli/_package/examples/design_task_flow.md +35 -0
- contextcompass_cli/_package/examples/developmental_editor_task_flow.md +22 -0
- contextcompass_cli/_package/examples/draft_writer_task_flow.md +23 -0
- contextcompass_cli/_package/examples/eng_task_flow.md +31 -0
- contextcompass_cli/_package/examples/example_architecture/.gitkeep +0 -0
- contextcompass_cli/_package/examples/example_architecture/src_architecture.md +136 -0
- contextcompass_cli/_package/examples/example_architecture/src_architecture_index.md +46 -0
- contextcompass_cli/_package/examples/example_architecture/tests_architecture.md +148 -0
- contextcompass_cli/_package/examples/example_architecture/tests_architecture_index.md +46 -0
- contextcompass_cli/_package/examples/example_completed/.gitkeep +0 -0
- contextcompass_cli/_package/examples/example_completed/2026-02-19_context_compass_release_overview_artifact.md +33 -0
- contextcompass_cli/_package/examples/example_components/.gitkeep +0 -0
- contextcompass_cli/_package/examples/example_components/src_components.md +169 -0
- contextcompass_cli/_package/examples/example_components/src_components_index.md +44 -0
- contextcompass_cli/_package/examples/example_components/tests_components.md +96 -0
- contextcompass_cli/_package/examples/example_components/tests_components_index.md +42 -0
- contextcompass_cli/_package/examples/example_epics/.gitkeep +0 -0
- contextcompass_cli/_package/examples/example_epics/2026-02-19_context_compass_release_readiness_example_pack_epic.md +130 -0
- contextcompass_cli/_package/examples/example_graph_details/README.md +131 -0
- contextcompass_cli/_package/examples/example_graph_details/src/example/__init__.py +4 -0
- contextcompass_cli/_package/examples/example_graph_details/src/example/core/interfaces.py +10 -0
- contextcompass_cli/_package/examples/example_graph_details/src/example/core/resource.py +15 -0
- contextcompass_cli/_package/examples/example_graph_details/src/example/pipeline/pipeline.py +20 -0
- contextcompass_cli/_package/examples/example_graph_details/src/example/pipeline/stage.py +11 -0
- contextcompass_cli/_package/examples/example_graph_details/src/example/storage/store.py +20 -0
- contextcompass_cli/_package/examples/example_graph_details/src_graph.md +192 -0
- contextcompass_cli/_package/examples/example_graph_details/src_graph_index.md +32 -0
- contextcompass_cli/_package/examples/example_stories/.gitkeep +0 -0
- contextcompass_cli/_package/examples/example_stories/2026-02-19_context_compass_release_readiness_examples_story.md +120 -0
- contextcompass_cli/_package/examples/example_tasks/.gitkeep +0 -0
- contextcompass_cli/_package/examples/example_tasks/2026-02-19_context_compass_release_readiness_pack_task.md +147 -0
- contextcompass_cli/_package/examples/line_copy_editor_task_flow.md +23 -0
- contextcompass_cli/_package/examples/platform_task_flow.md +26 -0
- contextcompass_cli/_package/examples/proofreader_task_flow.md +23 -0
- contextcompass_cli/_package/examples/qa_task_flow.md +26 -0
- contextcompass_cli/_package/examples/repo_overview.md +63 -0
- contextcompass_cli/_package/examples/researcher_task_flow.md +23 -0
- contextcompass_cli/_package/examples/security_review_flow.md +24 -0
- contextcompass_cli/_package/examples/story_designer_task_flow.md +23 -0
- contextcompass_cli/_package/examples/story_novel_artist_task_flow.md +22 -0
- contextcompass_cli/_package/mailbox_board.md +79 -0
- contextcompass_cli/_package/special_instructions/README.md +16 -0
- contextcompass_cli/_package/system_docs/.gitkeep +0 -0
- contextcompass_cli/_package/system_docs/patches/active/README.md +25 -0
- contextcompass_cli/_package/system_docs/patches/active/_template_patch_id/architecture_patch.md +53 -0
- contextcompass_cli/_package/system_docs/patches/active/_template_patch_id/code_description_patch_TEMPLATE_COMPONENT.md +39 -0
- contextcompass_cli/_package/system_docs/patches/active/_template_patch_id/component_patch_TEMPLATE_COMPONENT.md +48 -0
- contextcompass_cli/_package/system_docs/system_docs_read_first.md +107 -0
- contextcompass_cli/_package/templates/epic_template.md +149 -0
- contextcompass_cli/_package/templates/story_template.md +131 -0
- contextcompass_cli/_package/templates/task_template.md +124 -0
- contextcompass_cli/_package/templates/workflow_advanced_template.md +111 -0
- contextcompass_cli/_package/templates/workflow_simple_template.md +65 -0
- contextcompass_cli/_package/tickets/README.md +24 -0
- contextcompass_cli/_package/tickets/epics/README.md +68 -0
- contextcompass_cli/_package/tickets/epics/archive/.gitkeep +0 -0
- contextcompass_cli/_package/tickets/epics/backlog/.gitkeep +0 -0
- contextcompass_cli/_package/tickets/epics/completed/.gitkeep +0 -0
- contextcompass_cli/_package/tickets/stories/README.md +68 -0
- contextcompass_cli/_package/tickets/stories/archive/.gitkeep +0 -0
- contextcompass_cli/_package/tickets/stories/backlog/.gitkeep +0 -0
- contextcompass_cli/_package/tickets/stories/completed/.gitkeep +0 -0
- contextcompass_cli/_package/tickets/tasks/README.md +67 -0
- contextcompass_cli/_package/tickets/tasks/archive/.gitkeep +0 -0
- contextcompass_cli/_package/tickets/tasks/backlog/.gitkeep +0 -0
- contextcompass_cli/_package/tickets/tasks/completed/.gitkeep +0 -0
- contextcompass_cli/_package/tools/build_llm_full.py +307 -0
- contextcompass_cli/_package/tools/cleanup_context_compass.py +488 -0
- contextcompass_cli/_package/tools/migrate_boards.py +218 -0
- contextcompass_cli/_package/tools/package_manifest.py +351 -0
- contextcompass_cli/_package/tools/system_documents/index_document.py +476 -0
- contextcompass_cli/_package/tools/system_documents/python/assemble_graph.py +387 -0
- contextcompass_cli/_package/tools/system_documents/python/extract_graph.py +626 -0
- contextcompass_cli/_package/tools/system_documents/python/graph_semantics_tickets.py +405 -0
- contextcompass_cli/_package/tools/system_documents/python/graph_walker.py +375 -0
- contextcompass_cli/_package/tools/system_documents/python/migrate_authored_graph.py +179 -0
- contextcompass_cli/_package/tools/update_context_compass.py +511 -0
- contextcompass_cli/_package/user_defined/README.md +49 -0
|
@@ -0,0 +1,476 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Build a line-range index over an authored Markdown document.
|
|
3
|
+
|
|
4
|
+
For `src_components.md`, `src_architecture.md`, and any other large authored
|
|
5
|
+
system document. It reads the document and writes `<stem>_index.md` beside it.
|
|
6
|
+
|
|
7
|
+
**It never modifies the document.** The document is authored prose and stays
|
|
8
|
+
that way - there is no build step, no shards, and nothing is generated except
|
|
9
|
+
the index. That is the whole point: a component's responsibilities cannot be
|
|
10
|
+
derived from anything, so the document must remain the thing a human or agent
|
|
11
|
+
writes directly. This tool only makes it sliceable.
|
|
12
|
+
|
|
13
|
+
Contrast with the source graph, which IS derived from code and therefore does
|
|
14
|
+
have a generation pipeline under `tools/system_documents/python/`.
|
|
15
|
+
|
|
16
|
+
THE STALENESS CONTRACT
|
|
17
|
+
A line-offset index is more fragile than the prose it indexes. Insert one line
|
|
18
|
+
near the top and every range below it is wrong - while the index still parses,
|
|
19
|
+
still looks plausible, and still returns content. It returns the WRONG content,
|
|
20
|
+
confidently.
|
|
21
|
+
|
|
22
|
+
So an index is only trustworthy if it can be PROVEN current, and it carries the
|
|
23
|
+
proof itself: `line_count`, `content_sha256`, and `line_ending`. A consumer
|
|
24
|
+
recomputes all three and refuses to slice on any mismatch. An index without them
|
|
25
|
+
is not a weaker index, it is an unusable one.
|
|
26
|
+
|
|
27
|
+
Line numbers are 1-based and inclusive on both ends, matching `sed -n 'S,Ep'`,
|
|
28
|
+
the Read tool's offset/limit, and this repository's `path:start_line-end_line`
|
|
29
|
+
evidence convention.
|
|
30
|
+
|
|
31
|
+
Usage:
|
|
32
|
+
# build or rebuild the index beside the document
|
|
33
|
+
python index_document.py --doc system_docs/src_components.md
|
|
34
|
+
python index_document.py --doc system_docs/src_architecture.md --max-level 3
|
|
35
|
+
|
|
36
|
+
# verify the existing index is current; writes nothing
|
|
37
|
+
python index_document.py --doc ... --check
|
|
38
|
+
|
|
39
|
+
# read one section by NAME - verifies the index first, refuses if stale
|
|
40
|
+
python index_document.py --doc ... --slice "Router and Role Resolution"
|
|
41
|
+
|
|
42
|
+
# force sectioning strategy (default `auto`: ENTRY markers if present,
|
|
43
|
+
# otherwise headings)
|
|
44
|
+
python index_document.py --doc ... --mode entry
|
|
45
|
+
"""
|
|
46
|
+
|
|
47
|
+
from __future__ import annotations
|
|
48
|
+
|
|
49
|
+
import argparse
|
|
50
|
+
import datetime
|
|
51
|
+
import hashlib
|
|
52
|
+
import pathlib
|
|
53
|
+
import re
|
|
54
|
+
import sys
|
|
55
|
+
|
|
56
|
+
INDEX_VERSION = "1.1.0"
|
|
57
|
+
HEADING = re.compile(r"^(#{1,6})\s+(.*?)\s*$")
|
|
58
|
+
FENCE = re.compile(r"^\s*(?:`{3}|~{3})")
|
|
59
|
+
|
|
60
|
+
# Explicit entry delimiters. Headings are inferred structure and depend on the
|
|
61
|
+
# author keeping levels consistent; these are declared structure and do not.
|
|
62
|
+
# Used by patch documents, where each entry is a distinct revision of a named
|
|
63
|
+
# thing and heading depth carries no meaning.
|
|
64
|
+
#
|
|
65
|
+
# The NAME lives in the marker, which is the point: it moves verbatim into the
|
|
66
|
+
# index, so an index row identifies the object it covers rather than a position
|
|
67
|
+
# in a file. A row keyed by a number is useless to anyone deciding what to read.
|
|
68
|
+
ENTRY_BEGIN = re.compile(r'^<!--\s*BEGIN ENTRY:\s*"?(.+?)"?\s*-->\s*$')
|
|
69
|
+
ENTRY_END = re.compile(r'^<!--\s*END ENTRY(?::\s*"?(.+?)"?)?\s*-->\s*$')
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
def write_if_changed(path: pathlib.Path, text: str, volatile: str = "generated_at") -> bool:
|
|
73
|
+
"""Write only when content differs ignoring the timestamp line. Returns wrote?
|
|
74
|
+
|
|
75
|
+
Regeneration must be idempotent. If the source did not change, the index
|
|
76
|
+
should not change either - otherwise every CI run or verification pass
|
|
77
|
+
rewrites the file with a fresh `generated_at` and produces a diff that says
|
|
78
|
+
nothing happened. A tool that churns its own output trains people to ignore
|
|
79
|
+
its diffs, which is precisely when a real change slips past.
|
|
80
|
+
"""
|
|
81
|
+
if path.exists():
|
|
82
|
+
old = path.read_text(encoding="utf-8")
|
|
83
|
+
strip = lambda s: "\n".join(l for l in s.split("\n") if volatile not in l)
|
|
84
|
+
if strip(old) == strip(text):
|
|
85
|
+
return False
|
|
86
|
+
path.write_text(text, encoding="utf-8", newline="\n")
|
|
87
|
+
return True
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
def read_lines(doc: pathlib.Path) -> tuple[bytes, str, list[str]]:
|
|
91
|
+
"""Return (raw_bytes, line_ending, lines). Trailing terminator is not a line."""
|
|
92
|
+
raw = doc.read_bytes()
|
|
93
|
+
nl = "\r\n" if b"\r\n" in raw else "\n"
|
|
94
|
+
lines = raw.decode("utf-8").split(nl)
|
|
95
|
+
if lines and lines[-1] == "":
|
|
96
|
+
lines.pop()
|
|
97
|
+
return raw, ("crlf" if nl == "\r\n" else "lf"), lines
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
def find_headings(lines: list[str], max_level: int) -> list[tuple[int, int, str]]:
|
|
101
|
+
"""Fence-aware heading scan. Returns (1-based line, level, title).
|
|
102
|
+
|
|
103
|
+
A `#` inside a fenced code block is not a heading. Treating it as one
|
|
104
|
+
produces ranges that split a code example in half.
|
|
105
|
+
"""
|
|
106
|
+
out: list[tuple[int, int, str]] = []
|
|
107
|
+
in_fence = False
|
|
108
|
+
for i, line in enumerate(lines, start=1):
|
|
109
|
+
if FENCE.match(line):
|
|
110
|
+
in_fence = not in_fence
|
|
111
|
+
continue
|
|
112
|
+
if in_fence:
|
|
113
|
+
continue
|
|
114
|
+
m = HEADING.match(line)
|
|
115
|
+
if m and len(m.group(1)) <= max_level:
|
|
116
|
+
out.append((i, len(m.group(1)), m.group(2)))
|
|
117
|
+
return out
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
def find_entries(lines: list[str]) -> tuple[list[dict], list[str]]:
|
|
121
|
+
"""Scan explicit BEGIN/END ENTRY markers. Returns (entries, problems).
|
|
122
|
+
|
|
123
|
+
Unbalanced or mismatched markers are reported rather than guessed at. A
|
|
124
|
+
silently repaired entry boundary produces a range that looks fine and covers
|
|
125
|
+
the wrong text.
|
|
126
|
+
"""
|
|
127
|
+
entries: list[dict] = []
|
|
128
|
+
problems: list[str] = []
|
|
129
|
+
open_at: int | None = None
|
|
130
|
+
open_name: str | None = None
|
|
131
|
+
in_fence = False
|
|
132
|
+
for i, line in enumerate(lines, start=1):
|
|
133
|
+
if FENCE.match(line):
|
|
134
|
+
in_fence = not in_fence
|
|
135
|
+
continue
|
|
136
|
+
if in_fence:
|
|
137
|
+
continue
|
|
138
|
+
b = ENTRY_BEGIN.match(line)
|
|
139
|
+
if b:
|
|
140
|
+
if open_at is not None:
|
|
141
|
+
problems.append(f"line {i}: BEGIN ENTRY {b.group(1)!r} while "
|
|
142
|
+
f"{open_name!r} still open at line {open_at}")
|
|
143
|
+
open_at, open_name = i, b.group(1).strip()
|
|
144
|
+
continue
|
|
145
|
+
e = ENTRY_END.match(line)
|
|
146
|
+
if e:
|
|
147
|
+
if open_at is None:
|
|
148
|
+
problems.append(f"line {i}: END ENTRY with nothing open")
|
|
149
|
+
continue
|
|
150
|
+
closing = (e.group(1) or "").strip()
|
|
151
|
+
if closing and closing != open_name:
|
|
152
|
+
problems.append(f"line {i}: END ENTRY {closing!r} closes "
|
|
153
|
+
f"{open_name!r} opened at line {open_at}")
|
|
154
|
+
entries.append({"level": 1, "path": open_name, "title": open_name,
|
|
155
|
+
"start": open_at, "end": i})
|
|
156
|
+
open_at, open_name = None, None
|
|
157
|
+
if open_at is not None:
|
|
158
|
+
problems.append(f"BEGIN ENTRY {open_name!r} at line {open_at} never closed")
|
|
159
|
+
return entries, problems
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
def build_sections(lines: list[str], found: list[tuple[int, int, str]]) -> list[dict]:
|
|
163
|
+
"""Heading list -> sections with ranges and breadcrumb paths.
|
|
164
|
+
|
|
165
|
+
A section runs from its own heading line to the line before the next heading
|
|
166
|
+
of the SAME OR SHALLOWER depth, or to end of file for the last one.
|
|
167
|
+
|
|
168
|
+
The document TITLE is omitted. A lone `#` heading is the document's name, not
|
|
169
|
+
a navigable section, and its range necessarily spans nearly the whole file -
|
|
170
|
+
an entry whose only possible use is to defeat the index while appearing to
|
|
171
|
+
use it.
|
|
172
|
+
|
|
173
|
+
The title is also stripped from every breadcrumb. Repeating the document name
|
|
174
|
+
on every row is pure redundancy: on a 156-row index it measured ~1,100 tokens
|
|
175
|
+
of a value that is identical on every line.
|
|
176
|
+
"""
|
|
177
|
+
if not found:
|
|
178
|
+
return []
|
|
179
|
+
levels = [lv for _, lv, _ in found]
|
|
180
|
+
min_level = min(levels)
|
|
181
|
+
lone_title = levels.count(min_level) == 1
|
|
182
|
+
root_title = found[0][2] if lone_title else None
|
|
183
|
+
|
|
184
|
+
sections: list[dict] = []
|
|
185
|
+
stack: list[tuple[int, str]] = []
|
|
186
|
+
for idx, (start, level, title) in enumerate(found):
|
|
187
|
+
end = len(lines)
|
|
188
|
+
for nxt_start, nxt_level, _ in found[idx + 1:]:
|
|
189
|
+
if nxt_level <= level:
|
|
190
|
+
end = nxt_start - 1
|
|
191
|
+
break
|
|
192
|
+
while stack and stack[-1][0] >= level:
|
|
193
|
+
stack.pop()
|
|
194
|
+
crumbs = [t for _, t in stack] + [title]
|
|
195
|
+
stack.append((level, title))
|
|
196
|
+
if lone_title and level == min_level:
|
|
197
|
+
continue # the document title
|
|
198
|
+
if root_title and crumbs and crumbs[0] == root_title:
|
|
199
|
+
crumbs = crumbs[1:] # drop the repeated root
|
|
200
|
+
sections.append({"level": level, "path": " > ".join(crumbs),
|
|
201
|
+
"title": title, "start": start, "end": end})
|
|
202
|
+
return sections
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
def render(doc: pathlib.Path, raw: bytes, line_ending: str,
|
|
206
|
+
lines: list[str], sections: list[dict]) -> str:
|
|
207
|
+
stamp = datetime.datetime.now(datetime.timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ")
|
|
208
|
+
out = [
|
|
209
|
+
f"# {doc.stem}_index",
|
|
210
|
+
"",
|
|
211
|
+
f"Line ranges into `{doc.name}`. Derived: regenerated by re-walking the",
|
|
212
|
+
"document, never hand-edited. Hand-editing a range is how an index starts",
|
|
213
|
+
"lying.",
|
|
214
|
+
"",
|
|
215
|
+
"Line numbers are 1-based and inclusive on both ends.",
|
|
216
|
+
"",
|
|
217
|
+
"## Staleness proof",
|
|
218
|
+
"",
|
|
219
|
+
"| field | value |",
|
|
220
|
+
"| --- | --- |",
|
|
221
|
+
f"| document | `{doc.name}` |",
|
|
222
|
+
f"| index_version | {INDEX_VERSION} |",
|
|
223
|
+
f"| generated_at | {stamp} |",
|
|
224
|
+
f"| line_count | {len(lines)} |",
|
|
225
|
+
f"| line_ending | {line_ending} |",
|
|
226
|
+
f"| content_sha256 | `{hashlib.sha256(raw).hexdigest()}` |",
|
|
227
|
+
f"| sections | {len(sections)} |",
|
|
228
|
+
"",
|
|
229
|
+
"Recompute all three of `line_count`, `line_ending`, and `content_sha256`",
|
|
230
|
+
"before slicing. On any mismatch: STOP, do not slice, do not eyeball an",
|
|
231
|
+
"offset. Regenerate this index or read the document directly, and say",
|
|
232
|
+
"which you did.",
|
|
233
|
+
"",
|
|
234
|
+
"## Sections",
|
|
235
|
+
"",
|
|
236
|
+
"| lines | lvl | name |",
|
|
237
|
+
"| --- | --- | --- |",
|
|
238
|
+
]
|
|
239
|
+
for s in sections:
|
|
240
|
+
out.append(f"| {s['start']}-{s['end']} | {s['level']} | {s['path']} |")
|
|
241
|
+
out.append("")
|
|
242
|
+
return "\n".join(out)
|
|
243
|
+
|
|
244
|
+
|
|
245
|
+
def format_warnings(lines: list[str], found: list[tuple[int, int, str]],
|
|
246
|
+
sections: list[dict]) -> list[str]:
|
|
247
|
+
"""Format violations the index cannot repair, reported not silently accepted.
|
|
248
|
+
|
|
249
|
+
These are documented rules in `system_document_build.md`. A tool that states
|
|
250
|
+
a rule and then quietly produces a degraded index when the rule is broken is
|
|
251
|
+
worse than one with no rule: the index still looks usable.
|
|
252
|
+
|
|
253
|
+
Both conditions here were found by testing rather than assumed:
|
|
254
|
+
|
|
255
|
+
- MULTIPLE H1: the title-omission logic needs a lone top-level heading to
|
|
256
|
+
identify the title. With two, neither is omitted and one section spans
|
|
257
|
+
most of the file - the exact "defeats the index while appearing to use it"
|
|
258
|
+
failure the omission exists to prevent.
|
|
259
|
+
- DUPLICATE NAMES: `--slice` matches on name, so two sections sharing one
|
|
260
|
+
are unaddressable. The slice refuses at read time, but the author who
|
|
261
|
+
created the collision is the person who can fix it, and they are here.
|
|
262
|
+
- WRAPPED HEADING: a heading whose text was reflowed across physical lines
|
|
263
|
+
parses as several headings. The first indexes as a one-line fragment and
|
|
264
|
+
wins "narrowest match", so `--slice` hands back a stub. Observed in the
|
|
265
|
+
wild spanning five physical lines. Unbalanced brackets are the reliable
|
|
266
|
+
tell: prose wraps mid-parenthesis far more often than a real heading ends
|
|
267
|
+
with one open.
|
|
268
|
+
"""
|
|
269
|
+
warnings: list[str] = []
|
|
270
|
+
for i, lv, title in found:
|
|
271
|
+
for opener, closer in (("(", ")"), ("[", "]")):
|
|
272
|
+
if title.count(opener) > title.count(closer):
|
|
273
|
+
warnings.append(
|
|
274
|
+
f"line {i}: heading has an unclosed '{opener}' - "
|
|
275
|
+
f"'{title[:60]}{'...' if len(title) > 60 else ''}'. A heading "
|
|
276
|
+
f"reflowed across lines indexes as several sections and "
|
|
277
|
+
f"--slice returns a fragment. Put it on one line.")
|
|
278
|
+
break
|
|
279
|
+
if found:
|
|
280
|
+
top = min(lv for _, lv, _ in found)
|
|
281
|
+
h1s = [(i, t) for i, lv, t in found if lv == top]
|
|
282
|
+
if len(h1s) > 1:
|
|
283
|
+
warnings.append(
|
|
284
|
+
f"{len(h1s)} level-{top} headings; expected exactly one document "
|
|
285
|
+
f"title. No title will be omitted and a section will span most of "
|
|
286
|
+
f"the file. Lines: " + ", ".join(str(i) for i, _ in h1s[:6]))
|
|
287
|
+
seen: dict[str, list[str]] = {}
|
|
288
|
+
for s in sections:
|
|
289
|
+
seen.setdefault(s["title"], []).append(f"{s['start']}-{s['end']}")
|
|
290
|
+
for title, ranges in seen.items():
|
|
291
|
+
if len(ranges) > 1:
|
|
292
|
+
warnings.append(f"duplicate section name {title!r} at {', '.join(ranges)} - "
|
|
293
|
+
f"`--slice` cannot address either")
|
|
294
|
+
return warnings
|
|
295
|
+
|
|
296
|
+
|
|
297
|
+
def validate(lines: list[str], sections: list[dict]) -> list[str]:
|
|
298
|
+
"""Round-trip, monotonicity, and bounds. Checked, never assumed.
|
|
299
|
+
|
|
300
|
+
An off-by-one is the failure mode that silently corrupts every downstream
|
|
301
|
+
read, so the first sliced line of each section is compared against the title
|
|
302
|
+
the index claims lives there.
|
|
303
|
+
"""
|
|
304
|
+
problems: list[str] = []
|
|
305
|
+
for s in sections:
|
|
306
|
+
head = lines[s["start"] - 1]
|
|
307
|
+
if s.get("kind") == "entry":
|
|
308
|
+
m = ENTRY_BEGIN.match(head)
|
|
309
|
+
if not m or m.group(1).strip() != s["title"]:
|
|
310
|
+
problems.append(f"line {s['start']} is {head!r}, expected "
|
|
311
|
+
f"BEGIN ENTRY {s['title']!r}")
|
|
312
|
+
else:
|
|
313
|
+
m = HEADING.match(head)
|
|
314
|
+
if not m or m.group(2) != s["title"]:
|
|
315
|
+
problems.append(f"line {s['start']} is {head!r}, expected heading "
|
|
316
|
+
f"{s['title']!r}")
|
|
317
|
+
if not (1 <= s["start"] <= s["end"] <= len(lines)):
|
|
318
|
+
problems.append(f"{s['title']}: range {s['start']}-{s['end']} out of bounds")
|
|
319
|
+
for a, b in zip(sections, sections[1:]):
|
|
320
|
+
if b["start"] <= a["start"]:
|
|
321
|
+
problems.append(f"non-monotonic: {a['title']} then {b['title']}")
|
|
322
|
+
return problems
|
|
323
|
+
|
|
324
|
+
|
|
325
|
+
def main() -> int:
|
|
326
|
+
ap = argparse.ArgumentParser(description=__doc__,
|
|
327
|
+
formatter_class=argparse.RawDescriptionHelpFormatter)
|
|
328
|
+
ap.add_argument("--doc", required=True, type=pathlib.Path)
|
|
329
|
+
ap.add_argument("--max-level", type=int, default=3,
|
|
330
|
+
help="deepest heading level to index (default 3)")
|
|
331
|
+
ap.add_argument("--mode", choices=("auto", "heading", "entry"), default="auto",
|
|
332
|
+
help="auto uses ENTRY markers when present, else headings")
|
|
333
|
+
ap.add_argument("--check", action="store_true",
|
|
334
|
+
help="verify the existing index is current; write nothing")
|
|
335
|
+
ap.add_argument("--slice", metavar="NAME",
|
|
336
|
+
help="print the lines of the section whose name contains NAME "
|
|
337
|
+
"(verifies the index first; refuses on any mismatch)")
|
|
338
|
+
args = ap.parse_args()
|
|
339
|
+
|
|
340
|
+
doc: pathlib.Path = args.doc
|
|
341
|
+
if not doc.is_file():
|
|
342
|
+
print(f"document not found: {doc}", file=sys.stderr)
|
|
343
|
+
return 2
|
|
344
|
+
|
|
345
|
+
# Two refusals. Both exist because this tool WRITES, and a wrong target does
|
|
346
|
+
# not produce a confusing message you shrug off - it produces a plausible
|
|
347
|
+
# file that replaces a correct one. Reading the wrong document costs seconds;
|
|
348
|
+
# writing over the right one costs the artifact.
|
|
349
|
+
if doc.stem.endswith("_index"):
|
|
350
|
+
print(f"refusing: {doc.name} is already an index.", file=sys.stderr)
|
|
351
|
+
print(" Indexing an index produces <stem>_index_index.md, which addresses "
|
|
352
|
+
"nothing. Point --doc at the document instead.", file=sys.stderr)
|
|
353
|
+
return 2
|
|
354
|
+
|
|
355
|
+
if "<!-- BEGIN FILE:" in doc.read_text(encoding="utf-8", errors="ignore"):
|
|
356
|
+
companion = doc.with_name(f"{doc.stem}_index.md")
|
|
357
|
+
print(f"refusing: {doc.name} is an ASSEMBLED graph, not an authored document.",
|
|
358
|
+
file=sys.stderr)
|
|
359
|
+
print(f" Its index is a byproduct of assembly - `assemble_graph.py` knows each",
|
|
360
|
+
file=sys.stderr)
|
|
361
|
+
print(f" range because it emitted those lines, so index and document cannot",
|
|
362
|
+
file=sys.stderr)
|
|
363
|
+
print(f" disagree. Re-indexing it here would re-parse headings instead, and",
|
|
364
|
+
file=sys.stderr)
|
|
365
|
+
print(f" overwrite {companion.name} with a weaker index keyed by heading",
|
|
366
|
+
file=sys.stderr)
|
|
367
|
+
print(f" breadcrumb rather than source path. Run assemble_graph.py.",
|
|
368
|
+
file=sys.stderr)
|
|
369
|
+
return 2
|
|
370
|
+
|
|
371
|
+
raw, line_ending, lines = read_lines(doc)
|
|
372
|
+
entries, entry_problems = find_entries(lines)
|
|
373
|
+
if args.mode == "entry" or (args.mode == "auto" and entries):
|
|
374
|
+
if entry_problems:
|
|
375
|
+
print(f"ENTRY MARKERS MALFORMED: {len(entry_problems)} problem(s). "
|
|
376
|
+
f"Nothing written.", file=sys.stderr)
|
|
377
|
+
for p in entry_problems[:15]:
|
|
378
|
+
print(f" {p}", file=sys.stderr)
|
|
379
|
+
return 1
|
|
380
|
+
sections = [dict(e, kind="entry") for e in entries]
|
|
381
|
+
mode_used = "entry markers"
|
|
382
|
+
else:
|
|
383
|
+
found = find_headings(lines, args.max_level)
|
|
384
|
+
sections = [dict(s, kind="heading") for s in build_sections(lines, found)]
|
|
385
|
+
mode_used = f"headings (level <= {args.max_level})"
|
|
386
|
+
if not sections:
|
|
387
|
+
print(f"no sections found in {doc.name} using {mode_used}", file=sys.stderr)
|
|
388
|
+
return 2
|
|
389
|
+
|
|
390
|
+
for w in format_warnings(lines, find_headings(lines, args.max_level), sections):
|
|
391
|
+
print(f" FORMAT WARNING: {w}", file=sys.stderr)
|
|
392
|
+
|
|
393
|
+
problems = validate(lines, sections)
|
|
394
|
+
if problems:
|
|
395
|
+
print(f"VALIDATION FAILED: {len(problems)} problem(s). Nothing written.",
|
|
396
|
+
file=sys.stderr)
|
|
397
|
+
for p in problems[:15]:
|
|
398
|
+
print(f" {p}", file=sys.stderr)
|
|
399
|
+
return 1
|
|
400
|
+
|
|
401
|
+
index_path = doc.with_name(f"{doc.stem}_index.md")
|
|
402
|
+
text = render(doc, raw, line_ending, lines, sections)
|
|
403
|
+
|
|
404
|
+
if args.slice:
|
|
405
|
+
# Verify against the index ON DISK, not against what we just computed.
|
|
406
|
+
# Slicing off a freshly derived section table would prove nothing: the
|
|
407
|
+
# whole point is to catch a document that moved since the index was
|
|
408
|
+
# written.
|
|
409
|
+
if not index_path.exists():
|
|
410
|
+
print(f"NO INDEX: {index_path.name}. Generate it before slicing.",
|
|
411
|
+
file=sys.stderr)
|
|
412
|
+
return 1
|
|
413
|
+
on_disk = index_path.read_text(encoding="utf-8")
|
|
414
|
+
want_hash = re.search(r"content_sha256 \| `([0-9a-f]{64})`", on_disk)
|
|
415
|
+
want_count = re.search(r"line_count \| (\d+)", on_disk)
|
|
416
|
+
live = hashlib.sha256(raw).hexdigest()
|
|
417
|
+
if (not want_hash or want_hash.group(1) != live
|
|
418
|
+
or not want_count or int(want_count.group(1)) != len(lines)):
|
|
419
|
+
print(f"INDEX STALE - refusing to slice. Regenerate {index_path.name}.",
|
|
420
|
+
file=sys.stderr)
|
|
421
|
+
return 1
|
|
422
|
+
needle = args.slice.lower()
|
|
423
|
+
hits = [s for s in sections if needle in s["path"].lower()]
|
|
424
|
+
if not hits:
|
|
425
|
+
print(f"no section matching {args.slice!r}. Read {index_path.name} "
|
|
426
|
+
f"for the available names.", file=sys.stderr)
|
|
427
|
+
return 1
|
|
428
|
+
if len(hits) > 1:
|
|
429
|
+
print(f"{len(hits)} sections match {args.slice!r} - narrow it:",
|
|
430
|
+
file=sys.stderr)
|
|
431
|
+
for h in hits:
|
|
432
|
+
print(f" {h['start']}-{h['end']} {h['path']}", file=sys.stderr)
|
|
433
|
+
return 1
|
|
434
|
+
s = hits[0]
|
|
435
|
+
print(f"<!-- {doc.name}:{s['start']}-{s['end']} {s['path']} -->")
|
|
436
|
+
print("\n".join(lines[s["start"] - 1:s["end"]]))
|
|
437
|
+
return 0
|
|
438
|
+
|
|
439
|
+
if args.check:
|
|
440
|
+
if not index_path.exists():
|
|
441
|
+
print(f"MISSING: {index_path.name}", file=sys.stderr)
|
|
442
|
+
return 1
|
|
443
|
+
current = index_path.read_text(encoding="utf-8")
|
|
444
|
+
cur_hash = re.search(r"content_sha256 \| `([0-9a-f]{64})`", current)
|
|
445
|
+
cur_count = re.search(r"line_count \| (\d+)", current)
|
|
446
|
+
live = hashlib.sha256(raw).hexdigest()
|
|
447
|
+
stale = []
|
|
448
|
+
if not cur_hash or cur_hash.group(1) != live:
|
|
449
|
+
stale.append("content_sha256 mismatch")
|
|
450
|
+
if not cur_count or int(cur_count.group(1)) != len(lines):
|
|
451
|
+
stale.append(f"line_count {cur_count.group(1) if cur_count else '?'} "
|
|
452
|
+
f"-> {len(lines)}")
|
|
453
|
+
if stale:
|
|
454
|
+
print(f"STALE: {index_path.name} - " + "; ".join(stale), file=sys.stderr)
|
|
455
|
+
return 1
|
|
456
|
+
print(f"OK: {index_path.name} is current "
|
|
457
|
+
f"({len(sections)} sections over {len(lines)} lines)")
|
|
458
|
+
return 0
|
|
459
|
+
|
|
460
|
+
wrote = write_if_changed(index_path, text)
|
|
461
|
+
biggest = max(sections, key=lambda s: s["end"] - s["start"])
|
|
462
|
+
idx_lines = len(text.split("\n"))
|
|
463
|
+
print(f"{'WROTE' if wrote else 'UNCHANGED'}: {index_path.name}")
|
|
464
|
+
print(f" {len(sections)} sections over {len(lines)} document lines")
|
|
465
|
+
print(f" index {idx_lines} lines ({100 * idx_lines // len(lines)}% of document)")
|
|
466
|
+
print(f" sectioned by: {mode_used}")
|
|
467
|
+
print(f" deepest level indexed: {max(s['level'] for s in sections)}")
|
|
468
|
+
print(f" largest section: {biggest['end'] - biggest['start'] + 1} lines "
|
|
469
|
+
f"({biggest['title'][:48]})")
|
|
470
|
+
print(f" all {len(sections)} ranges validated against their own headings")
|
|
471
|
+
print(f" the document was NOT modified: {doc}")
|
|
472
|
+
return 0
|
|
473
|
+
|
|
474
|
+
|
|
475
|
+
if __name__ == "__main__":
|
|
476
|
+
raise SystemExit(main())
|