zettelforge 2.4.1__tar.gz → 2.4.2__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.
- {zettelforge-2.4.1 → zettelforge-2.4.2}/CHANGELOG.md +55 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/PKG-INFO +1 -1
- zettelforge-2.4.2/docs/rfcs/RFC-009-enrichment-pipeline-v2.md +674 -0
- zettelforge-2.4.2/docs/rfcs/RFC-010-enrichment-hotfix.md +115 -0
- zettelforge-2.4.2/docs/superpowers/research/2026-04-24-phase-0.5-attribution-prelim.md +120 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/pyproject.toml +1 -1
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/consolidation.py +19 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/llm_providers/ollama_provider.py +15 -2
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/memory_manager.py +29 -2
- {zettelforge-2.4.1 → zettelforge-2.4.2}/tests/test_consolidation.py +30 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/tests/test_llm_providers.py +18 -3
- {zettelforge-2.4.1 → zettelforge-2.4.2}/tests/test_logging_compliance.py +69 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/.github/CODEOWNERS +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/.github/SECURITY.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/.github/dependabot.yml +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/.github/pull_request_template.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/.github/workflows/ci.yml +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/.github/workflows/docs.yml +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/.github/workflows/publish.yml +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/.github/workflows/snyk-security.yml +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/.gitignore +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/ARCHITECTURE.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/CODEOWNERS +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/CODE_OF_CONDUCT.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/CONTRIBUTING.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/Dockerfile +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/GOVERNANCE.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/LICENSE +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/MANIFEST.in +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/README.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/SECURITY.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/benchmarks/BENCHMARK_REPORT.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/benchmarks/LOCOMO_BENCHMARK_COMPARISON.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/benchmarks/auto_ralph.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/benchmarks/benchmark_harness.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/benchmarks/cti_benchmark_v2.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/benchmarks/cti_retrieval_benchmark.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/benchmarks/cti_retrieval_results.json +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/benchmarks/cti_v2_results.json +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/benchmarks/ctibench_benchmark.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/benchmarks/ctibench_results.json +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/benchmarks/dataset.json +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/benchmarks/enterprise-attack.json +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/benchmarks/evolve_benchmark.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/benchmarks/evolve_results.json +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/benchmarks/graph_test.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/benchmarks/locomo_benchmark.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/benchmarks/locomo_results.json +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/benchmarks/locomo_results_v1.3.0_baseline.json +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/benchmarks/memoryagentbench.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/benchmarks/memoryagentbench_results.json +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/benchmarks/mempalace_benchmark.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/benchmarks/mempalace_results.json +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/benchmarks/naive_memory.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/benchmarks/opencti_benchmark.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/benchmarks/ragas_benchmark.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/benchmarks/ragas_cti_results.json +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/benchmarks/ragas_results.json +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/benchmarks/results/benchmark_report.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/benchmarks/results/ralph_optimization_log.json +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/benchmarks/scale_benchmark.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/benchmarks/scale_results.json +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/config.default.yaml +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/config.example.yaml +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docker/docker-compose.yml +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/.well-known/security.txt +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/CNAME +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/architecture-diagram.mmd +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/archive/PACKAGE_SUMMARY.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/archive/README.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/archive/SKILL.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/assets/ZettelForge_Architecture.mmd +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/assets/architecture-overview.mmd +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/assets/architecture-read-path.mmd +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/assets/architecture-write-path.mmd +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/assets/cf-analytics.js +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/assets/demo.gif +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/assets/favicon-16.png +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/assets/favicon-32.png +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/assets/favicon-512.png +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/assets/favicon-64.png +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/assets/favicon-apple-touch.png +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/assets/favicon-old.svg +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/assets/favicon.svg +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/assets/logo.svg +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/assets/social-preview.png +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/assets/threatrecall-lockup-monogram.svg +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/assets/threatrecall-lockup.svg +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/assets/threatrecall-logo-flat.svg +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/assets/threatrecall-logo-philosophy.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/assets/threatrecall-logo.png +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/assets/threatrecall-mark.png +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/assets/zettelforge_architecture-light.svg +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/assets/zettelforge_architecture.svg +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/brand/brandIdentity.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/brand/colors_and_type.css +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/explanation/architecture.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/explanation/epistemic-tiers.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/explanation/stix-in-zettelforge.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/explanation/two-phase-pipeline.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/explanation/zettelkasten-philosophy.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/how-to/configure-lancedb.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/how-to/configure-opencti.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/how-to/configure-typedb.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/how-to/ingest-news-report.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/how-to/integrate-llm-agent.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/how-to/migrate-jsonl-to-sqlite.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/how-to/query-apt-tools.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/how-to/reproduce-benchmarks.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/how-to/resolve-aliases.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/how-to/run-temporal-query.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/how-to/store-threat-actor.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/how-to/troubleshoot.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/how-to/upgrade.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/human-evaluation-rubric.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/index.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/llms.txt +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/narrative/2026-04-16-the-memory-problem.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/overrides/main.html +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/reference/architecture-deep-dive.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/reference/configuration.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/reference/governance-controls.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/reference/memory-manager-api.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/reference/module-inventory.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/reference/retrieval-policies.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/reference/stix-schema.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/rfcs/RFC-001-conversational-entity-extractor.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/rfcs/RFC-002-universal-llm-provider.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/rfcs/RFC-003-adversarial-review.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/rfcs/RFC-003-read-path-depth-routing.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/rfcs/RFC-007-operational-telemetry.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/stylesheets/brand-tokens.css +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/stylesheets/extra.css +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/stylesheets/fonts/Neuropol.otf +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/superpowers/research/2026-04-09-ctibench-ragas-benchmarks.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/superpowers/research/2026-04-09-fastembed-local-embeddings.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/superpowers/research/2026-04-09-hybrid-typedb-lancedb-architecture.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/superpowers/research/2026-04-09-local-llm-llama-cpp.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/superpowers/research/2026-04-15-anti-aversion-cleanup.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/superpowers/research/2026-04-15-causal-graph.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/superpowers/research/2026-04-15-ctibench-ate-fix.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/superpowers/research/2026-04-15-format-stability.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/superpowers/research/2026-04-15-memory-evolution.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/superpowers/research/2026-04-15-merge-consolidation.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/superpowers/research/2026-04-15-persistence-semantics.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/superpowers/research/2026-04-15-sqlite-migration.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/superpowers/research/2026-04-17-test-suite-audit.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/superpowers/research/README.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/superpowers/specs/2026-04-15-p1-features-prd.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/tutorials/01-quickstart.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/docs/tutorials/02-first-cti-report.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/examples/athf_bridge.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/examples/mcp_claude_code.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/examples/quickstart.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/governance/controls.yaml +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/mkdocs.yml +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/scripts/migrate_jsonl_to_sqlite.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/scripts/rebuild_index.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/scripts/record-demo.sh +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/scripts/typedb-setup.sh +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/scripts/zettelforge-rebuild.service +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/scripts/zettelforge-rebuild.timer +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/server.json +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/skills/claude-code-skill.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/skills/openclaw-skill.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/__init__.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/__main__.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/alias_resolver.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/backend_factory.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/blended_retriever.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/cache.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/config.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/demo.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/detection/__init__.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/detection/base.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/detection/consumers.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/detection/explainer.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/edition.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/entity_indexer.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/extensions.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/fact_extractor.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/governance_validator.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/graph_retriever.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/integrations/__init__.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/integrations/langchain_retriever.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/intent_classifier.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/json_parse.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/knowledge_graph.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/llm_client.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/llm_providers/__init__.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/llm_providers/base.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/llm_providers/local_provider.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/llm_providers/mock_provider.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/llm_providers/registry.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/log.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/mcp/__init__.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/mcp/__main__.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/mcp/server.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/memory_evolver.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/memory_store.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/memory_updater.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/note_constructor.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/note_schema.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/observability.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/ocsf.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/ontology.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/retry.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/scripts/human_eval_sampler.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/scripts/telemetry_aggregator.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/scripts/telemetry_dashboard.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/sigma/__init__.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/sigma/cli.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/sigma/entities.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/sigma/ingest.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/sigma/parser.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/sigma/schemas/NOTICE.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/sigma/schemas/__init__.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/sigma/schemas/sigma-correlation-rules-schema.json +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/sigma/schemas/sigma-detection-rule-schema.json +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/sigma/schemas/sigma-filters-schema.json +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/sigma/tags.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/sqlite_backend.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/storage_backend.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/synthesis_generator.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/synthesis_validator.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/telemetry.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/vector_memory.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/vector_retriever.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/yara/__init__.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/yara/cccs_metadata.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/yara/cli.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/yara/entities.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/yara/ingest.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/yara/parser.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/yara/schemas/CCCS_YARA.yml +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/yara/schemas/CCCS_YARA_values.yml +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/yara/schemas/NOTICE.md +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/yara/schemas/__init__.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/src/zettelforge/yara/tags.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/tests/__init__.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/tests/benchmark_scale.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/tests/conftest.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/tests/fixtures/sigma/cloud_example.yml +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/tests/fixtures/sigma/correlation_example.yml +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/tests/fixtures/sigma/process_creation_example.yml +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/tests/fixtures/sigma/tagged_example.yml +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/tests/fixtures/yara/malware_hash.yar +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/tests/fixtures/yara/technique_loader.yar +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/tests/fixtures/yara/webshell.yar +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/tests/test_basic.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/tests/test_blended_retriever.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/tests/test_causal_extraction.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/tests/test_config.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/tests/test_conversational_entities.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/tests/test_core.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/tests/test_cti_integration.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/tests/test_detection_explainer.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/tests/test_detection_rule_entities.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/tests/test_edition.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/tests/test_embedding.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/tests/test_extensions.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/tests/test_fact_extractor.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/tests/test_governance.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/tests/test_governance_spec_drift.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/tests/test_graph_retriever.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/tests/test_human_eval_sampler.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/tests/test_intent_classifier.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/tests/test_json_parse.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/tests/test_langchain_retriever.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/tests/test_llm_client.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/tests/test_mcp_server.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/tests/test_memory_evolver.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/tests/test_memory_updater.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/tests/test_performance.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/tests/test_recall_integration.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/tests/test_sigma_entities.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/tests/test_sigma_ingest.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/tests/test_sigma_parser.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/tests/test_sqlite_backend.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/tests/test_sqlite_integration.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/tests/test_storage_backend.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/tests/test_telemetry_aggregator.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/tests/test_telemetry_collector.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/tests/test_telemetry_dashboard.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/tests/test_telemetry_integration.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/tests/test_temporal_graph.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/tests/test_two_phase_e2e.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/tests/test_typedb_client.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/tests/test_yara_entities.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/tests/test_yara_ingest.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/tests/test_yara_parser.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/web/app.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/web/auth.py +0 -0
- {zettelforge-2.4.1 → zettelforge-2.4.2}/web/mcp_server.py +0 -0
|
@@ -6,6 +6,61 @@ Versioning follows [Semantic Versioning](https://semver.org/).
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [2.4.2] - 2026-04-24
|
|
10
|
+
|
|
11
|
+
Patch release bundling the RFC-010 enrichment-pipeline hotfix with the
|
|
12
|
+
RFC-009 Phase 0.5 latency-attribution instrumentation. Response to the
|
|
13
|
+
2026-04-24 Vigil telemetry audit.
|
|
14
|
+
|
|
15
|
+
### Fixed
|
|
16
|
+
|
|
17
|
+
- **RFC-010 hotfix — `OllamaProvider` timeout plumbing** (#88). The
|
|
18
|
+
constructor's `**_: Any` absorbed the configured `timeout` kwarg, so
|
|
19
|
+
`ollama.Client(host=...)` was built with no timeout and `remember()`
|
|
20
|
+
could hang up to 66.5s on a slow backend. `timeout` is now a
|
|
21
|
+
first-class parameter (default 60.0s) threaded through to the client.
|
|
22
|
+
- **RFC-010 hotfix — consolidation shutdown race** (#88). A third
|
|
23
|
+
`iterate_notes()` site at `consolidation.py:224` was not covered by
|
|
24
|
+
PR #84's two-site guard. Added a two-layer defense: fast-path
|
|
25
|
+
`_accepting` pre-check plus a narrow `BackendClosedError` catch on
|
|
26
|
+
the iterator itself. Clean skip instead of `consolidation_failed`
|
|
27
|
+
log noise during `atexit`.
|
|
28
|
+
|
|
29
|
+
### Added
|
|
30
|
+
|
|
31
|
+
- **RFC-009 Phase 0.5 — per-phase timers in `remember()`** (#90).
|
|
32
|
+
`memory_manager.remember()` now wraps each direct-store phase
|
|
33
|
+
(`construct`, `write_note`, `lance_index`, `entity_index`,
|
|
34
|
+
`consolidation_observe`, `supersession`, `kg_update`,
|
|
35
|
+
`enrichment_dispatch`) in `time.perf_counter()` and emits the
|
|
36
|
+
breakdown inside the existing `ocsf_api_activity` event as
|
|
37
|
+
`phase_timings_ms`. Pure observability. Enables Vigil-side latency
|
|
38
|
+
attribution without host-side profilers, which do not apply to a
|
|
39
|
+
library-per-turn deployment. `enrichment_dispatch` is intentionally
|
|
40
|
+
skipped in `sync=True` runs so inline LLM work cannot corrupt the
|
|
41
|
+
dispatch bucket.
|
|
42
|
+
- **Phase 0.5 preliminary attribution artifact** (#91) —
|
|
43
|
+
`docs/superpowers/research/2026-04-24-phase-0.5-attribution-prelim.md`.
|
|
44
|
+
Analyses 961 real `remember()` calls from Vigil's v2.4.1 OCSF log
|
|
45
|
+
and finds **98.4% of `remember()` wall-clock is one LanceDB `Update`
|
|
46
|
+
on the `notes_cti` shard**, which has 7,356 uncompacted fragments
|
|
47
|
+
versus 458 on the healthy `notes_general` shard. Reshapes RFC-009's
|
|
48
|
+
Phase 1–6 priority ordering: those phases target the LLM / queue /
|
|
49
|
+
consolidation paths, which are not what drives the 5.7s average.
|
|
50
|
+
To be refined or falsified with `phase_timings_ms` data from this
|
|
51
|
+
release.
|
|
52
|
+
|
|
53
|
+
### Does NOT address
|
|
54
|
+
|
|
55
|
+
- The ~2,329 enrichment-job drops/day are still present. Those are
|
|
56
|
+
caused by HTTP 200 + empty Ollama responses (Ollama returns
|
|
57
|
+
successfully but with no parseable body), not by hangs — RFC-010's
|
|
58
|
+
timeout fix does not touch them. The durable outbox + circuit
|
|
59
|
+
breaker in RFC-009 Phases 1–3 (v2.5.0) is the real fix.
|
|
60
|
+
- LanceDB fragment accumulation on `notes_cti` is identified here but
|
|
61
|
+
not fixed here. RFC-009 is being revised to add periodic compaction
|
|
62
|
+
to Phase 1 scope.
|
|
63
|
+
|
|
9
64
|
## [2.4.1] - 2026-04-24
|
|
10
65
|
|
|
11
66
|
Operational telemetry (RFC-007), TypeDB authentication hardening, and a
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: zettelforge
|
|
3
|
-
Version: 2.4.
|
|
3
|
+
Version: 2.4.2
|
|
4
4
|
Summary: ZettelForge: Agentic Memory System with vector search, knowledge graph, and synthesis
|
|
5
5
|
Project-URL: Homepage, https://github.com/rolandpg/zettelforge
|
|
6
6
|
Project-URL: Documentation, https://docs.threatrecall.ai
|