activity-core/history/2026-08-23-bounded-operation-compatibility-report.md
tegwick 26934e25b9
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 1s
Build and Publish Container Image / build-and-push (push) Successful in 21s
Enforce bounded operation guardrails
Assistant: codex
Assistant-Model: gpt-5.6-sol
Assistant-Session: 01a028de-e2c8-7732-8521-46a7fc5db82f
2026-08-23 12:31:13 +02:00

43 lines
2.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Bounded-operation compatibility report — 2026-08-23
Scope: all 12 checked-in `activity-definitions/*.md` files plus the production
runtime projection in `k8s/railiance/20-runtime.yaml`.
## Baseline classification
The pre-enforcement inventory found three mutating definitions:
| Definition | Previous source/query | Admitted operation | Bound |
| --- | --- | --- | --- |
| `daily-sbom-catchup` | `sbom-nexus/catch_up` | `sbom_nexus_ingest` | `apply` explicit; limit 13; mandatory `sbom_catchup` report sink |
| `weekly-forgejo-package-prune` | `shell/forgejo_package_prune` | `forgejo_package_prune` | canonical script; `apply` explicit; retain 110; protected live-image file; one Temporal attempt |
| `daily-cnpg-option-a-backup` | `shell/cnpg_option_a_backup` | `cnpg_option_a_backup` | canonical script; `dry_run` explicit; 110 named targets; timeout ≤7200s; one Temporal attempt |
The other nine definitions contain no mutating source. Three named `shell`
queries remain registered as read-only discovery/report queries. No definition
contained definition-supplied command text or an unknown shell query.
## Migration result
The three definitions and their Kubernetes projection now declare an explicit
code-owned `operation` id. Strict parsing succeeds for all 12 definitions.
Negative tests prove refusal of unknown shell queries, missing/mismatched
operation ids, arbitrary script paths, absent evidence sinks, excessive target
or SBOM limits, and multiple operations in one definition.
Package prune and CNPG backup dispatch moved out of the generic shell resolver.
Their activity result crosses the Temporal boundary only after operation-specific
allowlist projection; raw stdout/stderr and credential-shaped fields are not
workflow context or progress evidence.
## Legacy executor production inventory
Before removal, read-only production checks found:
- `task_instances`: `0` rows; `max(created_at) = none`;
- worker deployment: no `ACTIVITY_CORE_ENABLE_TASK_EXECUTOR_STUB` variable; and
- Temporal visibility query for `WorkflowType="TaskExecutorWorkflow"`: `[]`.
This met the ACTIVITY-WP-0035-T07 removal gate. Migration `0009` drops the empty
table and renames the spawn-audit column from `review_required` to
`review_advisory`.