docsif 1.0.0__tar.gz → 1.0.1__tar.gz
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.
- {docsif-1.0.0 → docsif-1.0.1}/.gsd/dispatch-isolation-sentinel.json +1 -1
- docsif-1.0.1/.planning/.continue-here.md +80 -0
- docsif-1.0.1/.planning/HANDOFF.json +37 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/STATE.md +5 -3
- docsif-1.0.1/.planning/state.json +12 -0
- {docsif-1.0.0 → docsif-1.0.1}/PKG-INFO +3 -2
- {docsif-1.0.0 → docsif-1.0.1}/README.md +1 -1
- {docsif-1.0.0 → docsif-1.0.1}/docs/changelog.md +7 -0
- {docsif-1.0.0 → docsif-1.0.1}/docs/index.md +1 -1
- {docsif-1.0.0 → docsif-1.0.1}/docs/installation.md +5 -5
- {docsif-1.0.0 → docsif-1.0.1}/docs/quickstart.md +3 -3
- {docsif-1.0.0 → docsif-1.0.1}/docs/testing.md +1 -5
- {docsif-1.0.0 → docsif-1.0.1}/example_config.yaml +2 -2
- {docsif-1.0.0 → docsif-1.0.1}/pyproject.toml +2 -1
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/__init__.py +1 -1
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/_version.py +1 -1
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/cli/__init__.py +1 -1
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/cli/commands/index.py +4 -0
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/config/constants.py +1 -1
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/indexing/parser.py +6 -2
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/mcp/protocol.py +1 -1
- {docsif-1.0.0 → docsif-1.0.1}/tests/integration/test_embed_idempotency.py +89 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/unit/indexing/test_parser.py +7 -2
- docsif-1.0.1/tests/unit/indexing/test_parser_checksum.py +70 -0
- docsif-1.0.1/tests/unit/utils/__init__.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/uv.lock +26 -1
- docsif-1.0.0/$$TMPD$$/t.db +0 -0
- docsif-1.0.0/.planning/.continue-here.md +0 -57
- docsif-1.0.0/.planning/state.json +0 -58
- {docsif-1.0.0 → docsif-1.0.1}/.github/workflows/docs.yml +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.gitignore +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.gsd/.gitignore +0 -0
- /docsif-1.0.0/.planning/milestones/v1.0-phases/07-cli-claude-skill/.gitkeep → /docsif-1.0.1/.planning/.gsd-ws-arg +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/E2E-UAT.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/E2E-manual-test-plan.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/MILESTONES.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/PROJECT.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/RETROSPECTIVE.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/ROADMAP.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/WINDOWS.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/codebase/ARCHITECTURE.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/codebase/CONCERNS.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/codebase/CONVENTIONS.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/codebase/INTEGRATIONS.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/codebase/STACK.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/codebase/STRUCTURE.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/codebase/TESTING.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/config.json +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/debug/e2e-get-and-stats-bugs.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-MILESTONE-AUDIT.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-REQUIREMENTS.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-ROADMAP.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/01-foundation-fix/01-01-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/01-foundation-fix/01-01-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/01-foundation-fix/01-02-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/01-foundation-fix/01-02-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/01-foundation-fix/01-03-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/01-foundation-fix/01-03-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/01-foundation-fix/01-04-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/01-foundation-fix/01-04-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/01-foundation-fix/01-05-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/01-foundation-fix/01-05-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/01-foundation-fix/01-06-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/01-foundation-fix/01-06-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/01-foundation-fix/01-CONTEXT.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/01-foundation-fix/01-DISCUSSION-LOG.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/01-foundation-fix/01-PATTERNS.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/01-foundation-fix/01-RESEARCH.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/01-foundation-fix/01-VALIDATION.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/01-foundation-fix/01-VERIFICATION.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/02-cli-core-completion/02-01-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/02-cli-core-completion/02-01-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/02-cli-core-completion/02-02-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/02-cli-core-completion/02-02-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/02-cli-core-completion/02-03a-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/02-cli-core-completion/02-03a-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/02-cli-core-completion/02-03b-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/02-cli-core-completion/02-03b-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/02-cli-core-completion/02-04-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/02-cli-core-completion/02-04-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/02-cli-core-completion/02-05-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/02-cli-core-completion/02-05-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/02-cli-core-completion/02-CONTEXT.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/02-cli-core-completion/02-DISCUSSION-LOG.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/02-cli-core-completion/02-PATTERNS.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/02-cli-core-completion/02-RESEARCH.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/02-cli-core-completion/02-REVIEW.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/02-cli-core-completion/02-VALIDATION.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/02-cli-core-completion/02-VERIFICATION.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/03-embedding-vector-search/03-01-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/03-embedding-vector-search/03-01-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/03-embedding-vector-search/03-02-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/03-embedding-vector-search/03-02-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/03-embedding-vector-search/03-03-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/03-embedding-vector-search/03-03-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/03-embedding-vector-search/03-04-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/03-embedding-vector-search/03-04-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/03-embedding-vector-search/03-05-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/03-embedding-vector-search/03-05-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/03-embedding-vector-search/03-06-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/03-embedding-vector-search/03-06-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/03-embedding-vector-search/03-07-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/03-embedding-vector-search/03-07-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/03-embedding-vector-search/03-08-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/03-embedding-vector-search/03-08-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/03-embedding-vector-search/03-CONTEXT.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/03-embedding-vector-search/03-DISCUSSION-LOG.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/03-embedding-vector-search/03-PATTERNS.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/03-embedding-vector-search/03-RESEARCH.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/03-embedding-vector-search/03-REVIEW-FIX.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/03-embedding-vector-search/03-REVIEW.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/03-embedding-vector-search/03-SECURITY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/03-embedding-vector-search/03-UAT.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/03-embedding-vector-search/03-VALIDATION.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/03-embedding-vector-search/03-VERIFICATION.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/03-embedding-vector-search/COVERAGE.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/03-embedding-vector-search/deferred-items.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/04-advanced-search-pipeline/04-01-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/04-advanced-search-pipeline/04-01-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/04-advanced-search-pipeline/04-02-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/04-advanced-search-pipeline/04-02-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/04-advanced-search-pipeline/04-03-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/04-advanced-search-pipeline/04-03-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/04-advanced-search-pipeline/04-04-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/04-advanced-search-pipeline/04-04-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/04-advanced-search-pipeline/04-05-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/04-advanced-search-pipeline/04-05-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/04-advanced-search-pipeline/04-06-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/04-advanced-search-pipeline/04-06-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/04-advanced-search-pipeline/04-CONTEXT.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/04-advanced-search-pipeline/04-DISCUSSION-LOG.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/04-advanced-search-pipeline/04-PATTERNS.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/04-advanced-search-pipeline/04-RESEARCH.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/04-advanced-search-pipeline/04-REVIEW.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/04-advanced-search-pipeline/04-SECURITY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/04-advanced-search-pipeline/04-UAT.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/04-advanced-search-pipeline/04-UI-REVIEW.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/04-advanced-search-pipeline/04-VALIDATION.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/04-advanced-search-pipeline/04-VERIFICATION.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/05-agent-context-experience/05-01-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/05-agent-context-experience/05-01-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/05-agent-context-experience/05-02-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/05-agent-context-experience/05-02-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/05-agent-context-experience/05-03-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/05-agent-context-experience/05-03-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/05-agent-context-experience/05-04-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/05-agent-context-experience/05-04-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/05-agent-context-experience/05-05-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/05-agent-context-experience/05-05-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/05-agent-context-experience/05-06-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/05-agent-context-experience/05-06-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/05-agent-context-experience/05-07-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/05-agent-context-experience/05-07-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/05-agent-context-experience/05-08-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/05-agent-context-experience/05-08-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/05-agent-context-experience/05-09-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/05-agent-context-experience/05-09-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/05-agent-context-experience/05-10-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/05-agent-context-experience/05-10-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/05-agent-context-experience/05-11-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/05-agent-context-experience/05-11-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/05-agent-context-experience/05-12-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/05-agent-context-experience/05-12-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/05-agent-context-experience/05-CONTEXT.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/05-agent-context-experience/05-DISCUSSION-LOG.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/05-agent-context-experience/05-PATTERNS.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/05-agent-context-experience/05-RESEARCH.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/05-agent-context-experience/05-REVIEW-DISPOSITION.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/05-agent-context-experience/05-REVIEW-FIX.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/05-agent-context-experience/05-REVIEW.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/05-agent-context-experience/05-SECURITY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/05-agent-context-experience/05-SPEC.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/05-agent-context-experience/05-UAT.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/05-agent-context-experience/05-UI-REVIEW.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/05-agent-context-experience/05-VALIDATION.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/05-agent-context-experience/05-VERIFICATION.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/05-agent-context-experience/deferred-items.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/06-documentation-audit-refresh/.continue-here.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/06-documentation-audit-refresh/06-01-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/06-documentation-audit-refresh/06-02-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/06-documentation-audit-refresh/06-03-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/06-documentation-audit-refresh/06-04-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/06-documentation-audit-refresh/06-05-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/06-documentation-audit-refresh/06-06-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/06-documentation-audit-refresh/06-07-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/06-documentation-audit-refresh/06-08-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/06-documentation-audit-refresh/06-08-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/06-documentation-audit-refresh/06-09-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/06-documentation-audit-refresh/06-09-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/06-documentation-audit-refresh/06-10-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/06-documentation-audit-refresh/06-10-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/06-documentation-audit-refresh/06-CONTEXT.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/06-documentation-audit-refresh/06-DISCUSSION-LOG.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/06-documentation-audit-refresh/06-RESEARCH.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/06-documentation-audit-refresh/06-REVIEW-DISPOSITION.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/06-documentation-audit-refresh/06-REVIEW.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/06-documentation-audit-refresh/06-SECURITY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/06-documentation-audit-refresh/06-SPEC.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/06-documentation-audit-refresh/06-UAT.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/06-documentation-audit-refresh/06-UI-REVIEW.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/06-documentation-audit-refresh/06-VALIDATION.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/06-documentation-audit-refresh/06-VERIFICATION.md +0 -0
- {docsif-1.0.0/.planning/milestones/v1.0-phases/08-project-rename-from-docsift-to-sif → docsif-1.0.1/.planning/milestones/v1.0-phases/07-cli-claude-skill}/.gitkeep +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/07-cli-claude-skill/07-01-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/07-cli-claude-skill/07-01-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/07-cli-claude-skill/07-02-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/07-cli-claude-skill/07-02-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/07-cli-claude-skill/07-CONTEXT.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/07-cli-claude-skill/07-DISCUSSION-LOG.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/07-cli-claude-skill/07-REVIEW-DISPOSITION.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/07-cli-claude-skill/07-REVIEW.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/07-cli-claude-skill/07-SECURITY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/07-cli-claude-skill/07-SPEC.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/07-cli-claude-skill/07-UAT.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/07-cli-claude-skill/07-UI-REVIEW.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/07-cli-claude-skill/07-VALIDATION.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/07-cli-claude-skill/07-VERIFICATION.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/08-project-rename-from-docsift-to-sif/.continue-here.md +0 -0
- {docsif-1.0.0/.planning/milestones/v1.0-phases/09-mcp-server-implementation → docsif-1.0.1/.planning/milestones/v1.0-phases/08-project-rename-from-docsift-to-sif}/.gitkeep +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/08-project-rename-from-docsift-to-sif/08-01-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/08-project-rename-from-docsift-to-sif/08-01-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/08-project-rename-from-docsift-to-sif/08-02-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/08-project-rename-from-docsift-to-sif/08-02-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/08-project-rename-from-docsift-to-sif/08-03-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/08-project-rename-from-docsift-to-sif/08-03-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/08-project-rename-from-docsift-to-sif/08-04-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/08-project-rename-from-docsift-to-sif/08-04-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/08-project-rename-from-docsift-to-sif/08-05-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/08-project-rename-from-docsift-to-sif/08-05-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/08-project-rename-from-docsift-to-sif/08-06-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/08-project-rename-from-docsift-to-sif/08-06-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/08-project-rename-from-docsift-to-sif/08-07-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/08-project-rename-from-docsift-to-sif/08-07-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/08-project-rename-from-docsift-to-sif/08-08-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/08-project-rename-from-docsift-to-sif/08-08-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/08-project-rename-from-docsift-to-sif/08-CONTEXT.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/08-project-rename-from-docsift-to-sif/08-DISCUSSION-LOG.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/08-project-rename-from-docsift-to-sif/08-PATTERNS.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/08-project-rename-from-docsift-to-sif/08-RESEARCH.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/08-project-rename-from-docsift-to-sif/08-VALIDATION.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/08-project-rename-from-docsift-to-sif/08-VERIFICATION.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/09-mcp-server-implementation/.continue-here.md +0 -0
- /docsif-1.0.0/.planning/tmp/verify-cr03/probe/plain.md → /docsif-1.0.1/.planning/milestones/v1.0-phases/09-mcp-server-implementation/.gitkeep +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/09-mcp-server-implementation/09-01-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/09-mcp-server-implementation/09-01-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/09-mcp-server-implementation/09-02-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/09-mcp-server-implementation/09-02-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/09-mcp-server-implementation/09-03-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/09-mcp-server-implementation/09-03-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/09-mcp-server-implementation/09-04-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/09-mcp-server-implementation/09-04-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/09-mcp-server-implementation/09-05-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/09-mcp-server-implementation/09-05-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/09-mcp-server-implementation/09-06-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/09-mcp-server-implementation/09-06-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/09-mcp-server-implementation/09-CONTEXT.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/09-mcp-server-implementation/09-DISCUSSION-LOG.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/09-mcp-server-implementation/09-PATTERNS.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/09-mcp-server-implementation/09-RESEARCH.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/09-mcp-server-implementation/09-REVIEW-FIX.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/09-mcp-server-implementation/09-REVIEW.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/09-mcp-server-implementation/09-SPEC.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/09-mcp-server-implementation/09-VALIDATION.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/09-mcp-server-implementation/09-VERIFICATION.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/09-mcp-server-implementation/9-UAT.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/10-raise-pytest-coverage-to-90/.gitkeep +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/10-raise-pytest-coverage-to-90/10-01-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/10-raise-pytest-coverage-to-90/10-01-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/10-raise-pytest-coverage-to-90/10-02-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/10-raise-pytest-coverage-to-90/10-02-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/10-raise-pytest-coverage-to-90/10-03-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/10-raise-pytest-coverage-to-90/10-03-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/10-raise-pytest-coverage-to-90/10-04-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/10-raise-pytest-coverage-to-90/10-04-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/10-raise-pytest-coverage-to-90/10-05-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/10-raise-pytest-coverage-to-90/10-05-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/10-raise-pytest-coverage-to-90/10-06-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/10-raise-pytest-coverage-to-90/10-06-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/10-raise-pytest-coverage-to-90/10-07-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/10-raise-pytest-coverage-to-90/10-07-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/10-raise-pytest-coverage-to-90/10-CONTEXT.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/10-raise-pytest-coverage-to-90/10-DISCUSSION-LOG.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/10-raise-pytest-coverage-to-90/10-PATTERNS.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/10-raise-pytest-coverage-to-90/10-RESEARCH.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/10-raise-pytest-coverage-to-90/10-REVIEW-DELTA-DISPOSITION.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/10-raise-pytest-coverage-to-90/10-REVIEW-DELTA.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/10-raise-pytest-coverage-to-90/10-REVIEW-DISPOSITION.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/10-raise-pytest-coverage-to-90/10-REVIEW.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/10-raise-pytest-coverage-to-90/10-SECURITY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/10-raise-pytest-coverage-to-90/10-UI-REVIEW.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/10-raise-pytest-coverage-to-90/10-VALIDATION.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/10-raise-pytest-coverage-to-90/10-VERIFICATION.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/10.1-address-tech-debt-path-normalization-review-findings-cr-01-c/.continue-here.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/10.1-address-tech-debt-path-normalization-review-findings-cr-01-c/.gitkeep +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/10.1-address-tech-debt-path-normalization-review-findings-cr-01-c/10.1-01-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/10.1-address-tech-debt-path-normalization-review-findings-cr-01-c/10.1-01-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/10.1-address-tech-debt-path-normalization-review-findings-cr-01-c/10.1-02-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/10.1-address-tech-debt-path-normalization-review-findings-cr-01-c/10.1-02-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/10.1-address-tech-debt-path-normalization-review-findings-cr-01-c/10.1-03-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/10.1-address-tech-debt-path-normalization-review-findings-cr-01-c/10.1-03-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/10.1-address-tech-debt-path-normalization-review-findings-cr-01-c/10.1-04-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/10.1-address-tech-debt-path-normalization-review-findings-cr-01-c/10.1-04-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/10.1-address-tech-debt-path-normalization-review-findings-cr-01-c/10.1-PATTERNS.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/10.1-address-tech-debt-path-normalization-review-findings-cr-01-c/10.1-RESEARCH.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/10.1-address-tech-debt-path-normalization-review-findings-cr-01-c/10.1-REVIEW-DISPOSITION.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/10.1-address-tech-debt-path-normalization-review-findings-cr-01-c/10.1-REVIEW.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/10.1-address-tech-debt-path-normalization-review-findings-cr-01-c/10.1-SECURITY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/10.1-address-tech-debt-path-normalization-review-findings-cr-01-c/10.1-UI-REVIEW.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/10.1-address-tech-debt-path-normalization-review-findings-cr-01-c/10.1-VALIDATION.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/10.1-address-tech-debt-path-normalization-review-findings-cr-01-c/10.1-VERIFICATION.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/10.1-address-tech-debt-path-normalization-review-findings-cr-01-c/COVERAGE.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-phases/10.1-address-tech-debt-path-normalization-review-findings-cr-01-c/deferred-items.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-quick/260905-hc3-fix-g-04-1-snippet-relevance-markdown-li/260905-hc3-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-quick/260905-hc3-fix-g-04-1-snippet-relevance-markdown-li/260905-hc3-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-quick/260905-kmv-fix-g-04-2-reranker-load-crash-model-dir/260905-kmv-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-quick/260905-kmv-fix-g-04-2-reranker-load-crash-model-dir/260905-kmv-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-quick/260905-sxc-fix-g-04-3-hyde-unreachable-add-create-c/260905-sxc-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-quick/260905-sxc-fix-g-04-3-hyde-unreachable-add-create-c/260905-sxc-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-quick/260905-tax-fix-g-04-4-gguf-embed-shape-unwrap-llama/260905-tax-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-quick/260905-tax-fix-g-04-4-gguf-embed-shape-unwrap-llama/260905-tax-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-quick/260905-tax-fix-g-04-4-gguf-embed-shape-unwrap-llama/deferred-items.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-quick/260910-kps-fix-json-output-emit-via-click-echo-no-w/260910-kps-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-quick/260910-kps-fix-json-output-emit-via-click-echo-no-w/260910-kps-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-quick/260914-g63-audit-follow-up-fix-deferred-items-doc-f/260914-g63-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-quick/260914-g63-audit-follow-up-fix-deferred-items-doc-f/260914-g63-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-quick/260914-v5f-fix-exclude-all-collection-leak-empty-co/260914-v5f-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-quick/260914-v5f-fix-exclude-all-collection-leak-empty-co/260914-v5f-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-quick/260914-vyr-rename-distribution-docsif-to-sif-pyproj/260914-vyr-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-quick/260914-vyr-rename-distribution-docsif-to-sif-pyproj/260914-vyr-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-quick/260914-wxv-fix-stale-command-references-nonexistent/260914-wxv-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-quick/260914-wxv-fix-stale-command-references-nonexistent/260914-wxv-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-quick/260917-bo2-typing-debt-batch-1-clear-search-rerank-/260917-bo2-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-quick/260917-bo2-typing-debt-batch-1-clear-search-rerank-/260917-bo2-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-quick/260917-dkf-typing-debt-batch-2-clear-indexing-watch/260917-dkf-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-quick/260917-dkf-typing-debt-batch-2-clear-indexing-watch/260917-dkf-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-quick/260917-kav-typing-debt-batch-3-clear-mcp-handlers-p/260917-kav-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-quick/260917-kav-typing-debt-batch-3-clear-mcp-handlers-p/260917-kav-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-quick/261105-eev-document-embedding-hardware-device-selec/261105-eev-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-quick/261105-eev-document-embedding-hardware-device-selec/261105-eev-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-quick/261105-g1u-fix-05-review-wr-03-and-wr-09-context-ad/261105-g1u-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-quick/261105-g1u-fix-05-review-wr-03-and-wr-09-context-ad/261105-g1u-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-quick/261105-g1u-fix-05-review-wr-03-and-wr-09-context-ad/deferred-items.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-quick/261105-wbj-embed-o-n-bug-src-sif-search-vector-py-2/261105-wbj-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-quick/261105-wbj-embed-o-n-bug-src-sif-search-vector-py-2/261105-wbj-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-quick/261105-wwz-vec0-metadata-src-sif-search-vector-py-8/261105-wwz-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-quick/261105-wwz-vec0-metadata-src-sif-search-vector-py-8/261105-wwz-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-quick/261106-u7d-typing-debt-batch-4-clear-all-17-ledgere/261106-u7d-PLAN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-quick/261106-u7d-typing-debt-batch-4-clear-all-17-ledgere/261106-u7d-SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/milestones/v1.0-quick/README.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/research/ARCHITECTURE.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/research/FEATURES.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/research/PITFALLS.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/research/STACK.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/research/SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/03-contribution-ai-integration.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/03-contribution-assumption-delta.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/03-contribution-schema-gate.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/03-contribution-security.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/03-edge-coverage.json +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/05-09-tdd/task1-red-raw.txt +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/05-09-tdd/task1-red-record.json +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/05-09-tdd/task2-red-raw.txt +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/05-09-tdd/task2-red-record.json +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/05-10-red-evidence-task1.json +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/05-10-red-evidence-task3.json +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/05-11-decision1.txt +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/05-11-decision2.txt +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/05-11-full-suite.txt +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/05-11-red-console.txt +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/05-11-red-end.txt +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/05-11-red-evidence-task1.json +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/05-11-red-junit.xml +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/05-11-red-start.txt +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/10-02-collection.xml +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/10-02-final-coverage.txt +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/10-02-final.xml +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/10-02-full-plain.txt +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/10-02-full-suite.txt +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/10-02-get.xml +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/10-02-main.xml +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/10-03-full.xml +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/10-03-rerank.xml +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/10-03-search-before.xml +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/10-03-search.xml +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/10-04-cache.xml +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/10-04-database.xml +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/10-04-full.xml +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/10-04-migrations.xml +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/10-04-repositories.xml +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/10-05-collection.xml +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/10-05-context.xml +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/10-05-download.xml +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/10-05-full.xml +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/10-05-logging.xml +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/10-05-paths.xml +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/10-05-progress.xml +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/10-05-text.xml +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/10-06-chunker.xml +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/10-06-full.xml +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/10-06-http.xml +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/10-06-parser.xml +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/10-06-scanner.xml +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/10-06-server.xml +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/10-06-stdio-handler-before.xml +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/10-07-duration +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/10-07-start-epoch +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/10-07-start-time +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/10-plan-check-collection.xml +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/10-plan-check-get.xml +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/10-plan-check-http.xml +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/10-plan-check-main.xml +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/10-plan-check-repositories.xml +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/10-plan-check-rerank.xml +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/10-plan-check-search.xml +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/261105-wwz-probe.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/cfg-before-fmt.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/cfg-check.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/dec-05-12-a-rationale.txt +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/dec-05-12-a-summary.txt +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/docs-work-manifest.json +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/phase10-current-coverage.txt +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/phase10-final-command-paths.json +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/phase10-final-failure-directions.json +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/phase10-focused-coverage.xml +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/phase10-focused-module-probe.txt +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/phase10-focused-probe.txt +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/phase10-focused-total-probe.txt +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/phase10-format-baseline.txt +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/phase10-openai-forward.txt +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/phase10-openai-isolated.txt +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/phase10-openai-reverse.txt +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/phase10-ruff-baseline.txt +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/phase10-xml-gate-probe.txt +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/red-run-05-08.txt +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/tdd-red-05-12-console.txt +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/tdd-red-05-12-junit.xml +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/tdd-red-05-12-record.json +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/tdd-red-10.1-01-console.txt +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/tdd-red-10.1-01.json +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/tdd-red-10.1-01.xml +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/.planning/tmp/tdd-red-evidence-05-08-task1.json +0 -0
- /docsif-1.0.0/tests/unit/core/__init__.py → /docsif-1.0.1/.planning/tmp/verify-cr03/probe/plain.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/CLAUDE.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/DELIVERY_REPORT.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/DESIGN.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/INTEGRATION_STATUS.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/LICENSE +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/MagicMock/mock/4398091296 +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/MagicMock/mock/4419046432 +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/MagicMock/mock/4419497200 +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/MagicMock/mock/4426075504 +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/Makefile +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/PROJECT_SUMMARY.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/REFACTOR_REPORT.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/SIDE_BY_SIDE_TEST_REPORT.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/docs/api-reference.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/docs/architecture.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/docs/cli-reference.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/docs/configuration.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/docs/contributing.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/docs/development.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/docs/mcp-server.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/docs/migration.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/docs/models.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/docs/search-algorithms.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/examples/quickstart.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/mkdocs.yml +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/quick_test.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/scripts/generate_arch_diagram.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/scripts/generate_cli_ref.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/scripts/generate_config_ref.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/simple_test.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/cli/commands/__init__.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/cli/commands/bench.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/cli/commands/collection.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/cli/commands/context.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/cli/commands/get.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/cli/commands/ls.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/cli/commands/mcp.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/cli/commands/pull.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/cli/commands/search.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/cli/formatters.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/cli/main.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/config/__init__.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/config/settings.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/core/__init__.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/core/collection.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/core/context.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/core/document.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/core/models.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/database/__init__.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/database/connection.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/database/database.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/database/migrations.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/database/repositories.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/database/repository.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/database/schema.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/embedding/__init__.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/embedding/cache.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/embedding/embedder.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/embedding/factory.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/embedding/manager.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/embedding/model.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/indexing/__init__.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/indexing/chunker.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/indexing/indexer.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/indexing/scanner.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/indexing/watcher.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/mcp/README.md +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/mcp/__init__.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/mcp/backend.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/mcp/claude_desktop_config.json +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/mcp/cli.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/mcp/handlers.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/mcp/server.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/mcp/transports/__init__.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/mcp/transports/http.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/mcp/transports/stdio.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/models/__init__.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/models/collection.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/models/context.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/models/document.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/models/download.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/models/embedding.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/models/search.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/search/__init__.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/search/benchmark.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/search/bm25.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/search/context_attach.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/search/expansion.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/search/hybrid.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/search/rerank.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/search/rrf.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/search/snippets.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/search/strategy.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/search/term_match.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/search/vector.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/utils/__init__.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/utils/logging.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/utils/paths.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/utils/progress.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/src/sif/utils/text.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/__init__.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/conftest.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/e2e/__init__.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/factories.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/integration/__init__.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/integration/test_search_pipeline.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/test_docs.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/test_sif_complete.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/unit/__init__.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/unit/cli/__init__.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/unit/cli/test_bench.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/unit/cli/test_collection.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/unit/cli/test_context.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/unit/cli/test_database_lifecycle.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/unit/cli/test_formatters.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/unit/cli/test_get.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/unit/cli/test_index.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/unit/cli/test_ls.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/unit/cli/test_main.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/unit/cli/test_pull.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/unit/cli/test_search.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/unit/cli/test_status.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/unit/config/test_settings.py +0 -0
- {docsif-1.0.0/tests/unit/models → docsif-1.0.1/tests/unit/core}/__init__.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/unit/core/test_collection_entity.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/unit/core/test_context.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/unit/database/__init__.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/unit/database/test_database.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/unit/database/test_migrations.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/unit/database/test_repositories.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/unit/database/test_schema.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/unit/db/__init__.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/unit/db/test_database.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/unit/db/test_repositories.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/unit/embedding/test_cache.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/unit/embedding/test_embedder_impl.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/unit/embedding/test_factory.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/unit/embedding/test_manager.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/unit/embedding/test_openai_embedder.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/unit/indexing/__init__.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/unit/indexing/test_chunker.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/unit/indexing/test_indexer.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/unit/indexing/test_scanner.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/unit/indexing/test_watcher.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/unit/inference/__init__.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/unit/inference/test_embedder.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/unit/inference/test_query_expander.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/unit/inference/test_reranker.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/unit/mcp/__init__.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/unit/mcp/test_backend.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/unit/mcp/test_integration.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/unit/mcp/test_server.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/unit/mcp/test_transports_http.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/unit/mcp/test_transports_stdio.py +0 -0
- {docsif-1.0.0/tests/unit/utils → docsif-1.0.1/tests/unit/models}/__init__.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/unit/models/test_download.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/unit/search/__init__.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/unit/search/test_benchmark.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/unit/search/test_bm25.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/unit/search/test_collection_filter.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/unit/search/test_context_attach.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/unit/search/test_hybrid.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/unit/search/test_rerank.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/unit/search/test_rrf.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/unit/search/test_snippets.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/unit/search/test_term_match.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/unit/search/test_vector.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/unit/test_collection.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/unit/test_search.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/unit/utils/test_logging.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/unit/utils/test_paths.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/unit/utils/test_progress.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/tests/unit/utils/test_text.py +0 -0
- {docsif-1.0.0 → docsif-1.0.1}/verify_imports.py +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"isolation":"none","harness_flag":null,"phase":null,"plan":null,"written_at":
|
|
1
|
+
{"isolation":"none","harness_flag":null,"phase":null,"plan":null,"written_at":1794012884815}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
---
|
|
2
|
+
context: default
|
|
3
|
+
phase: none
|
|
4
|
+
task: 0
|
|
5
|
+
total_tasks: 0
|
|
6
|
+
status: milestone_shipped
|
|
7
|
+
last_updated: 2026-11-06T23:17:56.807Z
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# BLOCKING CONSTRAINTS — Read Before Anything Else
|
|
11
|
+
|
|
12
|
+
> These are not suggestions. Each constraint below was discovered through failure.
|
|
13
|
+
> Acknowledge each one explicitly before proceeding.
|
|
14
|
+
|
|
15
|
+
- [ ] CONSTRAINT: generator-owned docs are version-sensitive by construction — any change to generator behavior or the libraries they introspect (Click majors, Python minors, pydantic) re-drifts `docs/cli-reference.md`/`configuration.md`; after touching a generator or bumping an introspected dep, ALWAYS run `make docs-generate` and commit the regenerated output before push, or CI's `git diff --exit-code` gate fails.
|
|
16
|
+
|
|
17
|
+
**Do not proceed until the box is checked.**
|
|
18
|
+
|
|
19
|
+
## Critical Anti-Patterns
|
|
20
|
+
|
|
21
|
+
| Pattern | Description | Severity | Prevention Mechanism |
|
|
22
|
+
|---------|-------------|----------|---------------------|
|
|
23
|
+
| Floors-only unpinned deps | CI installs latest deps (Click 8.5 vs local 8.3) and behavior diverged, failing the drift gate; a fresh-install test env also surfaced undeclared pytest-asyncio | advisory | Generator output is now version-normalized; before releases, smoke-test a FRESH venv install (`uv pip install docsif[dev]`) — it catches undeclared/exploded deps the canonical env masks |
|
|
24
|
+
| Post-verification edits re-stale fingerprints | Fixing files covered by an already-verified phase (shared surfaces: get.py, Makefile, docs) invalidates that phase's digest, cascading | advisory | Sequence wide fixes BEFORE verifiers run, or expect one extra regeneration round; check `verification.status` per phase after multi-phase fix sessions |
|
|
25
|
+
|
|
26
|
+
<current_state>
|
|
27
|
+
Milestone v1.0 is SHIPPED and RELEASED. All planning artifacts archived under `.planning/milestones/v1.0-*`; `.planning/phases/` and `.planning/quick/` are empty; ROADMAP collapsed to a shipped-milestone summary; tag `v1.0` pushed; PR #1 (dev→main) open with green CI; **docsif 1.0.0 live on PyPI** (verified installable). No active phase work.
|
|
28
|
+
</current_state>
|
|
29
|
+
|
|
30
|
+
<completed_work>
|
|
31
|
+
|
|
32
|
+
- Milestone v1.0 close: verified_closeout, zero overrides (audit 3/3 resolved, not acknowledged)
|
|
33
|
+
- 4 stale phase verifications regenerated (05/06/07/10.1) — 5 review criticals + 4 verification gaps fixed en route (get.py markup display ×2, generator pipes/version-drift, README command, docs CI `--no-cov`, Mermaid sync, phantom fusion, k1)
|
|
34
|
+
- Version 1.0.0 (6 sites), tag v1.0, archives, MILESTONES.md, RETROSPECTIVE.md
|
|
35
|
+
- Pushed dev (207 commits) + tag; PR #1 created; CI Docs Validation failure diagnosed (Click 8.5 drift) and fixed — green
|
|
36
|
+
- PyPI: published as **docsif 1.0.0** (`sif` taken; user chose their own registered name)
|
|
37
|
+
- numpy≥2: canonical suite (numpy 2.3.5) 1015 green; published wheel on numpy 2.5.4 → CLI smoke + 974/974
|
|
38
|
+
- pytest-asyncio added to dev extras (fresh-env 56-failure root cause)
|
|
39
|
+
</completed_work>
|
|
40
|
+
|
|
41
|
+
<remaining_work>
|
|
42
|
+
|
|
43
|
+
No open phase work. Backlog (all ledgered in archived REVIEW-DISPOSITION files):
|
|
44
|
+
- 10-REVIEW WR-01..10, 10.1 IN-10..13, 07 WR-02/IN-02/03, delta WR-02 (pip constraints)/IN-02
|
|
45
|
+
- Version quadruplication sync mechanism; arch-generator CI wiring; Makefile test-fast echo wording; mcp/cli.py 0% shim; `context remove/prune` confirmation guardrails
|
|
46
|
+
- Human: merge PR #1; optionally `rm -rf ~/.claude/skills/docsift-{get,search}` (stale pre-rename dirs)
|
|
47
|
+
</remaining_work>
|
|
48
|
+
|
|
49
|
+
<decisions_made>
|
|
50
|
+
|
|
51
|
+
- Distribution name `docsif` on PyPI (import/console name stays `sif`)
|
|
52
|
+
- verified_closeout after resolving everything (user principle: resolve, don't acknowledge)
|
|
53
|
+
- Generator outputs normalized version-insensitively rather than pinning CI deps
|
|
54
|
+
- pytest-asyncio fix rides the next release (dev extras don't affect runtime users)
|
|
55
|
+
</decisions_made>
|
|
56
|
+
|
|
57
|
+
<blockers>
|
|
58
|
+
- None
|
|
59
|
+
</blockers>
|
|
60
|
+
|
|
61
|
+
## Required Reading (in order)
|
|
62
|
+
|
|
63
|
+
1. `.planning/MILESTONES.md` — what v1.0 shipped
|
|
64
|
+
2. `.planning/RETROSPECTIVE.md` — patterns/lessons (display-integrity triple precedent, gate discipline)
|
|
65
|
+
3. `.planning/STATE.md` — current position (Awaiting next milestone)
|
|
66
|
+
|
|
67
|
+
## Infrastructure State
|
|
68
|
+
|
|
69
|
+
- Branch `dev` @ d0682ba pushed; PR #1 open (CI green); tag `v1.0` pushed
|
|
70
|
+
- PyPI: docsif 1.0.0 published (pypi.org/project/docsif/1.0.0/) — twine creds in `~/.pypirc` ([pypi] + [testpypi])
|
|
71
|
+
- CI: Docs Validation green (run 42310044731) — triggers on docs/README/cli/config/scripts/test_docs paths
|
|
72
|
+
- Untracked by intent: `.planning/state.json` (runtime contract state), `.planning/tmp/` (transient)
|
|
73
|
+
|
|
74
|
+
<context>
|
|
75
|
+
Session arc: resume → quality gates → ty debt cleared → docs verified → user directed milestone close with "resolve everything" → 4-phase verification regeneration (with real bug fixes surfaced by each round) → clean closeout → push/PR → CI fix → PyPI release (name collision resolved to docsif) → numpy≥2 verification → dev-extras fix. The release is complete; next session starts fresh at milestone planning.
|
|
76
|
+
</context>
|
|
77
|
+
|
|
78
|
+
<next_action>
|
|
79
|
+
Start with: `/gsd-new-milestone` (or merge PR #1 first if handling the release flow manually).
|
|
80
|
+
</next_action>
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "1.0",
|
|
3
|
+
"timestamp": "2026-11-06T23:17:56.807Z",
|
|
4
|
+
"phase": null,
|
|
5
|
+
"phase_name": null,
|
|
6
|
+
"phase_dir": null,
|
|
7
|
+
"plan": null,
|
|
8
|
+
"task": null,
|
|
9
|
+
"total_tasks": 0,
|
|
10
|
+
"status": "paused",
|
|
11
|
+
"completed_tasks": [
|
|
12
|
+
{"id": 1, "name": "Milestone v1.0 close — verified_closeout (11/11 phases fresh-verified, 31/31 requirements, zero overrides)", "status": "done", "commit": "b63eca1"},
|
|
13
|
+
{"id": 2, "name": "Four stale-verification regenerations (05/06/07/10.1) incl. 5 review criticals fixed along the way", "status": "done", "commit": "92e0150"},
|
|
14
|
+
{"id": 3, "name": "Version 1.0.0 bump + tag v1.0 + archives (milestones/v1.0-*) + RETROSPECTIVE", "status": "done", "commit": "11b8640"},
|
|
15
|
+
{"id": 4, "name": "Push dev + tag; PR #1 dev→main", "status": "done", "commit": "1115409"},
|
|
16
|
+
{"id": 5, "name": "CI Docs Validation fixed (Click 8.5 vs 8.3 generator divergence normalized) — run 42310044731 green", "status": "done", "commit": "1115409"},
|
|
17
|
+
{"id": 6, "name": "PyPI release: docsif 1.0.0 published (sif name taken; docsif is the project's own registered name)", "status": "done"},
|
|
18
|
+
{"id": 7, "name": "numpy>=2 verification: canonical suite 1015 green on numpy 2.3.5; fresh install of PUBLISHED wheel on numpy 2.5.4 → CLI smoke + 974/974 (torch-only module excluded)", "status": "done", "commit": "d0682ba"},
|
|
19
|
+
{"id": 8, "name": "pytest-asyncio declared in dev extras (fresh-install 56-failure root cause; ships next release)", "status": "done", "commit": "d0682ba"}
|
|
20
|
+
],
|
|
21
|
+
"remaining_tasks": [],
|
|
22
|
+
"blockers": [],
|
|
23
|
+
"async_jobs": [],
|
|
24
|
+
"human_actions_pending": [
|
|
25
|
+
{"action": "Merge PR #1 (dev → main)", "context": "CI green, v1.0 tagged and published; merge completes the release flow", "blocking": false},
|
|
26
|
+
{"action": "Optionally remove stale pre-rename skill dirs: rm -rf ~/.claude/skills/docsift-get ~/.claude/skills/docsift-search", "context": "P07-T05: they teach the nonexistent docsift CLI; repo-side sif-* symlinks are correct. Agent home-dir deletion was permission-blocked by design", "blocking": false}
|
|
27
|
+
],
|
|
28
|
+
"decisions": [
|
|
29
|
+
{"decision": "Distribution name = docsif on PyPI", "rationale": "'sif' taken by an unrelated project; docsif is this account's own registered name (0.1.x-0.2.0). Import name and sif console script unchanged", "phase": "release"},
|
|
30
|
+
{"decision": "verified_closeout with zero overrides", "rationale": "User chose 'resolve everything': UAT gap live-verified, ResourceWarnings fixed (17→0 warnings), mypy ledger resolved, then 4 stale phases regenerated to fresh fingerprints", "phase": "close"},
|
|
31
|
+
{"decision": "CLI-reference generator normalized against Click version drift", "rationale": "CI installs unpinned Click (8.5) vs local 8.3: flag defaults (None vs False) and help indentation diverged, failing the drift gate. cleandoc + flag-default canonicalization make output version-insensitive", "phase": "release"},
|
|
32
|
+
{"decision": "pytest-asyncio added to dev extras rather than republishing 1.0.0", "rationale": "dev extras do not affect runtime installs; the gap only breaks fresh contributor envs; ships with the next version", "phase": "release"}
|
|
33
|
+
],
|
|
34
|
+
"uncommitted_files": ["?? .planning/state.json", "?? .planning/tmp/"],
|
|
35
|
+
"next_action": "/gsd-new-milestone to plan the next version (v1.1 candidates: LLM query expansion backlog item, open review ledgers WR-01..10/IN-10..13, version-sync mechanism, arch-generator CI wiring). Or merge PR #1 first.",
|
|
36
|
+
"context_notes": "Milestone v1.0 fully shipped: 11/11 phases verified-closeout, archived under .planning/milestones/v1.0-*, tag v1.0 pushed, docsif 1.0.0 live on PyPI (verified installable with numpy 2.5 + click 8.5 + latest starlette). Known follow-ups live in the phase REVIEW-DISPOSITION ledgers (now in milestones/v1.0-phases/). KNOWN QUIRKS: STATE.md frontmatter progress fields undercount by tool accounting — body is authoritative, do not hand-fix. Fresh-install dev envs now get pytest-asyncio via extras; torch is only in 'all' extras and tests/unit/inference/test_reranker.py needs it directly (skip with --ignore on minimal envs)."
|
|
37
|
+
}
|
|
@@ -3,10 +3,10 @@ gsd_state_version: "1.0"
|
|
|
3
3
|
milestone: v1.0
|
|
4
4
|
status: Awaiting next milestone
|
|
5
5
|
stopped_at: Phase 10.1 complete — all phases complete
|
|
6
|
-
last_updated: "2026-11-
|
|
6
|
+
last_updated: "2026-11-07T03:06:23.417Z"
|
|
7
7
|
last_activity: 2026-11-07
|
|
8
8
|
last_activity_desc: Milestone v1.0 completed and archived
|
|
9
|
-
state_head:
|
|
9
|
+
state_head: c4088cafedd12250e7309ac7eb5768d4e049e138
|
|
10
10
|
progress:
|
|
11
11
|
total_phases: 11
|
|
12
12
|
completed_phases: 11
|
|
@@ -31,7 +31,7 @@ current_phase_name: "Address tech debt: path normalization + review findings CR-
|
|
|
31
31
|
Phase: Milestone v1.0 complete
|
|
32
32
|
Plan: —
|
|
33
33
|
Status: Awaiting next milestone
|
|
34
|
-
Last activity: 2026-11-07
|
|
34
|
+
Last activity: 2026-11-07 - Completed quick task 261107-f5t: Bump version to 1.0.1 (release docsif 1.0.1: typo fixes + parser checksum fix since v1.0)
|
|
35
35
|
|
|
36
36
|
## Phase History
|
|
37
37
|
|
|
@@ -183,6 +183,8 @@ Last activity: 2026-11-07 — Milestone v1.0 completed and archived
|
|
|
183
183
|
|
|
184
184
|
| # | Description | Date | Commit | Directory |
|
|
185
185
|
|---|-------------|------|--------|-----------|
|
|
186
|
+
| 261107-cdh | Fix README.md install typo: docdocsif -> docsif in extras install command | 2026-11-07 | ef8edc2 | [261107-cdh-fix-readme-md-install-typo-docdocsif-doc](./quick/261107-cdh-fix-readme-md-install-typo-docdocsif-doc/) |
|
|
187
|
+
| 261107-f5t | Bump version to 1.0.1 (release docsif 1.0.1: typo fixes + parser checksum fix since v1.0) | 2026-11-07 | c4088ca | [261107-f5t-bump-version-to-1-0-1-release-docsif-1-0](./quick/261107-f5t-bump-version-to-1-0-1-release-docsif-1-0/) |
|
|
186
188
|
|
|
187
189
|
### Overrides
|
|
188
190
|
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"contract": "1.0.0",
|
|
3
|
+
"flavor": "core",
|
|
4
|
+
"milestone": "v1.1",
|
|
5
|
+
"phases": [],
|
|
6
|
+
"next": {
|
|
7
|
+
"command": "/gsd-discuss-phase",
|
|
8
|
+
"label": "Discuss the first phase",
|
|
9
|
+
"reason": "Project initialized — plan your first phase"
|
|
10
|
+
},
|
|
11
|
+
"updated_at": "2026-11-07T03:33:49.905Z"
|
|
12
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: docsif
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.1
|
|
4
4
|
Summary: DocSIF - Local hybrid search engine for personal knowledge bases
|
|
5
5
|
Project-URL: Homepage, https://github.com/zhangtaolab/sif
|
|
6
6
|
Project-URL: Documentation, https://sif.readthedocs.io
|
|
@@ -38,6 +38,7 @@ Requires-Dist: openai>=2.0.0; extra == 'all'
|
|
|
38
38
|
Requires-Dist: sentence-transformers>=2.2.0; extra == 'all'
|
|
39
39
|
Provides-Extra: dev
|
|
40
40
|
Requires-Dist: black>=23.0.0; extra == 'dev'
|
|
41
|
+
Requires-Dist: pytest-asyncio>=0.23.0; extra == 'dev'
|
|
41
42
|
Requires-Dist: pytest-cov>=4.0.0; extra == 'dev'
|
|
42
43
|
Requires-Dist: pytest>=7.0.0; extra == 'dev'
|
|
43
44
|
Requires-Dist: ruff>=0.1.0; extra == 'dev'
|
|
@@ -86,7 +87,7 @@ pip install docsif
|
|
|
86
87
|
For full functionality including embeddings:
|
|
87
88
|
|
|
88
89
|
```bash
|
|
89
|
-
pip install "
|
|
90
|
+
pip install "docsif[all]"
|
|
90
91
|
```
|
|
91
92
|
|
|
92
93
|
### Basic Usage
|
|
@@ -35,6 +35,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
35
35
|
### Security
|
|
36
36
|
- N/A
|
|
37
37
|
|
|
38
|
+
## [1.0.1] - 2026-11-07
|
|
39
|
+
|
|
40
|
+
### Fixed
|
|
41
|
+
- Install-command typo fix: corrected the extras install command package name (docdocsif to docsif) in README.md and docs (quick task 261107-cdh, commit 2429c09)
|
|
42
|
+
- Parser checksum fix: `sif index update` now compares body-hash checksums so unchanged documents are correctly detected and skipped instead of being re-indexed (commit f1f4b30)
|
|
43
|
+
|
|
38
44
|
## [0.1.0] - 2024-01-20
|
|
39
45
|
|
|
40
46
|
### Added
|
|
@@ -224,3 +230,4 @@ Thanks to all contributors who have helped shape SIF!
|
|
|
224
230
|
|
|
225
231
|
[Unreleased]: https://github.com/zhangtaolab/sif/compare/v0.1.0...HEAD
|
|
226
232
|
[0.1.0]: https://github.com/zhangtaolab/sif/releases/tag/v0.1.0
|
|
233
|
+
[1.0.1]: https://github.com/zhangtaolab/sif/releases/tag/v1.0.1
|
|
@@ -20,7 +20,7 @@ pip install docsif
|
|
|
20
20
|
For full functionality including embeddings:
|
|
21
21
|
|
|
22
22
|
```bash
|
|
23
|
-
pip install "
|
|
23
|
+
pip install "docsif[all]"
|
|
24
24
|
```
|
|
25
25
|
|
|
26
26
|
### Method 2: Install from Source
|
|
@@ -57,7 +57,7 @@ SIF has several optional dependency groups:
|
|
|
57
57
|
For vector search functionality:
|
|
58
58
|
|
|
59
59
|
```bash
|
|
60
|
-
pip install "
|
|
60
|
+
pip install "docsif[embed]"
|
|
61
61
|
```
|
|
62
62
|
|
|
63
63
|
This installs:
|
|
@@ -71,7 +71,7 @@ With this extra installed, the local embedding backends pick their compute devic
|
|
|
71
71
|
For contributing to SIF:
|
|
72
72
|
|
|
73
73
|
```bash
|
|
74
|
-
pip install "
|
|
74
|
+
pip install "docsif[dev]"
|
|
75
75
|
```
|
|
76
76
|
|
|
77
77
|
This installs:
|
|
@@ -86,7 +86,7 @@ This installs:
|
|
|
86
86
|
To install everything:
|
|
87
87
|
|
|
88
88
|
```bash
|
|
89
|
-
pip install "
|
|
89
|
+
pip install "docsif[all]"
|
|
90
90
|
```
|
|
91
91
|
|
|
92
92
|
## Platform-Specific Instructions
|
|
@@ -145,7 +145,7 @@ sif --help
|
|
|
145
145
|
|
|
146
146
|
Expected output:
|
|
147
147
|
```
|
|
148
|
-
sif, version 1.0.
|
|
148
|
+
sif, version 1.0.1
|
|
149
149
|
|
|
150
150
|
Usage: sif [OPTIONS] COMMAND [ARGS]...
|
|
151
151
|
|
|
@@ -13,7 +13,7 @@ pip install docsif
|
|
|
13
13
|
For full functionality including embeddings:
|
|
14
14
|
|
|
15
15
|
```bash
|
|
16
|
-
pip install "
|
|
16
|
+
pip install "docsif[all]"
|
|
17
17
|
```
|
|
18
18
|
|
|
19
19
|
Verify installation:
|
|
@@ -465,9 +465,9 @@ Optional, depending on which features you plan to use:
|
|
|
465
465
|
search, install one of the extras:
|
|
466
466
|
|
|
467
467
|
```bash
|
|
468
|
-
pip install "
|
|
468
|
+
pip install "docsif[embed]" # sentence-transformers and modelscope backends
|
|
469
469
|
# or
|
|
470
|
-
pip install "
|
|
470
|
+
pip install "docsif[all]" # adds GGUF (llama-cpp-python) and OpenAI API support
|
|
471
471
|
```
|
|
472
472
|
|
|
473
473
|
The first `sif index embed` run downloads the default embedding model
|
|
@@ -30,11 +30,7 @@ Pytest is configured in the `[tool.pytest.ini_options]` section of `pyproject.to
|
|
|
30
30
|
|
|
31
31
|
Because coverage flags are in `addopts`, they apply to every `pytest` invocation — including `make test-fast` (see below). Append `--no-cov` to any command to skip coverage.
|
|
32
32
|
|
|
33
|
-
**Async tests:** the MCP tests in `tests/unit/mcp/` use `@pytest.mark.asyncio` and require the `pytest-asyncio` plugin
|
|
34
|
-
|
|
35
|
-
```bash
|
|
36
|
-
pip install pytest-asyncio
|
|
37
|
-
```
|
|
33
|
+
**Async tests:** the MCP tests in `tests/unit/mcp/` use `@pytest.mark.asyncio` and require the `pytest-asyncio` plugin, which is included in the `dev` extras (`pip install -e ".[dev]"` covers it).
|
|
38
34
|
|
|
39
35
|
## Running tests
|
|
40
36
|
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "docsif"
|
|
7
|
-
version = "1.0.
|
|
7
|
+
version = "1.0.1"
|
|
8
8
|
description = "DocSIF - Local hybrid search engine for personal knowledge bases"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = {text = "MIT"}
|
|
@@ -43,6 +43,7 @@ dependencies = [
|
|
|
43
43
|
dev = [
|
|
44
44
|
"pytest>=7.0.0",
|
|
45
45
|
"pytest-cov>=4.0.0",
|
|
46
|
+
"pytest-asyncio>=0.23.0",
|
|
46
47
|
"black>=23.0.0",
|
|
47
48
|
"ruff>=0.1.0",
|
|
48
49
|
"ty>=0.0.1",
|
|
@@ -5,7 +5,7 @@ A powerful CLI tool for managing document collections, indexing content,
|
|
|
5
5
|
and performing intelligent searches using both keyword and vector-based approaches.
|
|
6
6
|
"""
|
|
7
7
|
|
|
8
|
-
__version__ = "0.1
|
|
8
|
+
__version__ = "1.0.1"
|
|
9
9
|
__author__ = "SIF Team"
|
|
10
10
|
|
|
11
11
|
__all__ = ["__version__", "cli"]
|
|
@@ -167,6 +167,10 @@ def update_cmd(ctx: click.Context, collection: str | None, force: bool) -> None:
|
|
|
167
167
|
existing.title = parsed.title
|
|
168
168
|
existing.metadata = parsed.metadata
|
|
169
169
|
existing.mtime = parsed.mtime
|
|
170
|
+
# Persist the fresh checksum, or the next update run
|
|
171
|
+
# compares the new content against the pre-edit hash
|
|
172
|
+
# and rewrites this document again every run.
|
|
173
|
+
existing.checksum = parsed.checksum
|
|
170
174
|
doc_repo.update(existing)
|
|
171
175
|
total_updated += 1
|
|
172
176
|
else:
|
|
@@ -63,8 +63,12 @@ class MarkdownParser:
|
|
|
63
63
|
match = self.title_pattern.search(body)
|
|
64
64
|
title = match.group(1).strip() if match else file_path.stem
|
|
65
65
|
|
|
66
|
-
# Calculate checksum
|
|
67
|
-
|
|
66
|
+
# Calculate checksum over the body (frontmatter stripped), matching the
|
|
67
|
+
# storage convention: the create path stores sha256 of Document.content
|
|
68
|
+
# (the body, see core.models.Document.__post_init__), so comparing
|
|
69
|
+
# against a whole-file hash never matches and every document is
|
|
70
|
+
# misreported as changed on `index update`.
|
|
71
|
+
checksum = hashlib.sha256(body.encode()).hexdigest()
|
|
68
72
|
|
|
69
73
|
return ParsedDocument(
|
|
70
74
|
path=str(file_path.resolve()),
|
|
@@ -111,7 +111,7 @@ class InitializeResult(BaseModel):
|
|
|
111
111
|
protocolVersion: str = "2024-11-05" # noqa: N815
|
|
112
112
|
capabilities: ServerCapabilities = Field(default_factory=ServerCapabilities)
|
|
113
113
|
serverInfo: dict[str, str] = Field( # noqa: N815
|
|
114
|
-
default_factory=lambda: {"name": "sif-mcp-server", "version": "1.0.
|
|
114
|
+
default_factory=lambda: {"name": "sif-mcp-server", "version": "1.0.1"},
|
|
115
115
|
)
|
|
116
116
|
|
|
117
117
|
|
|
@@ -8,6 +8,7 @@ historical run (the observed 21-rows-vs-3-chunks, document-times-7 symptom).
|
|
|
8
8
|
|
|
9
9
|
from __future__ import annotations
|
|
10
10
|
|
|
11
|
+
import hashlib
|
|
11
12
|
import sqlite3
|
|
12
13
|
from pathlib import Path
|
|
13
14
|
from unittest.mock import MagicMock, patch
|
|
@@ -514,3 +515,91 @@ class TestPerCollectionTransaction:
|
|
|
514
515
|
finally:
|
|
515
516
|
conn.close()
|
|
516
517
|
assert coll_names == {"a-good"}
|
|
518
|
+
|
|
519
|
+
|
|
520
|
+
class TestUpdateChecksumIdempotency:
|
|
521
|
+
"""Zero-change `sif index update` must report 0 updated (t_66218b67).
|
|
522
|
+
|
|
523
|
+
Before the fix the update path compared stored checksums (sha256 of the
|
|
524
|
+
body) against whole-file hashes, so every existing document was rewritten
|
|
525
|
+
every run (chunks/embeddings dropped + FTS rebuild). Persisting the fresh
|
|
526
|
+
checksum on the update branch is equally load-bearing: without it a
|
|
527
|
+
changed document would oscillate as "updated" on every later run.
|
|
528
|
+
"""
|
|
529
|
+
|
|
530
|
+
BODY = "# Note\n\n" + ("Stable paragraph text. " * 100)
|
|
531
|
+
|
|
532
|
+
def _seed_note(self, db_path: Path, settings: Settings, notes_dir: Path) -> Path:
|
|
533
|
+
from sif.core.models import Collection, Document
|
|
534
|
+
from sif.database.database import Database
|
|
535
|
+
from sif.database.repositories import CollectionRepository, DocumentRepository
|
|
536
|
+
|
|
537
|
+
notes_dir.mkdir(parents=True, exist_ok=True)
|
|
538
|
+
doc_file = notes_dir / "a.md"
|
|
539
|
+
doc_file.write_text(self.BODY, encoding="utf-8")
|
|
540
|
+
db = Database(db_path)
|
|
541
|
+
with patch("sif.config.settings.get_settings", return_value=settings):
|
|
542
|
+
db.init_schema()
|
|
543
|
+
with db.connection:
|
|
544
|
+
coll_repo = CollectionRepository(db.connection)
|
|
545
|
+
doc_repo = DocumentRepository(db.connection)
|
|
546
|
+
coll = Collection(name="notes", path=str(notes_dir))
|
|
547
|
+
coll_repo.create(coll)
|
|
548
|
+
doc_repo.create(
|
|
549
|
+
Document(
|
|
550
|
+
path=str(doc_file),
|
|
551
|
+
collection_id=coll.id,
|
|
552
|
+
content=self.BODY,
|
|
553
|
+
title="A",
|
|
554
|
+
)
|
|
555
|
+
)
|
|
556
|
+
db.close()
|
|
557
|
+
return doc_file
|
|
558
|
+
|
|
559
|
+
def test_zero_change_rerun_reports_zero_updated(
|
|
560
|
+
self,
|
|
561
|
+
tmp_path: Path,
|
|
562
|
+
monkeypatch,
|
|
563
|
+
) -> None:
|
|
564
|
+
_delenv_settings_vars(monkeypatch)
|
|
565
|
+
db_path = tmp_path / "update.db"
|
|
566
|
+
settings = _test_settings()
|
|
567
|
+
notes = tmp_path / "notes"
|
|
568
|
+
self._seed_note(db_path, settings, notes)
|
|
569
|
+
|
|
570
|
+
# Cycle 1: index the note, then embed to fill chunks/embeddings.
|
|
571
|
+
assert _invoke_update(db_path, settings, []).exit_code == 0
|
|
572
|
+
manager, _vector_log = _make_manager_mock()
|
|
573
|
+
assert _invoke_embed(db_path, manager, settings, []).exit_code == 0
|
|
574
|
+
emb1, chunks1, emb_ids1, chunk_ids1 = _store_state(db_path)
|
|
575
|
+
assert emb1 == chunks1
|
|
576
|
+
assert emb1 > 0
|
|
577
|
+
|
|
578
|
+
# Cycle 2: files untouched -> the unchanged short-circuit fires:
|
|
579
|
+
# nothing is rewritten and no chunks/embeddings are destroyed.
|
|
580
|
+
result = _invoke_update(db_path, settings, [])
|
|
581
|
+
assert result.exit_code == 0
|
|
582
|
+
assert "Updated: 0" in result.output
|
|
583
|
+
assert _store_state(db_path) == (emb1, chunks1, emb_ids1, chunk_ids1)
|
|
584
|
+
|
|
585
|
+
# Cycle 3: a real edit is still detected...
|
|
586
|
+
doc_file = notes / "a.md"
|
|
587
|
+
doc_file.write_text(self.BODY.replace("Stable", "Edited"), encoding="utf-8")
|
|
588
|
+
result = _invoke_update(db_path, settings, [])
|
|
589
|
+
assert result.exit_code == 0
|
|
590
|
+
assert "Updated: 1" in result.output
|
|
591
|
+
|
|
592
|
+
# ...and the fresh checksum is persisted, so the next run converges
|
|
593
|
+
# instead of rewriting the same document again.
|
|
594
|
+
conn = sqlite3.connect(str(db_path))
|
|
595
|
+
try:
|
|
596
|
+
stored_cs, stored_content = conn.execute(
|
|
597
|
+
"SELECT checksum, content FROM documents"
|
|
598
|
+
).fetchone()
|
|
599
|
+
finally:
|
|
600
|
+
conn.close()
|
|
601
|
+
assert stored_cs == hashlib.sha256(stored_content.encode()).hexdigest()
|
|
602
|
+
assert "Edited paragraph text" in stored_content
|
|
603
|
+
result = _invoke_update(db_path, settings, [])
|
|
604
|
+
assert result.exit_code == 0
|
|
605
|
+
assert "Updated: 0" in result.output
|
|
@@ -27,10 +27,15 @@ class TestDocumentParsers:
|
|
|
27
27
|
result = parser.parse(file_path)
|
|
28
28
|
|
|
29
29
|
assert result.path == str(file_path.resolve())
|
|
30
|
-
assert result.content == "# 搜索 🔍\n\n你好世界 Café é"
|
|
31
30
|
assert result.title == "本地知识库"
|
|
32
31
|
assert result.metadata == {"title": "本地知识库", "author": "测试"}
|
|
33
|
-
|
|
32
|
+
# Checksum covers the parsed body (frontmatter stripped, trailing
|
|
33
|
+
# whitespace rstripped), matching the storage convention in
|
|
34
|
+
# core.models.Document.__post_init__ — hashing the whole raw file would
|
|
35
|
+
# make every stored checksum disagree with the create path and force a
|
|
36
|
+
# full-library rewrite on every `index update`.
|
|
37
|
+
assert not result.content.startswith("---")
|
|
38
|
+
assert result.checksum == hashlib.sha256(result.content.encode("utf-8")).hexdigest()
|
|
34
39
|
assert result.mtime == file_path.stat().st_mtime
|
|
35
40
|
|
|
36
41
|
@pytest.mark.parametrize(
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"""Unit tests for MarkdownParser checksum convention (t_66218b67).
|
|
2
|
+
|
|
3
|
+
The parser must hash the frontmatter-stripped body — the same convention the
|
|
4
|
+
storage path uses (core.models.Document hashes Document.content, which is the
|
|
5
|
+
body). Hashing the whole file makes the two conventions incomparable and
|
|
6
|
+
misreports every document as changed on `sif index update`.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
import hashlib
|
|
12
|
+
from pathlib import Path
|
|
13
|
+
|
|
14
|
+
from sif.indexing.parser import MarkdownParser
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
DOC_WITH_FM = (
|
|
18
|
+
'---\ntitle: "Probe"\nauthor: "T"\ntags: [a, b]\n---\n\n# Probe\n\nBody paragraph text.\n'
|
|
19
|
+
)
|
|
20
|
+
DOC_NO_FM = "# No Frontmatter\n\nPlain body text.\n"
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def test_checksum_covers_body_not_frontmatter(tmp_path: Path) -> None:
|
|
24
|
+
"""Checksum equals sha256(stored body); frontmatter-only edits keep it."""
|
|
25
|
+
parser = MarkdownParser()
|
|
26
|
+
doc_file = tmp_path / "a.md"
|
|
27
|
+
doc_file.write_text(DOC_WITH_FM, encoding="utf-8")
|
|
28
|
+
|
|
29
|
+
parsed = parser.parse(doc_file)
|
|
30
|
+
|
|
31
|
+
# The convention under test: checksum = sha256 of the content SIF stores
|
|
32
|
+
# (the body), NOT sha256 of the raw file.
|
|
33
|
+
assert parsed.checksum == hashlib.sha256(parsed.content.encode()).hexdigest()
|
|
34
|
+
assert parsed.checksum != hashlib.sha256(DOC_WITH_FM.encode()).hexdigest()
|
|
35
|
+
|
|
36
|
+
# A frontmatter-only edit must not change the checksum (metadata refresh
|
|
37
|
+
# alone never triggers a full document rewrite).
|
|
38
|
+
doc_file.write_text(
|
|
39
|
+
DOC_WITH_FM.replace('author: "T"', 'author: "Someone Else"'), encoding="utf-8"
|
|
40
|
+
)
|
|
41
|
+
reparsed = parser.parse(doc_file)
|
|
42
|
+
assert reparsed.checksum == parsed.checksum
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def test_checksum_without_frontmatter_hashes_content(tmp_path: Path) -> None:
|
|
46
|
+
"""No frontmatter -> checksum covers exactly what SIF stores (the body)."""
|
|
47
|
+
parser = MarkdownParser()
|
|
48
|
+
doc_file = tmp_path / "b.md"
|
|
49
|
+
doc_file.write_text(DOC_NO_FM, encoding="utf-8")
|
|
50
|
+
|
|
51
|
+
parsed = parser.parse(doc_file)
|
|
52
|
+
# python-frontmatter strips only the trailing newline when no FM exists;
|
|
53
|
+
# the checksum must match the stored body either way.
|
|
54
|
+
assert parsed.content.rstrip("\n") == DOC_NO_FM.rstrip("\n")
|
|
55
|
+
assert parsed.checksum == hashlib.sha256(parsed.content.encode()).hexdigest()
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def test_checksum_changes_with_body_edit(tmp_path: Path) -> None:
|
|
59
|
+
"""A body edit does change the checksum (change detection stays intact)."""
|
|
60
|
+
parser = MarkdownParser()
|
|
61
|
+
doc_file = tmp_path / "c.md"
|
|
62
|
+
doc_file.write_text(DOC_WITH_FM, encoding="utf-8")
|
|
63
|
+
before = parser.parse(doc_file).checksum
|
|
64
|
+
|
|
65
|
+
doc_file.write_text(
|
|
66
|
+
DOC_WITH_FM.replace("Body paragraph text.", "Edited paragraph text."),
|
|
67
|
+
encoding="utf-8",
|
|
68
|
+
)
|
|
69
|
+
after = parser.parse(doc_file).checksum
|
|
70
|
+
assert before != after
|
|
File without changes
|