actionlineage 0.1.0a2__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.
- actionlineage-0.1.0a2/.github/ISSUE_TEMPLATE/adapter_request.yml +27 -0
- actionlineage-0.1.0a2/.github/ISSUE_TEMPLATE/bug.yml +25 -0
- actionlineage-0.1.0a2/.github/ISSUE_TEMPLATE/compatibility_report.yml +27 -0
- actionlineage-0.1.0a2/.github/ISSUE_TEMPLATE/contract_gap.yml +27 -0
- actionlineage-0.1.0a2/.github/ISSUE_TEMPLATE/detection_rule.yml +27 -0
- actionlineage-0.1.0a2/.github/ISSUE_TEMPLATE/feature.yml +26 -0
- actionlineage-0.1.0a2/.github/ISSUE_TEMPLATE/security_report.yml +26 -0
- actionlineage-0.1.0a2/.github/dependabot.yml +46 -0
- actionlineage-0.1.0a2/.github/pull_request_template.md +19 -0
- actionlineage-0.1.0a2/.github/workflows/ci.yml +80 -0
- actionlineage-0.1.0a2/.github/workflows/codeql.yml +36 -0
- actionlineage-0.1.0a2/.github/workflows/dependency-review.yml +23 -0
- actionlineage-0.1.0a2/.github/workflows/release.yml +143 -0
- actionlineage-0.1.0a2/.gitignore +40 -0
- actionlineage-0.1.0a2/.pre-commit-config.yaml +7 -0
- actionlineage-0.1.0a2/.python-version +1 -0
- actionlineage-0.1.0a2/ACCEPTANCE_TESTS.md +223 -0
- actionlineage-0.1.0a2/ARCHITECTURE.md +163 -0
- actionlineage-0.1.0a2/CHANGELOG.md +29 -0
- actionlineage-0.1.0a2/CONTRIBUTING.md +32 -0
- actionlineage-0.1.0a2/LICENSE +202 -0
- actionlineage-0.1.0a2/Makefile +26 -0
- actionlineage-0.1.0a2/PKG-INFO +376 -0
- actionlineage-0.1.0a2/PRODUCT_SPEC.md +119 -0
- actionlineage-0.1.0a2/PROJECT_CHARTER.md +70 -0
- actionlineage-0.1.0a2/README.md +332 -0
- actionlineage-0.1.0a2/SECURITY.md +56 -0
- actionlineage-0.1.0a2/THREAT_MODEL.md +154 -0
- actionlineage-0.1.0a2/contracts/examples/cloud-object-write.json +57 -0
- actionlineage-0.1.0a2/contracts/examples/filesystem-observation.json +62 -0
- actionlineage-0.1.0a2/contracts/examples/mcp-tool-call.json +52 -0
- actionlineage-0.1.0a2/contracts/examples/outbound-http.json +90 -0
- actionlineage-0.1.0a2/contracts/examples/outbound-http.yaml +45 -0
- actionlineage-0.1.0a2/contracts/examples/restricted-exfiltration.json +62 -0
- actionlineage-0.1.0a2/deploy/docker/Dockerfile +7 -0
- actionlineage-0.1.0a2/deploy/docker/compose.yaml +26 -0
- actionlineage-0.1.0a2/deploy/helm/actionlineage/Chart.yaml +6 -0
- actionlineage-0.1.0a2/deploy/helm/actionlineage/templates/_helpers.tpl +18 -0
- actionlineage-0.1.0a2/deploy/helm/actionlineage/templates/deployment.yaml +73 -0
- actionlineage-0.1.0a2/deploy/helm/actionlineage/templates/pvc.yaml +14 -0
- actionlineage-0.1.0a2/deploy/helm/actionlineage/templates/secret.yaml +9 -0
- actionlineage-0.1.0a2/deploy/helm/actionlineage/templates/service.yaml +16 -0
- actionlineage-0.1.0a2/deploy/helm/actionlineage/values.yaml +35 -0
- actionlineage-0.1.0a2/deploy/kubernetes/actionlineage-service.yaml +124 -0
- actionlineage-0.1.0a2/detections/examples/restricted-read-to-untrusted-send.yaml +29 -0
- actionlineage-0.1.0a2/docs/ADR/0000-template.md +40 -0
- actionlineage-0.1.0a2/docs/ADR/0001-event-serialization-and-redaction-boundary.md +99 -0
- actionlineage-0.1.0a2/docs/ADR/0002-local-journal-hash-chain.md +92 -0
- actionlineage-0.1.0a2/docs/ADR/0003-evidence-plane-pivot.md +47 -0
- actionlineage-0.1.0a2/docs/ADR/0004-journal-anchors-and-recovery.md +76 -0
- actionlineage-0.1.0a2/docs/ADR/0005-policy-runtime-fail-behavior.md +50 -0
- actionlineage-0.1.0a2/docs/ADR/0006-minimum-corroboration-threshold.md +44 -0
- actionlineage-0.1.0a2/docs/ADR/0007-service-auth-model.md +46 -0
- actionlineage-0.1.0a2/docs/ADR/0008-static-investigation-console.md +63 -0
- actionlineage-0.1.0a2/docs/ADR/0009-postgres-projection-schema.md +36 -0
- actionlineage-0.1.0a2/docs/API_REFERENCE.md +95 -0
- actionlineage-0.1.0a2/docs/CLI_REFERENCE.md +97 -0
- actionlineage-0.1.0a2/docs/CODING_STANDARDS.md +39 -0
- actionlineage-0.1.0a2/docs/COMPATIBILITY.md +73 -0
- actionlineage-0.1.0a2/docs/CONSOLE.md +112 -0
- actionlineage-0.1.0a2/docs/DATA_MODEL.md +239 -0
- actionlineage-0.1.0a2/docs/DECISIONS_REQUIRED.md +62 -0
- actionlineage-0.1.0a2/docs/DEMO_SCENARIO.md +70 -0
- actionlineage-0.1.0a2/docs/DEPENDENCY_POLICY.md +65 -0
- actionlineage-0.1.0a2/docs/DETECTION_LAB.md +183 -0
- actionlineage-0.1.0a2/docs/FAQ.md +38 -0
- actionlineage-0.1.0a2/docs/INGESTION.md +68 -0
- actionlineage-0.1.0a2/docs/INTEGRATIONS.md +105 -0
- actionlineage-0.1.0a2/docs/INVESTIGATION.md +99 -0
- actionlineage-0.1.0a2/docs/JOURNAL_INTEGRITY.md +170 -0
- actionlineage-0.1.0a2/docs/LINEAGE_CONTRACTS.md +145 -0
- actionlineage-0.1.0a2/docs/MATURITY.md +68 -0
- actionlineage-0.1.0a2/docs/MCP_ADAPTER.md +82 -0
- actionlineage-0.1.0a2/docs/MIGRATION.md +36 -0
- actionlineage-0.1.0a2/docs/OBSERVERS.md +90 -0
- actionlineage-0.1.0a2/docs/OPENTELEMETRY_SEMCONV.md +23 -0
- actionlineage-0.1.0a2/docs/OPERATIONS.md +182 -0
- actionlineage-0.1.0a2/docs/PACKS.md +60 -0
- actionlineage-0.1.0a2/docs/PERFECTION_PLAN.md +120 -0
- actionlineage-0.1.0a2/docs/POLICY_ADAPTER.md +40 -0
- actionlineage-0.1.0a2/docs/PRIVACY.md +39 -0
- actionlineage-0.1.0a2/docs/PUBLISHING.md +104 -0
- actionlineage-0.1.0a2/docs/QUALITY_SCORECARD.md +89 -0
- actionlineage-0.1.0a2/docs/RELEASE_CHECKLIST.md +157 -0
- actionlineage-0.1.0a2/docs/RESOURCES.md +62 -0
- actionlineage-0.1.0a2/docs/ROADMAP.md +67 -0
- actionlineage-0.1.0a2/docs/SCHEMA_REFERENCE.md +41 -0
- actionlineage-0.1.0a2/docs/SECURITY_HARDENING.md +71 -0
- actionlineage-0.1.0a2/docs/TUTORIAL.md +74 -0
- actionlineage-0.1.0a2/integrations/mappings/ecs.json +12 -0
- actionlineage-0.1.0a2/integrations/mappings/ocsf.json +12 -0
- actionlineage-0.1.0a2/integrations/mappings/opentelemetry.json +21 -0
- actionlineage-0.1.0a2/integrations/mappings/sigma.json +11 -0
- actionlineage-0.1.0a2/integrations/mappings/splunk-hec.json +10 -0
- actionlineage-0.1.0a2/integrations/mappings/stix.json +20 -0
- actionlineage-0.1.0a2/integrations/mappings/taxii.json +16 -0
- actionlineage-0.1.0a2/integrations/opentelemetry/actionlineage-semconv-v0.json +71 -0
- actionlineage-0.1.0a2/pyproject.toml +77 -0
- actionlineage-0.1.0a2/scenarios/examples/restricted-exfiltration.yaml +59 -0
- actionlineage-0.1.0a2/schemas/actionlineage-event-v1alpha1.schema.json +190 -0
- actionlineage-0.1.0a2/schemas/evidence-link-v1alpha1.schema.json +58 -0
- actionlineage-0.1.0a2/scripts/check_claims_language.py +168 -0
- actionlineage-0.1.0a2/scripts/generate_release_provenance.py +104 -0
- actionlineage-0.1.0a2/scripts/generate_sbom.py +110 -0
- actionlineage-0.1.0a2/scripts/secret_scan.py +183 -0
- actionlineage-0.1.0a2/src/actionlineage/__init__.py +482 -0
- actionlineage-0.1.0a2/src/actionlineage/adapters/__init__.py +41 -0
- actionlineage-0.1.0a2/src/actionlineage/adapters/frameworks.py +313 -0
- actionlineage-0.1.0a2/src/actionlineage/adapters/mcp/__init__.py +55 -0
- actionlineage-0.1.0a2/src/actionlineage/adapters/mcp/descriptors.py +81 -0
- actionlineage-0.1.0a2/src/actionlineage/adapters/mcp/runtime.py +350 -0
- actionlineage-0.1.0a2/src/actionlineage/adapters/mcp/sdk.py +298 -0
- actionlineage-0.1.0a2/src/actionlineage/adapters/policy.py +182 -0
- actionlineage-0.1.0a2/src/actionlineage/cli.py +1102 -0
- actionlineage-0.1.0a2/src/actionlineage/compatibility.py +85 -0
- actionlineage-0.1.0a2/src/actionlineage/console/__init__.py +29 -0
- actionlineage-0.1.0a2/src/actionlineage/console/static.py +767 -0
- actionlineage-0.1.0a2/src/actionlineage/contracts/__init__.py +41 -0
- actionlineage-0.1.0a2/src/actionlineage/contracts/validation.py +963 -0
- actionlineage-0.1.0a2/src/actionlineage/demo/__init__.py +5 -0
- actionlineage-0.1.0a2/src/actionlineage/demo/scenario.py +447 -0
- actionlineage-0.1.0a2/src/actionlineage/detection/__init__.py +33 -0
- actionlineage-0.1.0a2/src/actionlineage/detection/rules.py +95 -0
- actionlineage-0.1.0a2/src/actionlineage/detection/sequence.py +783 -0
- actionlineage-0.1.0a2/src/actionlineage/domain/__init__.py +77 -0
- actionlineage-0.1.0a2/src/actionlineage/domain/events.py +307 -0
- actionlineage-0.1.0a2/src/actionlineage/domain/ids.py +39 -0
- actionlineage-0.1.0a2/src/actionlineage/domain/redaction.py +252 -0
- actionlineage-0.1.0a2/src/actionlineage/domain/serialization.py +117 -0
- actionlineage-0.1.0a2/src/actionlineage/domain/time.py +34 -0
- actionlineage-0.1.0a2/src/actionlineage/errors.py +45 -0
- actionlineage-0.1.0a2/src/actionlineage/evidence/__init__.py +39 -0
- actionlineage-0.1.0a2/src/actionlineage/evidence/ingestion.py +430 -0
- actionlineage-0.1.0a2/src/actionlineage/evidence/normalization.py +113 -0
- actionlineage-0.1.0a2/src/actionlineage/exporters/__init__.py +33 -0
- actionlineage-0.1.0a2/src/actionlineage/exporters/profiles.py +467 -0
- actionlineage-0.1.0a2/src/actionlineage/journal/__init__.py +136 -0
- actionlineage-0.1.0a2/src/actionlineage/journal/anchors.py +685 -0
- actionlineage-0.1.0a2/src/actionlineage/journal/archive.py +255 -0
- actionlineage-0.1.0a2/src/actionlineage/journal/attestation.py +207 -0
- actionlineage-0.1.0a2/src/actionlineage/journal/git_anchor.py +367 -0
- actionlineage-0.1.0a2/src/actionlineage/journal/hashing.py +77 -0
- actionlineage-0.1.0a2/src/actionlineage/journal/local.py +304 -0
- actionlineage-0.1.0a2/src/actionlineage/journal/verify.py +47 -0
- actionlineage-0.1.0a2/src/actionlineage/lab/__init__.py +29 -0
- actionlineage-0.1.0a2/src/actionlineage/lab/robustness.py +461 -0
- actionlineage-0.1.0a2/src/actionlineage/observers/__init__.py +57 -0
- actionlineage-0.1.0a2/src/actionlineage/observers/cloud.py +296 -0
- actionlineage-0.1.0a2/src/actionlineage/observers/external.py +158 -0
- actionlineage-0.1.0a2/src/actionlineage/observers/local.py +615 -0
- actionlineage-0.1.0a2/src/actionlineage/observers/verification.py +106 -0
- actionlineage-0.1.0a2/src/actionlineage/packs.py +362 -0
- actionlineage-0.1.0a2/src/actionlineage/projection/__init__.py +89 -0
- actionlineage-0.1.0a2/src/actionlineage/projection/postgres.py +276 -0
- actionlineage-0.1.0a2/src/actionlineage/projection/sqlite.py +1362 -0
- actionlineage-0.1.0a2/src/actionlineage/py.typed +1 -0
- actionlineage-0.1.0a2/src/actionlineage/service/__init__.py +55 -0
- actionlineage-0.1.0a2/src/actionlineage/service/api.py +292 -0
- actionlineage-0.1.0a2/src/actionlineage/service/auth.py +216 -0
- actionlineage-0.1.0a2/src/actionlineage/service/health.py +71 -0
- actionlineage-0.1.0a2/src/actionlineage/service/runtime.py +67 -0
- actionlineage-0.1.0a2/src/actionlineage/service/tenancy.py +149 -0
- actionlineage-0.1.0a2/tests/__init__.py +1 -0
- actionlineage-0.1.0a2/tests/adapters/__init__.py +1 -0
- actionlineage-0.1.0a2/tests/adapters/test_frameworks.py +129 -0
- actionlineage-0.1.0a2/tests/adapters/test_mcp_descriptors.py +496 -0
- actionlineage-0.1.0a2/tests/adapters/test_mcp_sdk.py +140 -0
- actionlineage-0.1.0a2/tests/compatibility/__init__.py +1 -0
- actionlineage-0.1.0a2/tests/compatibility/test_golden_journals.py +90 -0
- actionlineage-0.1.0a2/tests/compatibility/test_public_api.py +101 -0
- actionlineage-0.1.0a2/tests/console/__init__.py +1 -0
- actionlineage-0.1.0a2/tests/console/test_static_console.py +303 -0
- actionlineage-0.1.0a2/tests/contracts/__init__.py +1 -0
- actionlineage-0.1.0a2/tests/contracts/test_validation.py +295 -0
- actionlineage-0.1.0a2/tests/demo/__init__.py +1 -0
- actionlineage-0.1.0a2/tests/demo/test_scenario.py +73 -0
- actionlineage-0.1.0a2/tests/detection/__init__.py +1 -0
- actionlineage-0.1.0a2/tests/detection/test_sequence.py +438 -0
- actionlineage-0.1.0a2/tests/domain/__init__.py +1 -0
- actionlineage-0.1.0a2/tests/domain/test_events.py +159 -0
- actionlineage-0.1.0a2/tests/domain/test_evidence.py +89 -0
- actionlineage-0.1.0a2/tests/domain/test_redaction.py +114 -0
- actionlineage-0.1.0a2/tests/evidence/__init__.py +1 -0
- actionlineage-0.1.0a2/tests/evidence/test_ingestion.py +170 -0
- actionlineage-0.1.0a2/tests/evidence/test_normalization.py +58 -0
- actionlineage-0.1.0a2/tests/exporters/test_profiles.py +236 -0
- actionlineage-0.1.0a2/tests/fixtures/README.md +10 -0
- actionlineage-0.1.0a2/tests/fixtures/adversarial/README.md +5 -0
- actionlineage-0.1.0a2/tests/fixtures/adversarial/security-regressions.json +61 -0
- actionlineage-0.1.0a2/tests/fixtures/journals/baseline-v1alpha1.jsonl +1 -0
- actionlineage-0.1.0a2/tests/fixtures/journals/evidence-plane-v1alpha1.jsonl +4 -0
- actionlineage-0.1.0a2/tests/fixtures/journals/legacy-agent-tool-v1alpha1.jsonl +2 -0
- actionlineage-0.1.0a2/tests/journal/__init__.py +1 -0
- actionlineage-0.1.0a2/tests/journal/test_anchors.py +575 -0
- actionlineage-0.1.0a2/tests/journal/test_local_journal.py +272 -0
- actionlineage-0.1.0a2/tests/lab/__init__.py +1 -0
- actionlineage-0.1.0a2/tests/lab/test_robustness.py +171 -0
- actionlineage-0.1.0a2/tests/observers/test_cloud_observers.py +162 -0
- actionlineage-0.1.0a2/tests/observers/test_external_sensors.py +95 -0
- actionlineage-0.1.0a2/tests/observers/test_local_observers.py +315 -0
- actionlineage-0.1.0a2/tests/packs/test_manifest.py +181 -0
- actionlineage-0.1.0a2/tests/projection/__init__.py +1 -0
- actionlineage-0.1.0a2/tests/projection/test_postgres_projection.py +108 -0
- actionlineage-0.1.0a2/tests/projection/test_sqlite_projection.py +671 -0
- actionlineage-0.1.0a2/tests/release/__init__.py +1 -0
- actionlineage-0.1.0a2/tests/release/test_deployment_artifacts.py +86 -0
- actionlineage-0.1.0a2/tests/release/test_release_readiness.py +171 -0
- actionlineage-0.1.0a2/tests/security/__init__.py +1 -0
- actionlineage-0.1.0a2/tests/security/test_release_hardening.py +171 -0
- actionlineage-0.1.0a2/tests/service/test_service_mode.py +434 -0
- actionlineage-0.1.0a2/tests/test_smoke.py +19 -0
- actionlineage-0.1.0a2/uv.lock +1687 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
name: Adapter request
|
|
2
|
+
about: Request or scope an optional adapter integration
|
|
3
|
+
body:
|
|
4
|
+
- type: textarea
|
|
5
|
+
attributes:
|
|
6
|
+
label: Adapter target
|
|
7
|
+
description: Name the framework, protocol, service, or runtime.
|
|
8
|
+
validations:
|
|
9
|
+
required: true
|
|
10
|
+
- type: textarea
|
|
11
|
+
attributes:
|
|
12
|
+
label: Evidence mapping
|
|
13
|
+
description: Which neutral lifecycle events and evidence links should it emit?
|
|
14
|
+
validations:
|
|
15
|
+
required: true
|
|
16
|
+
- type: textarea
|
|
17
|
+
attributes:
|
|
18
|
+
label: Dependencies and trust boundary
|
|
19
|
+
description: List new dependencies, credentials, network access, and redaction concerns.
|
|
20
|
+
validations:
|
|
21
|
+
required: true
|
|
22
|
+
- type: textarea
|
|
23
|
+
attributes:
|
|
24
|
+
label: Acceptance tests
|
|
25
|
+
description: Include local fixture or mock-server tests.
|
|
26
|
+
validations:
|
|
27
|
+
required: true
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
name: Bug
|
|
2
|
+
about: Report a reproducible defect that is not a sensitive vulnerability
|
|
3
|
+
body:
|
|
4
|
+
- type: textarea
|
|
5
|
+
attributes:
|
|
6
|
+
label: Behavior
|
|
7
|
+
validations:
|
|
8
|
+
required: true
|
|
9
|
+
- type: textarea
|
|
10
|
+
attributes:
|
|
11
|
+
label: Minimal reproduction
|
|
12
|
+
description: Use synthetic/local data only.
|
|
13
|
+
validations:
|
|
14
|
+
required: true
|
|
15
|
+
- type: textarea
|
|
16
|
+
attributes:
|
|
17
|
+
label: Expected behavior
|
|
18
|
+
validations:
|
|
19
|
+
required: true
|
|
20
|
+
- type: textarea
|
|
21
|
+
attributes:
|
|
22
|
+
label: Security impact
|
|
23
|
+
description: Use private vulnerability reporting instead if sensitive.
|
|
24
|
+
validations:
|
|
25
|
+
required: true
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
name: Compatibility report
|
|
2
|
+
about: Report journal, schema, API, or CLI compatibility behavior
|
|
3
|
+
body:
|
|
4
|
+
- type: textarea
|
|
5
|
+
attributes:
|
|
6
|
+
label: Compatibility surface
|
|
7
|
+
description: Event schema, journal fixture, public API import, CLI command, or package extra.
|
|
8
|
+
validations:
|
|
9
|
+
required: true
|
|
10
|
+
- type: textarea
|
|
11
|
+
attributes:
|
|
12
|
+
label: Version and artifact
|
|
13
|
+
description: Include ActionLineage version and a minimized non-sensitive fixture.
|
|
14
|
+
validations:
|
|
15
|
+
required: true
|
|
16
|
+
- type: textarea
|
|
17
|
+
attributes:
|
|
18
|
+
label: Expected behavior
|
|
19
|
+
description: Link to the compatibility policy if applicable.
|
|
20
|
+
validations:
|
|
21
|
+
required: true
|
|
22
|
+
- type: textarea
|
|
23
|
+
attributes:
|
|
24
|
+
label: Actual behavior
|
|
25
|
+
description: Include command output with secrets removed.
|
|
26
|
+
validations:
|
|
27
|
+
required: true
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
name: Contract gap
|
|
2
|
+
about: Report missing or ambiguous telemetry contract coverage
|
|
3
|
+
body:
|
|
4
|
+
- type: textarea
|
|
5
|
+
attributes:
|
|
6
|
+
label: Control or detection dependency
|
|
7
|
+
description: What requirement cannot currently be expressed or validated?
|
|
8
|
+
validations:
|
|
9
|
+
required: true
|
|
10
|
+
- type: textarea
|
|
11
|
+
attributes:
|
|
12
|
+
label: Required evidence
|
|
13
|
+
description: List events, fields, causal links, evidence links, and statuses.
|
|
14
|
+
validations:
|
|
15
|
+
required: true
|
|
16
|
+
- type: textarea
|
|
17
|
+
attributes:
|
|
18
|
+
label: Failure mode
|
|
19
|
+
description: How should the contract fail when evidence is missing or stale?
|
|
20
|
+
validations:
|
|
21
|
+
required: true
|
|
22
|
+
- type: textarea
|
|
23
|
+
attributes:
|
|
24
|
+
label: Fixture
|
|
25
|
+
description: Provide a minimal valid or invalid journal fixture.
|
|
26
|
+
validations:
|
|
27
|
+
required: true
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
name: Detection rule
|
|
2
|
+
about: Propose or improve a sequence detection
|
|
3
|
+
body:
|
|
4
|
+
- type: textarea
|
|
5
|
+
attributes:
|
|
6
|
+
label: Threat behavior
|
|
7
|
+
description: Describe the behavior and required evidence quality.
|
|
8
|
+
validations:
|
|
9
|
+
required: true
|
|
10
|
+
- type: textarea
|
|
11
|
+
attributes:
|
|
12
|
+
label: Rule logic
|
|
13
|
+
description: List stages, grouping, time window, suppressions, and unknown semantics.
|
|
14
|
+
validations:
|
|
15
|
+
required: true
|
|
16
|
+
- type: textarea
|
|
17
|
+
attributes:
|
|
18
|
+
label: Fixtures
|
|
19
|
+
description: Provide positive, benign, ambiguous, and adversarial fixtures.
|
|
20
|
+
validations:
|
|
21
|
+
required: true
|
|
22
|
+
- type: textarea
|
|
23
|
+
attributes:
|
|
24
|
+
label: Robustness expectations
|
|
25
|
+
description: Include replay or mutation survival expectations.
|
|
26
|
+
validations:
|
|
27
|
+
required: true
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
name: Feature
|
|
2
|
+
about: Propose a bounded feature or capability
|
|
3
|
+
body:
|
|
4
|
+
- type: textarea
|
|
5
|
+
attributes:
|
|
6
|
+
label: Problem
|
|
7
|
+
description: What user/security problem should be solved?
|
|
8
|
+
validations:
|
|
9
|
+
required: true
|
|
10
|
+
- type: textarea
|
|
11
|
+
attributes:
|
|
12
|
+
label: Proposed scope
|
|
13
|
+
description: Include explicit non-goals.
|
|
14
|
+
validations:
|
|
15
|
+
required: true
|
|
16
|
+
- type: textarea
|
|
17
|
+
attributes:
|
|
18
|
+
label: Security and privacy considerations
|
|
19
|
+
validations:
|
|
20
|
+
required: true
|
|
21
|
+
- type: textarea
|
|
22
|
+
attributes:
|
|
23
|
+
label: Acceptance criteria
|
|
24
|
+
description: List executable evidence.
|
|
25
|
+
validations:
|
|
26
|
+
required: true
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
name: Security report
|
|
2
|
+
about: Non-sensitive security hardening issue
|
|
3
|
+
body:
|
|
4
|
+
- type: markdown
|
|
5
|
+
attributes:
|
|
6
|
+
value: |
|
|
7
|
+
For sensitive vulnerabilities, follow SECURITY.md and report privately.
|
|
8
|
+
Do not paste live credentials, private data, or exploit payloads here.
|
|
9
|
+
- type: textarea
|
|
10
|
+
attributes:
|
|
11
|
+
label: Area
|
|
12
|
+
description: Redaction, journal integrity, adapter boundary, policy behavior, service auth, supply chain, or documentation claim.
|
|
13
|
+
validations:
|
|
14
|
+
required: true
|
|
15
|
+
- type: textarea
|
|
16
|
+
attributes:
|
|
17
|
+
label: Risk
|
|
18
|
+
description: What could go wrong, and what evidence supports the concern?
|
|
19
|
+
validations:
|
|
20
|
+
required: true
|
|
21
|
+
- type: textarea
|
|
22
|
+
attributes:
|
|
23
|
+
label: Safe reproduction
|
|
24
|
+
description: Use synthetic/local data only.
|
|
25
|
+
validations:
|
|
26
|
+
required: true
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
version: 2
|
|
2
|
+
updates:
|
|
3
|
+
- package-ecosystem: "uv"
|
|
4
|
+
directory: "/"
|
|
5
|
+
schedule:
|
|
6
|
+
interval: "weekly"
|
|
7
|
+
day: "monday"
|
|
8
|
+
time: "09:00"
|
|
9
|
+
timezone: "America/Chicago"
|
|
10
|
+
open-pull-requests-limit: 5
|
|
11
|
+
labels:
|
|
12
|
+
- "dependencies"
|
|
13
|
+
- "python"
|
|
14
|
+
commit-message:
|
|
15
|
+
prefix: "chore"
|
|
16
|
+
include: "scope"
|
|
17
|
+
|
|
18
|
+
- package-ecosystem: "github-actions"
|
|
19
|
+
directory: "/"
|
|
20
|
+
schedule:
|
|
21
|
+
interval: "weekly"
|
|
22
|
+
day: "monday"
|
|
23
|
+
time: "09:30"
|
|
24
|
+
timezone: "America/Chicago"
|
|
25
|
+
open-pull-requests-limit: 5
|
|
26
|
+
labels:
|
|
27
|
+
- "dependencies"
|
|
28
|
+
- "github-actions"
|
|
29
|
+
commit-message:
|
|
30
|
+
prefix: "chore"
|
|
31
|
+
include: "scope"
|
|
32
|
+
|
|
33
|
+
- package-ecosystem: "docker"
|
|
34
|
+
directory: "/deploy/docker"
|
|
35
|
+
schedule:
|
|
36
|
+
interval: "weekly"
|
|
37
|
+
day: "monday"
|
|
38
|
+
time: "10:00"
|
|
39
|
+
timezone: "America/Chicago"
|
|
40
|
+
open-pull-requests-limit: 3
|
|
41
|
+
labels:
|
|
42
|
+
- "dependencies"
|
|
43
|
+
- "docker"
|
|
44
|
+
commit-message:
|
|
45
|
+
prefix: "chore"
|
|
46
|
+
include: "scope"
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
## Summary
|
|
2
|
+
|
|
3
|
+
## Scope / non-goals
|
|
4
|
+
|
|
5
|
+
## Security impact
|
|
6
|
+
|
|
7
|
+
## Public API or schema impact
|
|
8
|
+
|
|
9
|
+
## Verification
|
|
10
|
+
|
|
11
|
+
- [ ] `uv run ruff check .`
|
|
12
|
+
- [ ] `uv run ruff format --check .`
|
|
13
|
+
- [ ] `uv run mypy src`
|
|
14
|
+
- [ ] `uv run pytest`
|
|
15
|
+
- [ ] Security-sensitive negative tests added or reviewed
|
|
16
|
+
- [ ] Documentation/ADR updated where required
|
|
17
|
+
- [ ] No real credentials, incident data, or proprietary material included
|
|
18
|
+
|
|
19
|
+
## Remaining risks or follow-ups
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
name: ci
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: read
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
python:
|
|
13
|
+
runs-on: ubuntu-latest
|
|
14
|
+
steps:
|
|
15
|
+
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0
|
|
16
|
+
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405
|
|
17
|
+
with:
|
|
18
|
+
python-version: '3.13'
|
|
19
|
+
- name: Install uv
|
|
20
|
+
run: python -m pip install --upgrade uv
|
|
21
|
+
- name: Sync
|
|
22
|
+
run: uv sync --all-extras
|
|
23
|
+
- name: CLI smoke
|
|
24
|
+
run: |
|
|
25
|
+
uv run actionlineage version
|
|
26
|
+
uv run actionlineage doctor
|
|
27
|
+
- name: Lint
|
|
28
|
+
run: uv run ruff check .
|
|
29
|
+
- name: Format check
|
|
30
|
+
run: uv run ruff format --check .
|
|
31
|
+
- name: Type check
|
|
32
|
+
run: uv run mypy src
|
|
33
|
+
- name: Test
|
|
34
|
+
run: uv run pytest
|
|
35
|
+
- name: Claim-language guard
|
|
36
|
+
run: uv run python scripts/check_claims_language.py .
|
|
37
|
+
- name: Secret scan
|
|
38
|
+
run: uv run python scripts/secret_scan.py .
|
|
39
|
+
- name: Generate SBOM
|
|
40
|
+
run: uv run python scripts/generate_sbom.py --output /tmp/actionlineage-sbom.json
|
|
41
|
+
- name: Dependency audit
|
|
42
|
+
run: uv run pip-audit
|
|
43
|
+
- name: Build distribution artifacts
|
|
44
|
+
run: uv build --out-dir /tmp/actionlineage-dist
|
|
45
|
+
- name: Generate release provenance
|
|
46
|
+
run: |
|
|
47
|
+
uv run python scripts/generate_release_provenance.py \
|
|
48
|
+
--dist-dir /tmp/actionlineage-dist \
|
|
49
|
+
--output /tmp/actionlineage-release-provenance.json
|
|
50
|
+
|
|
51
|
+
container:
|
|
52
|
+
runs-on: ubuntu-latest
|
|
53
|
+
timeout-minutes: 20
|
|
54
|
+
steps:
|
|
55
|
+
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0
|
|
56
|
+
- name: Build Docker image
|
|
57
|
+
run: docker build -f deploy/docker/Dockerfile -t actionlineage:ci .
|
|
58
|
+
- name: CLI smoke in Docker image
|
|
59
|
+
run: |
|
|
60
|
+
docker run --rm actionlineage:ci version
|
|
61
|
+
docker run --rm actionlineage:ci doctor
|
|
62
|
+
- name: Demo evidence smoke in Docker image
|
|
63
|
+
run: |
|
|
64
|
+
rm -rf build/docker-ci
|
|
65
|
+
mkdir -p build/docker-ci
|
|
66
|
+
docker run --rm \
|
|
67
|
+
-v "$PWD/build/docker-ci:/artifacts" \
|
|
68
|
+
actionlineage:ci demo run --output-dir /artifacts/demo
|
|
69
|
+
docker run --rm \
|
|
70
|
+
-v "$PWD/build/docker-ci:/artifacts" \
|
|
71
|
+
actionlineage:ci journal verify /artifacts/demo/evidence.jsonl
|
|
72
|
+
docker run --rm \
|
|
73
|
+
-v "$PWD/build/docker-ci:/artifacts" \
|
|
74
|
+
actionlineage:ci projection timeline /artifacts/demo/projection.sqlite \
|
|
75
|
+
--trace-id trace_demo_evidence_plane
|
|
76
|
+
docker run --rm \
|
|
77
|
+
-v "$PWD/build/docker-ci:/artifacts" \
|
|
78
|
+
actionlineage:ci contract validate \
|
|
79
|
+
/app/contracts/examples/outbound-http.json \
|
|
80
|
+
/artifacts/demo/evidence.jsonl
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
name: codeql
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [main]
|
|
8
|
+
schedule:
|
|
9
|
+
- cron: "23 6 * * 1"
|
|
10
|
+
workflow_dispatch:
|
|
11
|
+
|
|
12
|
+
permissions:
|
|
13
|
+
actions: read
|
|
14
|
+
contents: read
|
|
15
|
+
security-events: write
|
|
16
|
+
|
|
17
|
+
jobs:
|
|
18
|
+
analyze:
|
|
19
|
+
name: CodeQL analysis
|
|
20
|
+
runs-on: ubuntu-latest
|
|
21
|
+
timeout-minutes: 20
|
|
22
|
+
|
|
23
|
+
steps:
|
|
24
|
+
- name: Checkout
|
|
25
|
+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0
|
|
26
|
+
|
|
27
|
+
- name: Initialize CodeQL
|
|
28
|
+
uses: github/codeql-action/init@8aad20d150bbac5944a9f9d289da16a4b0d87c1e
|
|
29
|
+
with:
|
|
30
|
+
languages: python
|
|
31
|
+
queries: security-and-quality
|
|
32
|
+
|
|
33
|
+
- name: Perform CodeQL analysis
|
|
34
|
+
uses: github/codeql-action/analyze@8aad20d150bbac5944a9f9d289da16a4b0d87c1e
|
|
35
|
+
with:
|
|
36
|
+
category: "/language:python"
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
name: dependency-review
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
branches: [main]
|
|
6
|
+
|
|
7
|
+
permissions:
|
|
8
|
+
contents: read
|
|
9
|
+
pull-requests: read
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
dependency-review:
|
|
13
|
+
name: Dependency review
|
|
14
|
+
runs-on: ubuntu-latest
|
|
15
|
+
steps:
|
|
16
|
+
- name: Checkout
|
|
17
|
+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0
|
|
18
|
+
|
|
19
|
+
- name: Review dependency changes
|
|
20
|
+
uses: actions/dependency-review-action@a1d282b36b6f3519aa1f3fc636f609c47dddb294
|
|
21
|
+
with:
|
|
22
|
+
fail-on-severity: high
|
|
23
|
+
deny-licenses: GPL-2.0, GPL-3.0, AGPL-1.0, AGPL-3.0
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
name: release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- "v*"
|
|
7
|
+
workflow_dispatch:
|
|
8
|
+
inputs:
|
|
9
|
+
publish_target:
|
|
10
|
+
description: "Package index publishing target"
|
|
11
|
+
required: true
|
|
12
|
+
default: "none"
|
|
13
|
+
type: choice
|
|
14
|
+
options:
|
|
15
|
+
- "none"
|
|
16
|
+
- "testpypi"
|
|
17
|
+
- "pypi"
|
|
18
|
+
|
|
19
|
+
permissions:
|
|
20
|
+
contents: read
|
|
21
|
+
|
|
22
|
+
jobs:
|
|
23
|
+
verify:
|
|
24
|
+
name: Verify release candidate
|
|
25
|
+
runs-on: ubuntu-latest
|
|
26
|
+
steps:
|
|
27
|
+
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0
|
|
28
|
+
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405
|
|
29
|
+
with:
|
|
30
|
+
python-version: "3.13"
|
|
31
|
+
- name: Install uv
|
|
32
|
+
run: python -m pip install --upgrade uv
|
|
33
|
+
- name: Sync
|
|
34
|
+
run: uv sync --locked --all-extras
|
|
35
|
+
- name: Lint
|
|
36
|
+
run: uv run ruff check .
|
|
37
|
+
- name: Format check
|
|
38
|
+
run: uv run ruff format --check .
|
|
39
|
+
- name: Type check
|
|
40
|
+
run: uv run mypy src
|
|
41
|
+
- name: Test
|
|
42
|
+
run: uv run pytest
|
|
43
|
+
- name: Claim-language guard
|
|
44
|
+
run: uv run python scripts/check_claims_language.py .
|
|
45
|
+
- name: Secret scan
|
|
46
|
+
run: uv run python scripts/secret_scan.py .
|
|
47
|
+
- name: Dependency audit
|
|
48
|
+
run: uv run pip-audit
|
|
49
|
+
|
|
50
|
+
build:
|
|
51
|
+
name: Build release artifacts
|
|
52
|
+
runs-on: ubuntu-latest
|
|
53
|
+
needs: verify
|
|
54
|
+
steps:
|
|
55
|
+
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0
|
|
56
|
+
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405
|
|
57
|
+
with:
|
|
58
|
+
python-version: "3.13"
|
|
59
|
+
- name: Install uv
|
|
60
|
+
run: python -m pip install --upgrade uv
|
|
61
|
+
- name: Sync
|
|
62
|
+
run: uv sync --locked --all-extras
|
|
63
|
+
- name: Build wheel and source distribution
|
|
64
|
+
run: uv build --out-dir dist
|
|
65
|
+
- name: Generate SBOM
|
|
66
|
+
run: uv run python scripts/generate_sbom.py --output build/release/actionlineage-sbom.json
|
|
67
|
+
- name: Generate local release provenance
|
|
68
|
+
run: |
|
|
69
|
+
uv run python scripts/generate_release_provenance.py \
|
|
70
|
+
--dist-dir dist \
|
|
71
|
+
--output build/release/actionlineage-provenance.json
|
|
72
|
+
- name: Generate checksums
|
|
73
|
+
run: sha256sum dist/* build/release/* > build/release/SHA256SUMS.txt
|
|
74
|
+
- name: Upload release artifacts
|
|
75
|
+
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4
|
|
76
|
+
with:
|
|
77
|
+
name: actionlineage-release-artifacts
|
|
78
|
+
path: |
|
|
79
|
+
dist/*
|
|
80
|
+
build/release/*
|
|
81
|
+
if-no-files-found: error
|
|
82
|
+
|
|
83
|
+
attest:
|
|
84
|
+
name: Attest release artifacts
|
|
85
|
+
runs-on: ubuntu-latest
|
|
86
|
+
needs: build
|
|
87
|
+
permissions:
|
|
88
|
+
attestations: write
|
|
89
|
+
contents: read
|
|
90
|
+
id-token: write
|
|
91
|
+
steps:
|
|
92
|
+
- name: Download release artifacts
|
|
93
|
+
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0
|
|
94
|
+
with:
|
|
95
|
+
name: actionlineage-release-artifacts
|
|
96
|
+
path: release-artifacts
|
|
97
|
+
- name: Generate artifact attestations
|
|
98
|
+
uses: actions/attest@59d89421af93a897026c735860bf21b6eb4f7b26
|
|
99
|
+
with:
|
|
100
|
+
subject-path: "release-artifacts/**"
|
|
101
|
+
|
|
102
|
+
publish-testpypi:
|
|
103
|
+
name: Publish to TestPyPI
|
|
104
|
+
runs-on: ubuntu-latest
|
|
105
|
+
needs: attest
|
|
106
|
+
if: github.event_name == 'workflow_dispatch' && inputs.publish_target == 'testpypi' && startsWith(github.ref, 'refs/tags/v')
|
|
107
|
+
environment:
|
|
108
|
+
name: testpypi
|
|
109
|
+
url: https://test.pypi.org/project/actionlineage/
|
|
110
|
+
permissions:
|
|
111
|
+
id-token: write
|
|
112
|
+
steps:
|
|
113
|
+
- name: Download release artifacts
|
|
114
|
+
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0
|
|
115
|
+
with:
|
|
116
|
+
name: actionlineage-release-artifacts
|
|
117
|
+
path: release-artifacts
|
|
118
|
+
- name: Publish package distributions to TestPyPI
|
|
119
|
+
uses: pypa/gh-action-pypi-publish@cef221092ed1bacb1cc03d23a2d87d1d172e277b
|
|
120
|
+
with:
|
|
121
|
+
packages-dir: release-artifacts/dist
|
|
122
|
+
repository-url: https://test.pypi.org/legacy/
|
|
123
|
+
|
|
124
|
+
publish-pypi:
|
|
125
|
+
name: Publish to PyPI
|
|
126
|
+
runs-on: ubuntu-latest
|
|
127
|
+
needs: attest
|
|
128
|
+
if: github.event_name == 'workflow_dispatch' && inputs.publish_target == 'pypi' && startsWith(github.ref, 'refs/tags/v')
|
|
129
|
+
environment:
|
|
130
|
+
name: pypi
|
|
131
|
+
url: https://pypi.org/project/actionlineage/
|
|
132
|
+
permissions:
|
|
133
|
+
id-token: write
|
|
134
|
+
steps:
|
|
135
|
+
- name: Download release artifacts
|
|
136
|
+
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0
|
|
137
|
+
with:
|
|
138
|
+
name: actionlineage-release-artifacts
|
|
139
|
+
path: release-artifacts
|
|
140
|
+
- name: Publish package distributions to PyPI
|
|
141
|
+
uses: pypa/gh-action-pypi-publish@cef221092ed1bacb1cc03d23a2d87d1d172e277b
|
|
142
|
+
with:
|
|
143
|
+
packages-dir: release-artifacts/dist
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
__pycache__/
|
|
2
|
+
*.py[cod]
|
|
3
|
+
.pytest_cache/
|
|
4
|
+
.mypy_cache/
|
|
5
|
+
.ruff_cache/
|
|
6
|
+
.coverage
|
|
7
|
+
htmlcov/
|
|
8
|
+
.venv/
|
|
9
|
+
.env
|
|
10
|
+
*.log
|
|
11
|
+
*.db
|
|
12
|
+
*.sqlite
|
|
13
|
+
*.sqlite3
|
|
14
|
+
.journal/
|
|
15
|
+
.dist/
|
|
16
|
+
dist/
|
|
17
|
+
build/
|
|
18
|
+
*.egg-info/
|
|
19
|
+
node_modules/
|
|
20
|
+
.DS_Store
|
|
21
|
+
.idea/
|
|
22
|
+
.vscode/
|
|
23
|
+
|
|
24
|
+
# Local assistant instructions and scratch prompts.
|
|
25
|
+
AGENTS.md
|
|
26
|
+
CLAUDE.md
|
|
27
|
+
GEMINI.md
|
|
28
|
+
Uplift.md
|
|
29
|
+
.aider*
|
|
30
|
+
.continue/
|
|
31
|
+
.cursor/
|
|
32
|
+
.cursorignore
|
|
33
|
+
.roo/
|
|
34
|
+
.roomodes
|
|
35
|
+
.windsurf/
|
|
36
|
+
.windsurfrules
|
|
37
|
+
.codex-log/
|
|
38
|
+
codex/
|
|
39
|
+
.codex/
|
|
40
|
+
prompts/
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.13
|