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.
Files changed (212) hide show
  1. actionlineage-0.1.0a2/.github/ISSUE_TEMPLATE/adapter_request.yml +27 -0
  2. actionlineage-0.1.0a2/.github/ISSUE_TEMPLATE/bug.yml +25 -0
  3. actionlineage-0.1.0a2/.github/ISSUE_TEMPLATE/compatibility_report.yml +27 -0
  4. actionlineage-0.1.0a2/.github/ISSUE_TEMPLATE/contract_gap.yml +27 -0
  5. actionlineage-0.1.0a2/.github/ISSUE_TEMPLATE/detection_rule.yml +27 -0
  6. actionlineage-0.1.0a2/.github/ISSUE_TEMPLATE/feature.yml +26 -0
  7. actionlineage-0.1.0a2/.github/ISSUE_TEMPLATE/security_report.yml +26 -0
  8. actionlineage-0.1.0a2/.github/dependabot.yml +46 -0
  9. actionlineage-0.1.0a2/.github/pull_request_template.md +19 -0
  10. actionlineage-0.1.0a2/.github/workflows/ci.yml +80 -0
  11. actionlineage-0.1.0a2/.github/workflows/codeql.yml +36 -0
  12. actionlineage-0.1.0a2/.github/workflows/dependency-review.yml +23 -0
  13. actionlineage-0.1.0a2/.github/workflows/release.yml +143 -0
  14. actionlineage-0.1.0a2/.gitignore +40 -0
  15. actionlineage-0.1.0a2/.pre-commit-config.yaml +7 -0
  16. actionlineage-0.1.0a2/.python-version +1 -0
  17. actionlineage-0.1.0a2/ACCEPTANCE_TESTS.md +223 -0
  18. actionlineage-0.1.0a2/ARCHITECTURE.md +163 -0
  19. actionlineage-0.1.0a2/CHANGELOG.md +29 -0
  20. actionlineage-0.1.0a2/CONTRIBUTING.md +32 -0
  21. actionlineage-0.1.0a2/LICENSE +202 -0
  22. actionlineage-0.1.0a2/Makefile +26 -0
  23. actionlineage-0.1.0a2/PKG-INFO +376 -0
  24. actionlineage-0.1.0a2/PRODUCT_SPEC.md +119 -0
  25. actionlineage-0.1.0a2/PROJECT_CHARTER.md +70 -0
  26. actionlineage-0.1.0a2/README.md +332 -0
  27. actionlineage-0.1.0a2/SECURITY.md +56 -0
  28. actionlineage-0.1.0a2/THREAT_MODEL.md +154 -0
  29. actionlineage-0.1.0a2/contracts/examples/cloud-object-write.json +57 -0
  30. actionlineage-0.1.0a2/contracts/examples/filesystem-observation.json +62 -0
  31. actionlineage-0.1.0a2/contracts/examples/mcp-tool-call.json +52 -0
  32. actionlineage-0.1.0a2/contracts/examples/outbound-http.json +90 -0
  33. actionlineage-0.1.0a2/contracts/examples/outbound-http.yaml +45 -0
  34. actionlineage-0.1.0a2/contracts/examples/restricted-exfiltration.json +62 -0
  35. actionlineage-0.1.0a2/deploy/docker/Dockerfile +7 -0
  36. actionlineage-0.1.0a2/deploy/docker/compose.yaml +26 -0
  37. actionlineage-0.1.0a2/deploy/helm/actionlineage/Chart.yaml +6 -0
  38. actionlineage-0.1.0a2/deploy/helm/actionlineage/templates/_helpers.tpl +18 -0
  39. actionlineage-0.1.0a2/deploy/helm/actionlineage/templates/deployment.yaml +73 -0
  40. actionlineage-0.1.0a2/deploy/helm/actionlineage/templates/pvc.yaml +14 -0
  41. actionlineage-0.1.0a2/deploy/helm/actionlineage/templates/secret.yaml +9 -0
  42. actionlineage-0.1.0a2/deploy/helm/actionlineage/templates/service.yaml +16 -0
  43. actionlineage-0.1.0a2/deploy/helm/actionlineage/values.yaml +35 -0
  44. actionlineage-0.1.0a2/deploy/kubernetes/actionlineage-service.yaml +124 -0
  45. actionlineage-0.1.0a2/detections/examples/restricted-read-to-untrusted-send.yaml +29 -0
  46. actionlineage-0.1.0a2/docs/ADR/0000-template.md +40 -0
  47. actionlineage-0.1.0a2/docs/ADR/0001-event-serialization-and-redaction-boundary.md +99 -0
  48. actionlineage-0.1.0a2/docs/ADR/0002-local-journal-hash-chain.md +92 -0
  49. actionlineage-0.1.0a2/docs/ADR/0003-evidence-plane-pivot.md +47 -0
  50. actionlineage-0.1.0a2/docs/ADR/0004-journal-anchors-and-recovery.md +76 -0
  51. actionlineage-0.1.0a2/docs/ADR/0005-policy-runtime-fail-behavior.md +50 -0
  52. actionlineage-0.1.0a2/docs/ADR/0006-minimum-corroboration-threshold.md +44 -0
  53. actionlineage-0.1.0a2/docs/ADR/0007-service-auth-model.md +46 -0
  54. actionlineage-0.1.0a2/docs/ADR/0008-static-investigation-console.md +63 -0
  55. actionlineage-0.1.0a2/docs/ADR/0009-postgres-projection-schema.md +36 -0
  56. actionlineage-0.1.0a2/docs/API_REFERENCE.md +95 -0
  57. actionlineage-0.1.0a2/docs/CLI_REFERENCE.md +97 -0
  58. actionlineage-0.1.0a2/docs/CODING_STANDARDS.md +39 -0
  59. actionlineage-0.1.0a2/docs/COMPATIBILITY.md +73 -0
  60. actionlineage-0.1.0a2/docs/CONSOLE.md +112 -0
  61. actionlineage-0.1.0a2/docs/DATA_MODEL.md +239 -0
  62. actionlineage-0.1.0a2/docs/DECISIONS_REQUIRED.md +62 -0
  63. actionlineage-0.1.0a2/docs/DEMO_SCENARIO.md +70 -0
  64. actionlineage-0.1.0a2/docs/DEPENDENCY_POLICY.md +65 -0
  65. actionlineage-0.1.0a2/docs/DETECTION_LAB.md +183 -0
  66. actionlineage-0.1.0a2/docs/FAQ.md +38 -0
  67. actionlineage-0.1.0a2/docs/INGESTION.md +68 -0
  68. actionlineage-0.1.0a2/docs/INTEGRATIONS.md +105 -0
  69. actionlineage-0.1.0a2/docs/INVESTIGATION.md +99 -0
  70. actionlineage-0.1.0a2/docs/JOURNAL_INTEGRITY.md +170 -0
  71. actionlineage-0.1.0a2/docs/LINEAGE_CONTRACTS.md +145 -0
  72. actionlineage-0.1.0a2/docs/MATURITY.md +68 -0
  73. actionlineage-0.1.0a2/docs/MCP_ADAPTER.md +82 -0
  74. actionlineage-0.1.0a2/docs/MIGRATION.md +36 -0
  75. actionlineage-0.1.0a2/docs/OBSERVERS.md +90 -0
  76. actionlineage-0.1.0a2/docs/OPENTELEMETRY_SEMCONV.md +23 -0
  77. actionlineage-0.1.0a2/docs/OPERATIONS.md +182 -0
  78. actionlineage-0.1.0a2/docs/PACKS.md +60 -0
  79. actionlineage-0.1.0a2/docs/PERFECTION_PLAN.md +120 -0
  80. actionlineage-0.1.0a2/docs/POLICY_ADAPTER.md +40 -0
  81. actionlineage-0.1.0a2/docs/PRIVACY.md +39 -0
  82. actionlineage-0.1.0a2/docs/PUBLISHING.md +104 -0
  83. actionlineage-0.1.0a2/docs/QUALITY_SCORECARD.md +89 -0
  84. actionlineage-0.1.0a2/docs/RELEASE_CHECKLIST.md +157 -0
  85. actionlineage-0.1.0a2/docs/RESOURCES.md +62 -0
  86. actionlineage-0.1.0a2/docs/ROADMAP.md +67 -0
  87. actionlineage-0.1.0a2/docs/SCHEMA_REFERENCE.md +41 -0
  88. actionlineage-0.1.0a2/docs/SECURITY_HARDENING.md +71 -0
  89. actionlineage-0.1.0a2/docs/TUTORIAL.md +74 -0
  90. actionlineage-0.1.0a2/integrations/mappings/ecs.json +12 -0
  91. actionlineage-0.1.0a2/integrations/mappings/ocsf.json +12 -0
  92. actionlineage-0.1.0a2/integrations/mappings/opentelemetry.json +21 -0
  93. actionlineage-0.1.0a2/integrations/mappings/sigma.json +11 -0
  94. actionlineage-0.1.0a2/integrations/mappings/splunk-hec.json +10 -0
  95. actionlineage-0.1.0a2/integrations/mappings/stix.json +20 -0
  96. actionlineage-0.1.0a2/integrations/mappings/taxii.json +16 -0
  97. actionlineage-0.1.0a2/integrations/opentelemetry/actionlineage-semconv-v0.json +71 -0
  98. actionlineage-0.1.0a2/pyproject.toml +77 -0
  99. actionlineage-0.1.0a2/scenarios/examples/restricted-exfiltration.yaml +59 -0
  100. actionlineage-0.1.0a2/schemas/actionlineage-event-v1alpha1.schema.json +190 -0
  101. actionlineage-0.1.0a2/schemas/evidence-link-v1alpha1.schema.json +58 -0
  102. actionlineage-0.1.0a2/scripts/check_claims_language.py +168 -0
  103. actionlineage-0.1.0a2/scripts/generate_release_provenance.py +104 -0
  104. actionlineage-0.1.0a2/scripts/generate_sbom.py +110 -0
  105. actionlineage-0.1.0a2/scripts/secret_scan.py +183 -0
  106. actionlineage-0.1.0a2/src/actionlineage/__init__.py +482 -0
  107. actionlineage-0.1.0a2/src/actionlineage/adapters/__init__.py +41 -0
  108. actionlineage-0.1.0a2/src/actionlineage/adapters/frameworks.py +313 -0
  109. actionlineage-0.1.0a2/src/actionlineage/adapters/mcp/__init__.py +55 -0
  110. actionlineage-0.1.0a2/src/actionlineage/adapters/mcp/descriptors.py +81 -0
  111. actionlineage-0.1.0a2/src/actionlineage/adapters/mcp/runtime.py +350 -0
  112. actionlineage-0.1.0a2/src/actionlineage/adapters/mcp/sdk.py +298 -0
  113. actionlineage-0.1.0a2/src/actionlineage/adapters/policy.py +182 -0
  114. actionlineage-0.1.0a2/src/actionlineage/cli.py +1102 -0
  115. actionlineage-0.1.0a2/src/actionlineage/compatibility.py +85 -0
  116. actionlineage-0.1.0a2/src/actionlineage/console/__init__.py +29 -0
  117. actionlineage-0.1.0a2/src/actionlineage/console/static.py +767 -0
  118. actionlineage-0.1.0a2/src/actionlineage/contracts/__init__.py +41 -0
  119. actionlineage-0.1.0a2/src/actionlineage/contracts/validation.py +963 -0
  120. actionlineage-0.1.0a2/src/actionlineage/demo/__init__.py +5 -0
  121. actionlineage-0.1.0a2/src/actionlineage/demo/scenario.py +447 -0
  122. actionlineage-0.1.0a2/src/actionlineage/detection/__init__.py +33 -0
  123. actionlineage-0.1.0a2/src/actionlineage/detection/rules.py +95 -0
  124. actionlineage-0.1.0a2/src/actionlineage/detection/sequence.py +783 -0
  125. actionlineage-0.1.0a2/src/actionlineage/domain/__init__.py +77 -0
  126. actionlineage-0.1.0a2/src/actionlineage/domain/events.py +307 -0
  127. actionlineage-0.1.0a2/src/actionlineage/domain/ids.py +39 -0
  128. actionlineage-0.1.0a2/src/actionlineage/domain/redaction.py +252 -0
  129. actionlineage-0.1.0a2/src/actionlineage/domain/serialization.py +117 -0
  130. actionlineage-0.1.0a2/src/actionlineage/domain/time.py +34 -0
  131. actionlineage-0.1.0a2/src/actionlineage/errors.py +45 -0
  132. actionlineage-0.1.0a2/src/actionlineage/evidence/__init__.py +39 -0
  133. actionlineage-0.1.0a2/src/actionlineage/evidence/ingestion.py +430 -0
  134. actionlineage-0.1.0a2/src/actionlineage/evidence/normalization.py +113 -0
  135. actionlineage-0.1.0a2/src/actionlineage/exporters/__init__.py +33 -0
  136. actionlineage-0.1.0a2/src/actionlineage/exporters/profiles.py +467 -0
  137. actionlineage-0.1.0a2/src/actionlineage/journal/__init__.py +136 -0
  138. actionlineage-0.1.0a2/src/actionlineage/journal/anchors.py +685 -0
  139. actionlineage-0.1.0a2/src/actionlineage/journal/archive.py +255 -0
  140. actionlineage-0.1.0a2/src/actionlineage/journal/attestation.py +207 -0
  141. actionlineage-0.1.0a2/src/actionlineage/journal/git_anchor.py +367 -0
  142. actionlineage-0.1.0a2/src/actionlineage/journal/hashing.py +77 -0
  143. actionlineage-0.1.0a2/src/actionlineage/journal/local.py +304 -0
  144. actionlineage-0.1.0a2/src/actionlineage/journal/verify.py +47 -0
  145. actionlineage-0.1.0a2/src/actionlineage/lab/__init__.py +29 -0
  146. actionlineage-0.1.0a2/src/actionlineage/lab/robustness.py +461 -0
  147. actionlineage-0.1.0a2/src/actionlineage/observers/__init__.py +57 -0
  148. actionlineage-0.1.0a2/src/actionlineage/observers/cloud.py +296 -0
  149. actionlineage-0.1.0a2/src/actionlineage/observers/external.py +158 -0
  150. actionlineage-0.1.0a2/src/actionlineage/observers/local.py +615 -0
  151. actionlineage-0.1.0a2/src/actionlineage/observers/verification.py +106 -0
  152. actionlineage-0.1.0a2/src/actionlineage/packs.py +362 -0
  153. actionlineage-0.1.0a2/src/actionlineage/projection/__init__.py +89 -0
  154. actionlineage-0.1.0a2/src/actionlineage/projection/postgres.py +276 -0
  155. actionlineage-0.1.0a2/src/actionlineage/projection/sqlite.py +1362 -0
  156. actionlineage-0.1.0a2/src/actionlineage/py.typed +1 -0
  157. actionlineage-0.1.0a2/src/actionlineage/service/__init__.py +55 -0
  158. actionlineage-0.1.0a2/src/actionlineage/service/api.py +292 -0
  159. actionlineage-0.1.0a2/src/actionlineage/service/auth.py +216 -0
  160. actionlineage-0.1.0a2/src/actionlineage/service/health.py +71 -0
  161. actionlineage-0.1.0a2/src/actionlineage/service/runtime.py +67 -0
  162. actionlineage-0.1.0a2/src/actionlineage/service/tenancy.py +149 -0
  163. actionlineage-0.1.0a2/tests/__init__.py +1 -0
  164. actionlineage-0.1.0a2/tests/adapters/__init__.py +1 -0
  165. actionlineage-0.1.0a2/tests/adapters/test_frameworks.py +129 -0
  166. actionlineage-0.1.0a2/tests/adapters/test_mcp_descriptors.py +496 -0
  167. actionlineage-0.1.0a2/tests/adapters/test_mcp_sdk.py +140 -0
  168. actionlineage-0.1.0a2/tests/compatibility/__init__.py +1 -0
  169. actionlineage-0.1.0a2/tests/compatibility/test_golden_journals.py +90 -0
  170. actionlineage-0.1.0a2/tests/compatibility/test_public_api.py +101 -0
  171. actionlineage-0.1.0a2/tests/console/__init__.py +1 -0
  172. actionlineage-0.1.0a2/tests/console/test_static_console.py +303 -0
  173. actionlineage-0.1.0a2/tests/contracts/__init__.py +1 -0
  174. actionlineage-0.1.0a2/tests/contracts/test_validation.py +295 -0
  175. actionlineage-0.1.0a2/tests/demo/__init__.py +1 -0
  176. actionlineage-0.1.0a2/tests/demo/test_scenario.py +73 -0
  177. actionlineage-0.1.0a2/tests/detection/__init__.py +1 -0
  178. actionlineage-0.1.0a2/tests/detection/test_sequence.py +438 -0
  179. actionlineage-0.1.0a2/tests/domain/__init__.py +1 -0
  180. actionlineage-0.1.0a2/tests/domain/test_events.py +159 -0
  181. actionlineage-0.1.0a2/tests/domain/test_evidence.py +89 -0
  182. actionlineage-0.1.0a2/tests/domain/test_redaction.py +114 -0
  183. actionlineage-0.1.0a2/tests/evidence/__init__.py +1 -0
  184. actionlineage-0.1.0a2/tests/evidence/test_ingestion.py +170 -0
  185. actionlineage-0.1.0a2/tests/evidence/test_normalization.py +58 -0
  186. actionlineage-0.1.0a2/tests/exporters/test_profiles.py +236 -0
  187. actionlineage-0.1.0a2/tests/fixtures/README.md +10 -0
  188. actionlineage-0.1.0a2/tests/fixtures/adversarial/README.md +5 -0
  189. actionlineage-0.1.0a2/tests/fixtures/adversarial/security-regressions.json +61 -0
  190. actionlineage-0.1.0a2/tests/fixtures/journals/baseline-v1alpha1.jsonl +1 -0
  191. actionlineage-0.1.0a2/tests/fixtures/journals/evidence-plane-v1alpha1.jsonl +4 -0
  192. actionlineage-0.1.0a2/tests/fixtures/journals/legacy-agent-tool-v1alpha1.jsonl +2 -0
  193. actionlineage-0.1.0a2/tests/journal/__init__.py +1 -0
  194. actionlineage-0.1.0a2/tests/journal/test_anchors.py +575 -0
  195. actionlineage-0.1.0a2/tests/journal/test_local_journal.py +272 -0
  196. actionlineage-0.1.0a2/tests/lab/__init__.py +1 -0
  197. actionlineage-0.1.0a2/tests/lab/test_robustness.py +171 -0
  198. actionlineage-0.1.0a2/tests/observers/test_cloud_observers.py +162 -0
  199. actionlineage-0.1.0a2/tests/observers/test_external_sensors.py +95 -0
  200. actionlineage-0.1.0a2/tests/observers/test_local_observers.py +315 -0
  201. actionlineage-0.1.0a2/tests/packs/test_manifest.py +181 -0
  202. actionlineage-0.1.0a2/tests/projection/__init__.py +1 -0
  203. actionlineage-0.1.0a2/tests/projection/test_postgres_projection.py +108 -0
  204. actionlineage-0.1.0a2/tests/projection/test_sqlite_projection.py +671 -0
  205. actionlineage-0.1.0a2/tests/release/__init__.py +1 -0
  206. actionlineage-0.1.0a2/tests/release/test_deployment_artifacts.py +86 -0
  207. actionlineage-0.1.0a2/tests/release/test_release_readiness.py +171 -0
  208. actionlineage-0.1.0a2/tests/security/__init__.py +1 -0
  209. actionlineage-0.1.0a2/tests/security/test_release_hardening.py +171 -0
  210. actionlineage-0.1.0a2/tests/service/test_service_mode.py +434 -0
  211. actionlineage-0.1.0a2/tests/test_smoke.py +19 -0
  212. 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,7 @@
1
+ repos:
2
+ - repo: https://github.com/astral-sh/ruff-pre-commit
3
+ rev: v0.15.18
4
+ hooks:
5
+ - id: ruff
6
+ args: [--fix]
7
+ - id: ruff-format
@@ -0,0 +1 @@
1
+ 3.13