contexta 0.1.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.
- contexta-0.1.1/.gitignore +15 -0
- contexta-0.1.1/CONTRIBUTING.md +337 -0
- contexta-0.1.1/LICENSE +21 -0
- contexta-0.1.1/PKG-INFO +234 -0
- contexta-0.1.1/README.md +185 -0
- contexta-0.1.1/SECURITY.md +60 -0
- contexta-0.1.1/docs/faq.md +71 -0
- contexta-0.1.1/docs/index.md +160 -0
- contexta-0.1.1/docs/ko/SECURITY.md +55 -0
- contexta-0.1.1/docs/ko/faq.md +71 -0
- contexta-0.1.1/docs/ko/index.md +154 -0
- contexta-0.1.1/docs/ko/operations.md +165 -0
- contexta-0.1.1/docs/ko/reference/api-reference.md +3178 -0
- contexta-0.1.1/docs/ko/reference/cli-reference.md +382 -0
- contexta-0.1.1/docs/ko/reference/http-reference.md +641 -0
- contexta-0.1.1/docs/ko/user-guide/adapters.md +172 -0
- contexta-0.1.1/docs/ko/user-guide/advanced.md +219 -0
- contexta-0.1.1/docs/ko/user-guide/batch-sample-deployment.md +199 -0
- contexta-0.1.1/docs/ko/user-guide/case-studies.md +585 -0
- contexta-0.1.1/docs/ko/user-guide/common-workflows.md +218 -0
- contexta-0.1.1/docs/ko/user-guide/core-concepts.md +330 -0
- contexta-0.1.1/docs/ko/user-guide/getting-started.md +136 -0
- contexta-0.1.1/docs/ko/user-guide/index.md +175 -0
- contexta-0.1.1/docs/ko/user-guide/key-features.md +139 -0
- contexta-0.1.1/docs/ko/user-guide/notebook.md +123 -0
- contexta-0.1.1/docs/ko/user-guide/testing.md +180 -0
- contexta-0.1.1/docs/ko/user-guide/tools-and-surfaces.md +267 -0
- contexta-0.1.1/docs/ko/what-is-ml-observability.md +916 -0
- contexta-0.1.1/docs/operations.md +165 -0
- contexta-0.1.1/docs/reference/api-reference.md +3344 -0
- contexta-0.1.1/docs/reference/cli-reference.md +383 -0
- contexta-0.1.1/docs/reference/http-reference.md +641 -0
- contexta-0.1.1/docs/user-guide/adapters.md +190 -0
- contexta-0.1.1/docs/user-guide/advanced.md +219 -0
- contexta-0.1.1/docs/user-guide/batch-sample-deployment.md +199 -0
- contexta-0.1.1/docs/user-guide/case-studies.md +675 -0
- contexta-0.1.1/docs/user-guide/common-workflows.md +218 -0
- contexta-0.1.1/docs/user-guide/core-concepts.md +332 -0
- contexta-0.1.1/docs/user-guide/getting-started.md +136 -0
- contexta-0.1.1/docs/user-guide/index.md +175 -0
- contexta-0.1.1/docs/user-guide/key-features.md +139 -0
- contexta-0.1.1/docs/user-guide/notebook.md +126 -0
- contexta-0.1.1/docs/user-guide/testing.md +180 -0
- contexta-0.1.1/docs/user-guide/tools-and-surfaces.md +267 -0
- contexta-0.1.1/docs/what-is-ml-observability.md +1323 -0
- contexta-0.1.1/examples/adapters/README.md +62 -0
- contexta-0.1.1/examples/adapters/mlflow_sink_demo.py +167 -0
- contexta-0.1.1/examples/adapters/otel_sink_demo.py +171 -0
- contexta-0.1.1/examples/adapters/stdout_sink_demo.py +99 -0
- contexta-0.1.1/examples/batch_sample/README.md +43 -0
- contexta-0.1.1/examples/batch_sample/batch_sample_demo.py +188 -0
- contexta-0.1.1/examples/case_studies/README.md +83 -0
- contexta-0.1.1/examples/case_studies/case01_scattered_experiments.py +297 -0
- contexta-0.1.1/examples/case_studies/case02_performance_regression.py +303 -0
- contexta-0.1.1/examples/case_studies/case03_silent_pipeline_failure.py +375 -0
- contexta-0.1.1/examples/case_studies/case04_deployment_traceability.py +385 -0
- contexta-0.1.1/examples/case_studies/case05_deployment_gate.py +286 -0
- contexta-0.1.1/examples/case_studies/case06_compliance_audit.py +325 -0
- contexta-0.1.1/examples/case_studies/case07_batch_job_monitoring.py +369 -0
- contexta-0.1.1/examples/case_studies/case08_upstream_contamination.py +331 -0
- contexta-0.1.1/examples/case_studies/case09_llm_per_prompt_evaluation.py +295 -0
- contexta-0.1.1/examples/case_studies/case10_rag_pipeline_decomposition.py +353 -0
- contexta-0.1.1/examples/case_studies/case11_project_history_onboarding.py +303 -0
- contexta-0.1.1/examples/case_studies/case12_delivery_quality_certificate.py +332 -0
- contexta-0.1.1/examples/pyproject.toml +29 -0
- contexta-0.1.1/examples/quickstart/.contexta/cnn-image-clf/metadata/ledger.db +0 -0
- contexta-0.1.1/examples/quickstart/.contexta/cnn-image-clf/records/indexes/record_type/degraded.jsonl +1 -0
- contexta-0.1.1/examples/quickstart/.contexta/cnn-image-clf/records/indexes/record_type/event.jsonl +2 -0
- contexta-0.1.1/examples/quickstart/.contexta/cnn-image-clf/records/indexes/record_type/metric.jsonl +72 -0
- contexta-0.1.1/examples/quickstart/.contexta/cnn-image-clf/records/indexes/run_ref/run__cnn-image-clf.cnn-v1.jsonl +75 -0
- contexta-0.1.1/examples/quickstart/.contexta/cnn-image-clf/records/indexes/stage_execution_ref/stage__cnn-image-clf.cnn-v1.evaluate.jsonl +4 -0
- contexta-0.1.1/examples/quickstart/.contexta/cnn-image-clf/records/indexes/stage_execution_ref/stage__cnn-image-clf.cnn-v1.preprocess.jsonl +2 -0
- contexta-0.1.1/examples/quickstart/.contexta/cnn-image-clf/records/indexes/stage_execution_ref/stage__cnn-image-clf.cnn-v1.train.jsonl +69 -0
- contexta-0.1.1/examples/quickstart/.contexta/cnn-image-clf/records/manifest.json +8 -0
- contexta-0.1.1/examples/quickstart/.contexta/cnn-image-clf/records/segments/segment-000001.jsonl +75 -0
- contexta-0.1.1/examples/quickstart/.contexta/wine-quality-clf/metadata/ledger.db +0 -0
- contexta-0.1.1/examples/quickstart/.contexta/wine-quality-clf/records/indexes/record_type/event.jsonl +2 -0
- contexta-0.1.1/examples/quickstart/.contexta/wine-quality-clf/records/indexes/record_type/metric.jsonl +20 -0
- contexta-0.1.1/examples/quickstart/.contexta/wine-quality-clf/records/indexes/run_ref/run__wine-quality-clf.rf-experiment.jsonl +11 -0
- contexta-0.1.1/examples/quickstart/.contexta/wine-quality-clf/records/indexes/run_ref/run__wine-quality-clf.svm-baseline.jsonl +11 -0
- contexta-0.1.1/examples/quickstart/.contexta/wine-quality-clf/records/indexes/stage_execution_ref/stage__wine-quality-clf.rf-experiment.evaluate.jsonl +4 -0
- contexta-0.1.1/examples/quickstart/.contexta/wine-quality-clf/records/indexes/stage_execution_ref/stage__wine-quality-clf.rf-experiment.preprocess.jsonl +1 -0
- contexta-0.1.1/examples/quickstart/.contexta/wine-quality-clf/records/indexes/stage_execution_ref/stage__wine-quality-clf.rf-experiment.train.jsonl +6 -0
- contexta-0.1.1/examples/quickstart/.contexta/wine-quality-clf/records/indexes/stage_execution_ref/stage__wine-quality-clf.svm-baseline.evaluate.jsonl +4 -0
- contexta-0.1.1/examples/quickstart/.contexta/wine-quality-clf/records/indexes/stage_execution_ref/stage__wine-quality-clf.svm-baseline.preprocess.jsonl +1 -0
- contexta-0.1.1/examples/quickstart/.contexta/wine-quality-clf/records/indexes/stage_execution_ref/stage__wine-quality-clf.svm-baseline.train.jsonl +6 -0
- contexta-0.1.1/examples/quickstart/.contexta/wine-quality-clf/records/manifest.json +8 -0
- contexta-0.1.1/examples/quickstart/.contexta/wine-quality-clf/records/segments/segment-000001.jsonl +22 -0
- contexta-0.1.1/examples/quickstart/README.md +174 -0
- contexta-0.1.1/examples/quickstart/qs01_sklearn_tabular.py +389 -0
- contexta-0.1.1/examples/quickstart/qs02_pytorch_cnn.py +472 -0
- contexta-0.1.1/examples/quickstart/qs03_bert_finetuning.py +531 -0
- contexta-0.1.1/examples/quickstart/qs04_llm_evaluation.py +519 -0
- contexta-0.1.1/examples/quickstart/runtime_capture_preview.py +75 -0
- contexta-0.1.1/examples/quickstart/verified_quickstart.py +129 -0
- contexta-0.1.1/examples/recovery/README.md +58 -0
- contexta-0.1.1/examples/recovery/artifact_transfer_demo.py +67 -0
- contexta-0.1.1/examples/recovery/backup_restore_verify.py +124 -0
- contexta-0.1.1/examples/recovery/replay_outbox_demo.py +76 -0
- contexta-0.1.1/pyproject.toml +117 -0
- contexta-0.1.1/src/contexta/__init__.py +6 -0
- contexta-0.1.1/src/contexta/__main__.py +7 -0
- contexta-0.1.1/src/contexta/adapters/__init__.py +17 -0
- contexta-0.1.1/src/contexta/adapters/dataframes/__init__.py +9 -0
- contexta-0.1.1/src/contexta/adapters/export/__init__.py +21 -0
- contexta-0.1.1/src/contexta/adapters/html/__init__.py +29 -0
- contexta-0.1.1/src/contexta/adapters/mlflow/__init__.py +12 -0
- contexta-0.1.1/src/contexta/adapters/mlflow/_sink.py +179 -0
- contexta-0.1.1/src/contexta/adapters/notebook/__init__.py +29 -0
- contexta-0.1.1/src/contexta/adapters/otel/__init__.py +12 -0
- contexta-0.1.1/src/contexta/adapters/otel/_sink.py +272 -0
- contexta-0.1.1/src/contexta/api/__init__.py +5 -0
- contexta-0.1.1/src/contexta/api/client.py +612 -0
- contexta-0.1.1/src/contexta/capture/__init__.py +32 -0
- contexta-0.1.1/src/contexta/capture/_service_utils.py +142 -0
- contexta-0.1.1/src/contexta/capture/artifacts.py +325 -0
- contexta-0.1.1/src/contexta/capture/dispatch.py +316 -0
- contexta-0.1.1/src/contexta/capture/events.py +104 -0
- contexta-0.1.1/src/contexta/capture/metrics.py +114 -0
- contexta-0.1.1/src/contexta/capture/models.py +389 -0
- contexta-0.1.1/src/contexta/capture/results.py +518 -0
- contexta-0.1.1/src/contexta/capture/sinks/__init__.py +20 -0
- contexta-0.1.1/src/contexta/capture/sinks/composite.py +114 -0
- contexta-0.1.1/src/contexta/capture/sinks/local.py +70 -0
- contexta-0.1.1/src/contexta/capture/sinks/memory.py +72 -0
- contexta-0.1.1/src/contexta/capture/sinks/protocol.py +212 -0
- contexta-0.1.1/src/contexta/capture/sinks/stdout.py +56 -0
- contexta-0.1.1/src/contexta/capture/traces.py +124 -0
- contexta-0.1.1/src/contexta/common/__init__.py +3 -0
- contexta-0.1.1/src/contexta/common/errors.py +172 -0
- contexta-0.1.1/src/contexta/common/io.py +132 -0
- contexta-0.1.1/src/contexta/common/results.py +296 -0
- contexta-0.1.1/src/contexta/common/time.py +49 -0
- contexta-0.1.1/src/contexta/config/__init__.py +89 -0
- contexta-0.1.1/src/contexta/config/bootstrap.py +63 -0
- contexta-0.1.1/src/contexta/config/env.py +239 -0
- contexta-0.1.1/src/contexta/config/loader.py +374 -0
- contexta-0.1.1/src/contexta/config/models.py +660 -0
- contexta-0.1.1/src/contexta/contract/__init__.py +149 -0
- contexta-0.1.1/src/contexta/contract/extensions.py +233 -0
- contexta-0.1.1/src/contexta/contract/models/__init__.py +86 -0
- contexta-0.1.1/src/contexta/contract/models/artifacts.py +268 -0
- contexta-0.1.1/src/contexta/contract/models/context.py +903 -0
- contexta-0.1.1/src/contexta/contract/models/lineage.py +210 -0
- contexta-0.1.1/src/contexta/contract/models/records.py +671 -0
- contexta-0.1.1/src/contexta/contract/refs.py +224 -0
- contexta-0.1.1/src/contexta/contract/registry.py +313 -0
- contexta-0.1.1/src/contexta/contract/serialization/__init__.py +57 -0
- contexta-0.1.1/src/contexta/contract/serialization/canonical.py +509 -0
- contexta-0.1.1/src/contexta/contract/validation/__init__.py +45 -0
- contexta-0.1.1/src/contexta/contract/validation/core.py +449 -0
- contexta-0.1.1/src/contexta/contract/validation/report.py +149 -0
- contexta-0.1.1/src/contexta/interpretation/__init__.py +178 -0
- contexta-0.1.1/src/contexta/interpretation/aggregation/__init__.py +14 -0
- contexta-0.1.1/src/contexta/interpretation/aggregation/models.py +85 -0
- contexta-0.1.1/src/contexta/interpretation/aggregation/service.py +208 -0
- contexta-0.1.1/src/contexta/interpretation/alert/__init__.py +12 -0
- contexta-0.1.1/src/contexta/interpretation/alert/models.py +52 -0
- contexta-0.1.1/src/contexta/interpretation/alert/service.py +162 -0
- contexta-0.1.1/src/contexta/interpretation/anomaly/__init__.py +12 -0
- contexta-0.1.1/src/contexta/interpretation/anomaly/models.py +37 -0
- contexta-0.1.1/src/contexta/interpretation/anomaly/service.py +266 -0
- contexta-0.1.1/src/contexta/interpretation/compare/__init__.py +33 -0
- contexta-0.1.1/src/contexta/interpretation/compare/models.py +176 -0
- contexta-0.1.1/src/contexta/interpretation/compare/service.py +555 -0
- contexta-0.1.1/src/contexta/interpretation/diagnostics/__init__.py +12 -0
- contexta-0.1.1/src/contexta/interpretation/diagnostics/models.py +46 -0
- contexta-0.1.1/src/contexta/interpretation/diagnostics/service.py +181 -0
- contexta-0.1.1/src/contexta/interpretation/lineage/__init__.py +12 -0
- contexta-0.1.1/src/contexta/interpretation/lineage/models.py +43 -0
- contexta-0.1.1/src/contexta/interpretation/lineage/service.py +194 -0
- contexta-0.1.1/src/contexta/interpretation/protocols.py +68 -0
- contexta-0.1.1/src/contexta/interpretation/provenance/__init__.py +12 -0
- contexta-0.1.1/src/contexta/interpretation/provenance/models.py +69 -0
- contexta-0.1.1/src/contexta/interpretation/provenance/service.py +211 -0
- contexta-0.1.1/src/contexta/interpretation/query/__init__.py +14 -0
- contexta-0.1.1/src/contexta/interpretation/query/filters.py +96 -0
- contexta-0.1.1/src/contexta/interpretation/query/models.py +53 -0
- contexta-0.1.1/src/contexta/interpretation/query/service.py +286 -0
- contexta-0.1.1/src/contexta/interpretation/reports/__init__.py +12 -0
- contexta-0.1.1/src/contexta/interpretation/reports/builder.py +303 -0
- contexta-0.1.1/src/contexta/interpretation/reports/models.py +106 -0
- contexta-0.1.1/src/contexta/interpretation/repositories/__init__.py +27 -0
- contexta-0.1.1/src/contexta/interpretation/repositories/composite.py +541 -0
- contexta-0.1.1/src/contexta/interpretation/trend/__init__.py +27 -0
- contexta-0.1.1/src/contexta/interpretation/trend/models.py +108 -0
- contexta-0.1.1/src/contexta/interpretation/trend/service.py +290 -0
- contexta-0.1.1/src/contexta/notebook/__init__.py +23 -0
- contexta-0.1.1/src/contexta/recovery/__init__.py +34 -0
- contexta-0.1.1/src/contexta/recovery/backup.py +151 -0
- contexta-0.1.1/src/contexta/recovery/models.py +256 -0
- contexta-0.1.1/src/contexta/recovery/replay.py +185 -0
- contexta-0.1.1/src/contexta/recovery/restore.py +140 -0
- contexta-0.1.1/src/contexta/runtime/__init__.py +5 -0
- contexta-0.1.1/src/contexta/runtime/scopes.py +560 -0
- contexta-0.1.1/src/contexta/runtime/session.py +1090 -0
- contexta-0.1.1/src/contexta/store/__init__.py +10 -0
- contexta-0.1.1/src/contexta/store/artifacts/__init__.py +89 -0
- contexta-0.1.1/src/contexta/store/artifacts/config.py +194 -0
- contexta-0.1.1/src/contexta/store/artifacts/export.py +84 -0
- contexta-0.1.1/src/contexta/store/artifacts/importing.py +212 -0
- contexta-0.1.1/src/contexta/store/artifacts/ingest.py +106 -0
- contexta-0.1.1/src/contexta/store/artifacts/models.py +411 -0
- contexta-0.1.1/src/contexta/store/artifacts/read.py +92 -0
- contexta-0.1.1/src/contexta/store/artifacts/repair.py +206 -0
- contexta-0.1.1/src/contexta/store/artifacts/retention.py +41 -0
- contexta-0.1.1/src/contexta/store/artifacts/verify.py +219 -0
- contexta-0.1.1/src/contexta/store/artifacts/write.py +661 -0
- contexta-0.1.1/src/contexta/store/metadata/__init__.py +56 -0
- contexta-0.1.1/src/contexta/store/metadata/adapters/__init__.py +6 -0
- contexta-0.1.1/src/contexta/store/metadata/adapters/frame.py +66 -0
- contexta-0.1.1/src/contexta/store/metadata/adapters/sql.py +40 -0
- contexta-0.1.1/src/contexta/store/metadata/config.py +139 -0
- contexta-0.1.1/src/contexta/store/metadata/integrity/__init__.py +15 -0
- contexta-0.1.1/src/contexta/store/metadata/integrity/repair.py +90 -0
- contexta-0.1.1/src/contexta/store/metadata/integrity/report.py +210 -0
- contexta-0.1.1/src/contexta/store/metadata/migrations/__init__.py +31 -0
- contexta-0.1.1/src/contexta/store/metadata/migrations/models.py +99 -0
- contexta-0.1.1/src/contexta/store/metadata/migrations/runner.py +334 -0
- contexta-0.1.1/src/contexta/store/metadata/repositories/__init__.py +23 -0
- contexta-0.1.1/src/contexta/store/metadata/repositories/_base.py +72 -0
- contexta-0.1.1/src/contexta/store/metadata/repositories/batches.py +79 -0
- contexta-0.1.1/src/contexta/store/metadata/repositories/deployments.py +80 -0
- contexta-0.1.1/src/contexta/store/metadata/repositories/environments.py +52 -0
- contexta-0.1.1/src/contexta/store/metadata/repositories/projects.py +40 -0
- contexta-0.1.1/src/contexta/store/metadata/repositories/provenance.py +58 -0
- contexta-0.1.1/src/contexta/store/metadata/repositories/relations.py +80 -0
- contexta-0.1.1/src/contexta/store/metadata/repositories/runs.py +56 -0
- contexta-0.1.1/src/contexta/store/metadata/repositories/samples.py +94 -0
- contexta-0.1.1/src/contexta/store/metadata/repositories/stages.py +55 -0
- contexta-0.1.1/src/contexta/store/metadata/snapshots.py +119 -0
- contexta-0.1.1/src/contexta/store/metadata/store.py +465 -0
- contexta-0.1.1/src/contexta/store/records/__init__.py +47 -0
- contexta-0.1.1/src/contexta/store/records/config.py +190 -0
- contexta-0.1.1/src/contexta/store/records/export.py +33 -0
- contexta-0.1.1/src/contexta/store/records/integrity.py +142 -0
- contexta-0.1.1/src/contexta/store/records/models.py +372 -0
- contexta-0.1.1/src/contexta/store/records/read.py +131 -0
- contexta-0.1.1/src/contexta/store/records/repair.py +171 -0
- contexta-0.1.1/src/contexta/store/records/replay.py +182 -0
- contexta-0.1.1/src/contexta/store/records/write.py +455 -0
- contexta-0.1.1/src/contexta/surfaces/__init__.py +8 -0
- contexta-0.1.1/src/contexta/surfaces/cli/__init__.py +5 -0
- contexta-0.1.1/src/contexta/surfaces/cli/main.py +846 -0
- contexta-0.1.1/src/contexta/surfaces/export/__init__.py +15 -0
- contexta-0.1.1/src/contexta/surfaces/export/csv.py +155 -0
- contexta-0.1.1/src/contexta/surfaces/html/__init__.py +21 -0
- contexta-0.1.1/src/contexta/surfaces/html/charts.py +67 -0
- contexta-0.1.1/src/contexta/surfaces/html/renderer.py +376 -0
- contexta-0.1.1/src/contexta/surfaces/html/templates.py +158 -0
- contexta-0.1.1/src/contexta/surfaces/http/__init__.py +21 -0
- contexta-0.1.1/src/contexta/surfaces/http/serializers.py +139 -0
- contexta-0.1.1/src/contexta/surfaces/http/server.py +476 -0
- contexta-0.1.1/src/contexta/surfaces/notebook/__init__.py +23 -0
- contexta-0.1.1/src/contexta/surfaces/notebook/rendering.py +377 -0
- contexta-0.1.1/src/contexta/surfaces/notebook/surface.py +81 -0
- contexta-0.1.1/tests/__init__.py +0 -0
- contexta-0.1.1/tests/adapters/test_imports.py +214 -0
- contexta-0.1.1/tests/adapters/test_mlflow_sink.py +402 -0
- contexta-0.1.1/tests/adapters/test_otel_sink.py +567 -0
- contexta-0.1.1/tests/api/__init__.py +0 -0
- contexta-0.1.1/tests/api/test_facade.py +204 -0
- contexta-0.1.1/tests/capture/__init__.py +0 -0
- contexta-0.1.1/tests/capture/test_event_metric.py +194 -0
- contexta-0.1.1/tests/capture/test_span_artifact.py +161 -0
- contexta-0.1.1/tests/conftest.py +328 -0
- contexta-0.1.1/tests/contract/__init__.py +0 -0
- contexta-0.1.1/tests/contract/test_artifact_models.py +228 -0
- contexta-0.1.1/tests/contract/test_context_models.py +392 -0
- contexta-0.1.1/tests/contract/test_record_models.py +276 -0
- contexta-0.1.1/tests/contract/test_refs.py +198 -0
- contexta-0.1.1/tests/contract/test_serialization.py +171 -0
- contexta-0.1.1/tests/contract/test_validation.py +223 -0
- contexta-0.1.1/tests/e2e/__init__.py +0 -0
- contexta-0.1.1/tests/e2e/test_capture_to_report.py +338 -0
- contexta-0.1.1/tests/e2e/test_quickstart_examples.py +47 -0
- contexta-0.1.1/tests/e2e/test_recovery_examples.py +45 -0
- contexta-0.1.1/tests/interpretation/__init__.py +0 -0
- contexta-0.1.1/tests/interpretation/conftest.py +274 -0
- contexta-0.1.1/tests/interpretation/test_diagnostics_lineage.py +199 -0
- contexta-0.1.1/tests/interpretation/test_query_compare.py +180 -0
- contexta-0.1.1/tests/interpretation/test_reports_surfaces.py +268 -0
- contexta-0.1.1/tests/interpretation/test_trend_anomaly.py +143 -0
- contexta-0.1.1/tests/notebook/test_smoke.py +109 -0
- contexta-0.1.1/tests/notebook/test_surface.py +77 -0
- contexta-0.1.1/tests/recovery/__init__.py +0 -0
- contexta-0.1.1/tests/recovery/test_backup_restore.py +244 -0
- contexta-0.1.1/tests/recovery/test_replay.py +152 -0
- contexta-0.1.1/tests/runtime/__init__.py +0 -0
- contexta-0.1.1/tests/runtime/test_scopes.py +307 -0
- contexta-0.1.1/tests/store/__init__.py +0 -0
- contexta-0.1.1/tests/store/artifacts/__init__.py +0 -0
- contexta-0.1.1/tests/store/artifacts/test_verify_transfer.py +158 -0
- contexta-0.1.1/tests/store/artifacts/test_write_read.py +153 -0
- contexta-0.1.1/tests/store/metadata/__init__.py +0 -0
- contexta-0.1.1/tests/store/metadata/test_integrity_migration.py +120 -0
- contexta-0.1.1/tests/store/metadata/test_repositories.py +391 -0
- contexta-0.1.1/tests/store/records/__init__.py +0 -0
- contexta-0.1.1/tests/store/records/test_append_replay.py +156 -0
- contexta-0.1.1/tests/store/records/test_integrity_repair.py +116 -0
- contexta-0.1.1/tests/surfaces/__init__.py +0 -0
- contexta-0.1.1/tests/surfaces/test_cli_maintenance.py +216 -0
- contexta-0.1.1/tests/surfaces/test_cli_query.py +199 -0
- contexta-0.1.1/tests/surfaces/test_http_json.py +252 -0
- contexta-0.1.1/tests/surfaces/test_http_ui.py +198 -0
|
@@ -0,0 +1,337 @@
|
|
|
1
|
+
# Contributing To Contexta
|
|
2
|
+
|
|
3
|
+
This guide explains how to work on `Contexta` in the current repository.
|
|
4
|
+
|
|
5
|
+
The most important rule is simple:
|
|
6
|
+
|
|
7
|
+
- contribute against the documented public product surface
|
|
8
|
+
- avoid turning internal implementation paths into accidental public contracts
|
|
9
|
+
|
|
10
|
+
## Development Setup
|
|
11
|
+
|
|
12
|
+
Clone the repository and install the development environment:
|
|
13
|
+
|
|
14
|
+
```powershell
|
|
15
|
+
uv sync --dev
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
For ad-hoc local scripts and public examples in the source tree, use:
|
|
19
|
+
|
|
20
|
+
```powershell
|
|
21
|
+
$env:PYTHONPATH = "src"
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Current prototype note:
|
|
25
|
+
|
|
26
|
+
- canonical public docs, package metadata, and CLI naming now use `Contexta` / `contexta`
|
|
27
|
+
|
|
28
|
+
## Repository Layout
|
|
29
|
+
|
|
30
|
+
Key areas:
|
|
31
|
+
|
|
32
|
+
- `src/contexta/`
|
|
33
|
+
- product code
|
|
34
|
+
- `tests/`
|
|
35
|
+
- repository test suites
|
|
36
|
+
- `docs/`
|
|
37
|
+
- public documentation
|
|
38
|
+
- `examples/`
|
|
39
|
+
- executable public examples
|
|
40
|
+
## Public Boundary Rules
|
|
41
|
+
|
|
42
|
+
Safe public targets for docs, examples, and new user-facing code:
|
|
43
|
+
|
|
44
|
+
- `contexta`
|
|
45
|
+
- `contexta.config`
|
|
46
|
+
- `contexta.contract`
|
|
47
|
+
- `contexta.capture`
|
|
48
|
+
- `contexta.store.metadata`
|
|
49
|
+
- `contexta.store.records`
|
|
50
|
+
- `contexta.store.artifacts`
|
|
51
|
+
- `contexta.interpretation`
|
|
52
|
+
- `contexta.recovery`
|
|
53
|
+
|
|
54
|
+
Do not introduce new examples or docs that anchor on:
|
|
55
|
+
|
|
56
|
+
- `contexta.api`
|
|
57
|
+
- `contexta.runtime`
|
|
58
|
+
- `contexta.common`
|
|
59
|
+
- `contexta.surfaces`
|
|
60
|
+
|
|
61
|
+
Those modules exist, but they are not the public contract we want contributors to normalize.
|
|
62
|
+
|
|
63
|
+
## Documentation Rules
|
|
64
|
+
|
|
65
|
+
When editing public docs:
|
|
66
|
+
|
|
67
|
+
- use canonical product names first
|
|
68
|
+
- prefer task-oriented guidance over internal architecture narration
|
|
69
|
+
- point to executable examples whenever possible
|
|
70
|
+
- avoid promising behavior that is not already implemented or tested
|
|
71
|
+
|
|
72
|
+
Public docs should describe:
|
|
73
|
+
|
|
74
|
+
- stable product usage
|
|
75
|
+
- current prototype caveats when they matter
|
|
76
|
+
|
|
77
|
+
Public docs should not expose:
|
|
78
|
+
|
|
79
|
+
- WBS progress
|
|
80
|
+
- internal scratch notes
|
|
81
|
+
- accidental internal import paths as if they were supported APIs
|
|
82
|
+
|
|
83
|
+
## Example Rules
|
|
84
|
+
|
|
85
|
+
Examples in `examples/` are part of the public documentation surface.
|
|
86
|
+
|
|
87
|
+
That means they should:
|
|
88
|
+
|
|
89
|
+
- use public imports only
|
|
90
|
+
- run from a normal repository checkout
|
|
91
|
+
- match the docs that point to them
|
|
92
|
+
- have regression coverage when practical
|
|
93
|
+
|
|
94
|
+
If you change:
|
|
95
|
+
|
|
96
|
+
- `examples/quickstart/`
|
|
97
|
+
- rerun `uv run pytest tests/e2e/test_quickstart_examples.py -q`
|
|
98
|
+
- `examples/recovery/`
|
|
99
|
+
- rerun `uv run pytest tests/e2e/test_recovery_examples.py -q`
|
|
100
|
+
|
|
101
|
+
## Testing
|
|
102
|
+
|
|
103
|
+
The project uses `pytest`.
|
|
104
|
+
|
|
105
|
+
Broad validation:
|
|
106
|
+
|
|
107
|
+
```powershell
|
|
108
|
+
uv run pytest -q
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Smaller targeted suites you will likely use often:
|
|
112
|
+
|
|
113
|
+
```powershell
|
|
114
|
+
uv run pytest tests/e2e/test_quickstart_examples.py -q
|
|
115
|
+
uv run pytest tests/e2e/test_recovery_examples.py -q
|
|
116
|
+
uv run pytest tests/e2e/test_capture_to_report.py -q
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
When choosing tests:
|
|
120
|
+
|
|
121
|
+
- run the smallest suite that proves your change
|
|
122
|
+
- expand to broader suites when public behavior moved
|
|
123
|
+
- keep examples and docs tied to executable evidence
|
|
124
|
+
|
|
125
|
+
## Code And Change Style
|
|
126
|
+
|
|
127
|
+
When making code changes:
|
|
128
|
+
|
|
129
|
+
- preserve canonical naming in public-facing code paths
|
|
130
|
+
- prefer explicit, typed models over loose ad-hoc payload handling
|
|
131
|
+
- respect the separation between metadata, records, and artifacts as truth-owning planes
|
|
132
|
+
- keep recovery flows explicit about warnings, degradation, and loss notes
|
|
133
|
+
|
|
134
|
+
When making documentation changes:
|
|
135
|
+
|
|
136
|
+
- keep wording honest about prototype limitations
|
|
137
|
+
- update hubs and entry pages when new docs appear
|
|
138
|
+
- avoid leaving “planned” language behind once a page exists
|
|
139
|
+
|
|
140
|
+
## Submitting Changes
|
|
141
|
+
|
|
142
|
+
Before you consider a change ready:
|
|
143
|
+
|
|
144
|
+
- confirm the changed docs or examples still match reality
|
|
145
|
+
- run the nearest relevant test suite
|
|
146
|
+
- check that new public examples avoid internal imports
|
|
147
|
+
- update adjacent navigation pages when you add a new public document
|
|
148
|
+
|
|
149
|
+
If you touch public behavior, consider whether these also need updates:
|
|
150
|
+
|
|
151
|
+
- `README.md`
|
|
152
|
+
- `docs/index.md`
|
|
153
|
+
- `docs/user-guide/index.md`
|
|
154
|
+
- reference pages
|
|
155
|
+
- examples
|
|
156
|
+
|
|
157
|
+
## Versioning Policy
|
|
158
|
+
|
|
159
|
+
Contexta uses [Semantic Versioning](https://semver.org) with PEP 440 pre-release identifiers.
|
|
160
|
+
|
|
161
|
+
**Single source of truth:** `[project].version` in `pyproject.toml`.
|
|
162
|
+
`contexta.__version__` reads this at runtime via `importlib.metadata` — do not duplicate it.
|
|
163
|
+
|
|
164
|
+
### Version scheme
|
|
165
|
+
|
|
166
|
+
| Version form | When to use |
|
|
167
|
+
|---|---|
|
|
168
|
+
| `0.MINOR.PATCH` | Current pre-1.0 series |
|
|
169
|
+
| `0.MINOR.0` | New public API surface; may include breaking changes (pre-1.0 convention) |
|
|
170
|
+
| `0.x.PATCH` | Bug fixes only, no breaking changes |
|
|
171
|
+
| `1.0.0` | Stable public API contract — requires full REL sign-off |
|
|
172
|
+
|
|
173
|
+
### Pre-release identifiers (PEP 440)
|
|
174
|
+
|
|
175
|
+
| Identifier | Example | Use for |
|
|
176
|
+
|---|---|---|
|
|
177
|
+
| alpha | `0.2.0a1` | Early preview, incomplete features |
|
|
178
|
+
| beta | `0.2.0b1` | Feature complete, stabilizing |
|
|
179
|
+
| rc | `0.2.0rc1` | Release candidate, final validation |
|
|
180
|
+
|
|
181
|
+
### Bumping the version
|
|
182
|
+
|
|
183
|
+
Use `uv version` to update `pyproject.toml` in one command:
|
|
184
|
+
|
|
185
|
+
```powershell
|
|
186
|
+
uv version --bump patch # 0.1.0 -> 0.1.1
|
|
187
|
+
uv version --bump minor # 0.1.0 -> 0.2.0
|
|
188
|
+
uv version --bump minor --bump rc # 0.1.0 -> 0.2.0rc1
|
|
189
|
+
uv version 0.2.0 # set explicitly
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
After bumping:
|
|
193
|
+
|
|
194
|
+
```powershell
|
|
195
|
+
git add pyproject.toml
|
|
196
|
+
git commit -m "chore: bump version to $(uv version --short)"
|
|
197
|
+
git tag "v$(uv version --short)"
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
### Git tag convention
|
|
201
|
+
|
|
202
|
+
Tags use a `v` prefix: `v0.1.0`, `v0.2.0rc1`.
|
|
203
|
+
The release workflow (REL-026) triggers on `v*` tag pushes.
|
|
204
|
+
|
|
205
|
+
## Release Process
|
|
206
|
+
|
|
207
|
+
This section describes how to cut a release. Steps 1–5 are the pre-release gate; steps 6–8 are the actual publish.
|
|
208
|
+
|
|
209
|
+
### 1. Confirm the release gate passes
|
|
210
|
+
|
|
211
|
+
```powershell
|
|
212
|
+
uv run pytest --tb=short -q
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
All tests must pass (0 failures). Also confirm CI is green on `main`.
|
|
216
|
+
|
|
217
|
+
### 2. Bump the version
|
|
218
|
+
|
|
219
|
+
```powershell
|
|
220
|
+
uv version --bump minor # new features
|
|
221
|
+
uv version --bump patch # bug fixes only
|
|
222
|
+
uv version --bump minor --bump rc # release candidate
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
Verify the bump:
|
|
226
|
+
|
|
227
|
+
```powershell
|
|
228
|
+
uv version --short # prints the new version
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
### 3. Build and verify distributions
|
|
232
|
+
|
|
233
|
+
```powershell
|
|
234
|
+
uv build
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
Spot-check the wheel in a clean environment:
|
|
238
|
+
|
|
239
|
+
```powershell
|
|
240
|
+
uv venv /tmp/ctx-release-check
|
|
241
|
+
/tmp/ctx-release-check/Scripts/pip install dist/contexta-*.whl --quiet
|
|
242
|
+
/tmp/ctx-release-check/Scripts/python -c "from contexta import __version__; print(__version__)"
|
|
243
|
+
/tmp/ctx-release-check/Scripts/contexta --help
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
### 4. Generate checksums
|
|
247
|
+
|
|
248
|
+
```powershell
|
|
249
|
+
uv run python -c "
|
|
250
|
+
import hashlib, pathlib
|
|
251
|
+
for f in sorted(pathlib.Path('dist').glob('contexta-*')):
|
|
252
|
+
h = hashlib.sha256(f.read_bytes()).hexdigest()
|
|
253
|
+
print(f'{h} {f.name}')
|
|
254
|
+
"
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
Paste the output into `.github/RELEASE_NOTES_v{VERSION}.md`.
|
|
258
|
+
|
|
259
|
+
### 5. Commit and tag
|
|
260
|
+
|
|
261
|
+
```powershell
|
|
262
|
+
git add pyproject.toml
|
|
263
|
+
git commit -m "chore: bump version to $(uv version --short)"
|
|
264
|
+
git tag "v$(uv version --short)"
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
### 6. Push the tag
|
|
268
|
+
|
|
269
|
+
```powershell
|
|
270
|
+
git push origin main "v$(uv version --short)"
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
Pushing the tag triggers the `release.yml` workflow (REL-026), which builds distributions and uploads them to the GitHub Release automatically.
|
|
274
|
+
|
|
275
|
+
### 7. Create the GitHub Release
|
|
276
|
+
|
|
277
|
+
In GitHub: **Releases → Draft a new release**
|
|
278
|
+
|
|
279
|
+
- Tag: select the tag you just pushed (e.g. `v0.2.0`)
|
|
280
|
+
- Title: `Contexta {VERSION}`
|
|
281
|
+
- Body: paste the content of `.github/RELEASE_NOTES_v{VERSION}.md`
|
|
282
|
+
- Attach `dist/contexta-{VERSION}-py3-none-any.whl` and `dist/contexta-{VERSION}.tar.gz`
|
|
283
|
+
- For pre-releases (`rc`, `alpha`, `beta`): check **Set as a pre-release**
|
|
284
|
+
|
|
285
|
+
### 8. Post-release
|
|
286
|
+
|
|
287
|
+
- Verify the release page looks correct
|
|
288
|
+
- Confirm PyPI upload succeeded (if applicable — see REL-025)
|
|
289
|
+
- Delete the local `/tmp/ctx-release-check` venv
|
|
290
|
+
|
|
291
|
+
## CI Workflows
|
|
292
|
+
|
|
293
|
+
Four GitHub Actions workflows run on every push and pull request:
|
|
294
|
+
|
|
295
|
+
| Workflow | File | Runs on |
|
|
296
|
+
|---|---|---|
|
|
297
|
+
| CI | `.github/workflows/ci.yml` | push / PR → main, master |
|
|
298
|
+
| Test Matrix | `.github/workflows/test-matrix.yml` | push / PR → main, master + nightly |
|
|
299
|
+
| Packaging | `.github/workflows/packaging.yml` | push / PR → main, master |
|
|
300
|
+
| Docs and Examples | `.github/workflows/examples.yml` | push / PR → main, master |
|
|
301
|
+
|
|
302
|
+
**Release gate** — the command every workflow mirrors locally:
|
|
303
|
+
|
|
304
|
+
```powershell
|
|
305
|
+
uv run pytest --tb=short -q
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
All 544 tests must pass with 0 failures before any release.
|
|
309
|
+
|
|
310
|
+
## Branch Protection (main)
|
|
311
|
+
|
|
312
|
+
The following checks are **required** before a PR can merge into `main`:
|
|
313
|
+
|
|
314
|
+
- `CI / Test (Python 3.14)` — full test suite + import smoke + CLI smoke
|
|
315
|
+
- `Packaging / Build wheel + sdist` — build succeeds, wheel contents are clean
|
|
316
|
+
- `Packaging / Install from wheel + smoke` — wheel installs and imports correctly in a clean venv
|
|
317
|
+
|
|
318
|
+
The following checks are **informational** (not blocking):
|
|
319
|
+
|
|
320
|
+
- `Test Matrix / pytest / Python 3.14 / ubuntu-latest`
|
|
321
|
+
- `Test Matrix / pytest / Python 3.14 / windows-latest`
|
|
322
|
+
- `Docs and Examples / Internal link check`
|
|
323
|
+
- `Docs and Examples / Quickstart examples`
|
|
324
|
+
- `Docs and Examples / Recovery examples`
|
|
325
|
+
|
|
326
|
+
To configure branch protection in GitHub:
|
|
327
|
+
|
|
328
|
+
1. Go to **Settings → Branches → Add rule** for `main`
|
|
329
|
+
2. Enable **Require status checks to pass before merging**
|
|
330
|
+
3. Search for and add the three required check names above
|
|
331
|
+
4. Enable **Require branches to be up to date before merging**
|
|
332
|
+
|
|
333
|
+
## Where To Go Next
|
|
334
|
+
|
|
335
|
+
- product docs: [docs/index.md](./docs/index.md)
|
|
336
|
+
- user guide: [docs/user-guide/index.md](./docs/user-guide/index.md)
|
|
337
|
+
- examples: [examples/quickstart/README.md](./examples/quickstart/README.md), [examples/recovery/README.md](./examples/recovery/README.md)
|
contexta-0.1.1/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Kim
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
contexta-0.1.1/PKG-INFO
ADDED
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: contexta
|
|
3
|
+
Version: 0.1.1
|
|
4
|
+
Summary: Local-first observability for ML systems
|
|
5
|
+
Project-URL: Homepage, https://github.com/your-org/contexta
|
|
6
|
+
Project-URL: Documentation, https://your-org.github.io/contexta
|
|
7
|
+
Project-URL: Repository, https://github.com/your-org/contexta
|
|
8
|
+
Project-URL: Bug Tracker, https://github.com/your-org/contexta/issues
|
|
9
|
+
Author: Kim
|
|
10
|
+
License: MIT
|
|
11
|
+
License-File: LICENSE
|
|
12
|
+
Keywords: machine-learning,ml-observability,mlops,monitoring,observability
|
|
13
|
+
Classifier: Development Status :: 3 - Alpha
|
|
14
|
+
Classifier: Intended Audience :: Developers
|
|
15
|
+
Classifier: Intended Audience :: Science/Research
|
|
16
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
17
|
+
Classifier: Programming Language :: Python :: 3
|
|
18
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
20
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
21
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
22
|
+
Requires-Python: >=3.14
|
|
23
|
+
Requires-Dist: duckdb>=1.5.1
|
|
24
|
+
Provides-Extra: all-integrations
|
|
25
|
+
Requires-Dist: mlflow>=2.0; extra == 'all-integrations'
|
|
26
|
+
Requires-Dist: opentelemetry-api>=1.20; extra == 'all-integrations'
|
|
27
|
+
Requires-Dist: pandas>=2.0; extra == 'all-integrations'
|
|
28
|
+
Requires-Dist: polars>=0.20; extra == 'all-integrations'
|
|
29
|
+
Requires-Dist: scikit-learn>=1.6; extra == 'all-integrations'
|
|
30
|
+
Requires-Dist: torch>=2.5; extra == 'all-integrations'
|
|
31
|
+
Requires-Dist: transformers>=4.40; extra == 'all-integrations'
|
|
32
|
+
Provides-Extra: dataframes
|
|
33
|
+
Requires-Dist: pandas>=2.0; extra == 'dataframes'
|
|
34
|
+
Requires-Dist: polars>=0.20; extra == 'dataframes'
|
|
35
|
+
Provides-Extra: mlflow
|
|
36
|
+
Requires-Dist: mlflow>=2.0; extra == 'mlflow'
|
|
37
|
+
Provides-Extra: notebook
|
|
38
|
+
Requires-Dist: ipython>=8.0; extra == 'notebook'
|
|
39
|
+
Provides-Extra: otel
|
|
40
|
+
Requires-Dist: opentelemetry-api>=1.20; extra == 'otel'
|
|
41
|
+
Provides-Extra: sklearn
|
|
42
|
+
Requires-Dist: scikit-learn>=1.6; extra == 'sklearn'
|
|
43
|
+
Provides-Extra: torch
|
|
44
|
+
Requires-Dist: torch>=2.5; extra == 'torch'
|
|
45
|
+
Provides-Extra: transformers
|
|
46
|
+
Requires-Dist: torch>=2.5; extra == 'transformers'
|
|
47
|
+
Requires-Dist: transformers>=4.40; extra == 'transformers'
|
|
48
|
+
Description-Content-Type: text/markdown
|
|
49
|
+
|
|
50
|
+
<h1 align="center">Contexta</h1>
|
|
51
|
+
|
|
52
|
+
<p align="center">
|
|
53
|
+
<strong>Local-first observability for ML systems.</strong>
|
|
54
|
+
</p>
|
|
55
|
+
|
|
56
|
+
<p align="center">
|
|
57
|
+
<img src="https://img.shields.io/badge/python-3.14%2B-2563EB" alt="python 3.14+">
|
|
58
|
+
<img src="https://img.shields.io/badge/stack-Python%20%7C%20uv%20%7C%20pytest-1F2937" alt="project stack">
|
|
59
|
+
</p>
|
|
60
|
+
|
|
61
|
+
<p align="center">
|
|
62
|
+
<img src="https://img.shields.io/badge/status-prototype-D97706" alt="prototype status">
|
|
63
|
+
<img src="https://img.shields.io/badge/focus-local--first-0F766E" alt="local-first">
|
|
64
|
+
</p>
|
|
65
|
+
|
|
66
|
+
<p align="center">
|
|
67
|
+
<a href="https://github.com/eastlighting1/Contexta/actions/workflows/ci.yml"><img src="https://github.com/eastlighting1/Contexta/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
|
|
68
|
+
<a href="https://github.com/eastlighting1/Contexta/actions/workflows/test-matrix.yml"><img src="https://github.com/eastlighting1/Contexta/actions/workflows/test-matrix.yml/badge.svg" alt="Test Matrix"></a>
|
|
69
|
+
<a href="https://github.com/eastlighting1/Contexta/actions/workflows/examples.yml"><img src="https://github.com/eastlighting1/Contexta/actions/workflows/examples.yml/badge.svg" alt="Docs and Examples"></a>
|
|
70
|
+
<a href="https://github.com/eastlighting1/Contexta/actions/workflows/packaging.yml"><img src="https://github.com/eastlighting1/Contexta/actions/workflows/packaging.yml/badge.svg" alt="Packaging"></a>
|
|
71
|
+
</p>
|
|
72
|
+
|
|
73
|
+
<p align="center">
|
|
74
|
+
<a href="#quickstart">Quickstart</a> |
|
|
75
|
+
<a href="#product-surface">Product Surface</a> |
|
|
76
|
+
<a href="#documentation-map">Docs Map</a>
|
|
77
|
+
</p>
|
|
78
|
+
|
|
79
|
+
`Contexta` brings the six legacy library roles into one product surface. The intended developer experience is one canonical Python import root, one canonical CLI, one canonical workspace, and one consistent contract for writing, storing, querying, comparing, and recovering observability data.
|
|
80
|
+
|
|
81
|
+
> [!NOTE]
|
|
82
|
+
> `Contexta` is in a prototype-to-product transition. The canonical public identity is already `Contexta` and `contexta`, but some packaging and CLI alignment work is still in progress. This README uses the final product language first and calls out transitional behavior only where it matters.
|
|
83
|
+
|
|
84
|
+
## Why Contexta
|
|
85
|
+
|
|
86
|
+
- **One product surface**
|
|
87
|
+
Start from `from contexta import Contexta` instead of stitching together separate package roots.
|
|
88
|
+
- **Canonical local workspace**
|
|
89
|
+
Keep metadata, records, artifacts, reports, and recovery state in a local `.contexta/` workspace.
|
|
90
|
+
- **Read-oriented investigation**
|
|
91
|
+
Query runs, compare outcomes, inspect diagnostics, follow lineage, and build reports from canonical data.
|
|
92
|
+
- **Recovery built in**
|
|
93
|
+
Replay, backup, restore, and artifact transfer are part of the product direction, not separate utilities.
|
|
94
|
+
|
|
95
|
+
## Quickstart
|
|
96
|
+
|
|
97
|
+
The shortest fully verified prototype path is:
|
|
98
|
+
|
|
99
|
+
1. Install the project in editable mode.
|
|
100
|
+
2. Run the verified quickstart example.
|
|
101
|
+
3. Inspect the generated report and workspace output.
|
|
102
|
+
|
|
103
|
+
### 1. Install
|
|
104
|
+
|
|
105
|
+
For local development inside this repository:
|
|
106
|
+
|
|
107
|
+
```powershell
|
|
108
|
+
uv sync --dev
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Or with `pip`:
|
|
112
|
+
|
|
113
|
+
```powershell
|
|
114
|
+
python -m pip install -e .
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
After installation, the canonical import is:
|
|
118
|
+
|
|
119
|
+
```python
|
|
120
|
+
from contexta import Contexta
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### 2. Run The Verified Quickstart Example
|
|
124
|
+
|
|
125
|
+
```powershell
|
|
126
|
+
$env:PYTHONPATH = "src"
|
|
127
|
+
uv run python examples/quickstart/verified_quickstart.py
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
The example source lives at [`examples/quickstart/verified_quickstart.py`](./examples/quickstart/verified_quickstart.py).
|
|
131
|
+
|
|
132
|
+
It creates a temporary workspace, writes minimal canonical data, queries the resulting run, and saves a markdown snapshot report.
|
|
133
|
+
|
|
134
|
+
### 3. What This Confirms
|
|
135
|
+
|
|
136
|
+
- the `contexta` import path is live
|
|
137
|
+
- a canonical `.contexta/` workspace can be created locally
|
|
138
|
+
- canonical metadata and records can be written
|
|
139
|
+
- the unified facade can query that workspace and build a report
|
|
140
|
+
- the quickstart example is executable and regression-covered
|
|
141
|
+
|
|
142
|
+
## Runtime Capture Preview
|
|
143
|
+
|
|
144
|
+
The runtime capture surface is already part of the product direction:
|
|
145
|
+
|
|
146
|
+
```powershell
|
|
147
|
+
$env:PYTHONPATH = "src"
|
|
148
|
+
uv run python examples/quickstart/runtime_capture_preview.py
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
The preview source lives at [`examples/quickstart/runtime_capture_preview.py`](./examples/quickstart/runtime_capture_preview.py).
|
|
152
|
+
|
|
153
|
+
The verified README quickstart intentionally uses the currently proven query/report path. The runtime capture preview is included separately so new users can see the scope API without over-promising the current onboarding workflow.
|
|
154
|
+
|
|
155
|
+
## Product Surface
|
|
156
|
+
|
|
157
|
+
| Surface | Status | Role | When To Start Here |
|
|
158
|
+
| --- | --- | --- | --- |
|
|
159
|
+
| `Contexta` | Stable | Unified facade | Default starting point |
|
|
160
|
+
| `contexta.config` | Stable | Config models, profiles, env overrides | When you need explicit config control |
|
|
161
|
+
| `contexta.contract` | Stable | Canonical models, validation, serialization | When you work directly with schema-level types |
|
|
162
|
+
| `contexta.capture` | Stable | Runtime capture scopes and emissions | When facade-level capture is not enough |
|
|
163
|
+
| `contexta.store.metadata` | Stable | Metadata truth plane | Advanced store access |
|
|
164
|
+
| `contexta.store.records` | Stable | Record truth plane | Replay, scan, export, integrity workflows |
|
|
165
|
+
| `contexta.store.artifacts` | Stable | Artifact truth plane | Artifact ingest, verify, export, import |
|
|
166
|
+
| `contexta.interpretation` | Stable | Query, compare, diagnostics, lineage, reports | Read and investigation flows |
|
|
167
|
+
| `contexta.recovery` | Advanced | Replay, backup, restore | Operator and recovery work |
|
|
168
|
+
|
|
169
|
+
The internal namespaces `contexta.api`, `contexta.runtime`, `contexta.common`, and `contexta.surfaces` are not documented as public import targets.
|
|
170
|
+
|
|
171
|
+
## Documentation Map
|
|
172
|
+
|
|
173
|
+
The public documentation set is being built in the following structure:
|
|
174
|
+
|
|
175
|
+
### Core Entry Points
|
|
176
|
+
|
|
177
|
+
- `README.md`
|
|
178
|
+
- product overview, install, quickstart, migration note
|
|
179
|
+
- `docs/index.md`
|
|
180
|
+
- document hub
|
|
181
|
+
|
|
182
|
+
### User Guide
|
|
183
|
+
|
|
184
|
+
- `docs/user-guide/index.md`
|
|
185
|
+
- `docs/user-guide/key-features.md`
|
|
186
|
+
- `docs/user-guide/tools-and-surfaces.md`
|
|
187
|
+
- `docs/user-guide/core-concepts.md`
|
|
188
|
+
- `docs/user-guide/getting-started.md`
|
|
189
|
+
- `docs/user-guide/common-workflows.md`
|
|
190
|
+
- `docs/user-guide/advanced.md`
|
|
191
|
+
- `docs/user-guide/testing.md`
|
|
192
|
+
|
|
193
|
+
### Reference
|
|
194
|
+
|
|
195
|
+
- `docs/reference/api-reference.md`
|
|
196
|
+
- `docs/reference/cli-reference.md`
|
|
197
|
+
- `docs/reference/http-reference.md`
|
|
198
|
+
|
|
199
|
+
### Operations And Contribution
|
|
200
|
+
|
|
201
|
+
- `docs/operations.md`
|
|
202
|
+
- `docs/faq.md`
|
|
203
|
+
- `CONTRIBUTING.md`
|
|
204
|
+
|
|
205
|
+
### Examples
|
|
206
|
+
|
|
207
|
+
- `examples/quickstart/`
|
|
208
|
+
- verified quickstart and runtime capture preview
|
|
209
|
+
- `examples/recovery/`
|
|
210
|
+
- operator-oriented recovery workflows
|
|
211
|
+
|
|
212
|
+
## Design Notes
|
|
213
|
+
|
|
214
|
+
The product direction is:
|
|
215
|
+
|
|
216
|
+
- local-first
|
|
217
|
+
- schema-first
|
|
218
|
+
- reproducibility-oriented
|
|
219
|
+
- explicit about degraded or incomplete states
|
|
220
|
+
|
|
221
|
+
Internally, `Contexta` keeps separate truth-owning planes for:
|
|
222
|
+
|
|
223
|
+
- metadata and relations
|
|
224
|
+
- records
|
|
225
|
+
- artifact bodies and bindings
|
|
226
|
+
|
|
227
|
+
and then builds query/report/recovery surfaces over those planes.
|
|
228
|
+
|
|
229
|
+
## Current Caveats
|
|
230
|
+
|
|
231
|
+
- Some prototype-to-release packaging polish is still in progress.
|
|
232
|
+
- Source-tree example runs still commonly use `PYTHONPATH=src`.
|
|
233
|
+
|
|
234
|
+
These are release-alignment issues, not a change in the canonical product identity.
|