diff --git a/docs/emission-cadence/activity-core-evidence.yaml b/docs/emission-cadence/activity-core-evidence.yaml new file mode 100644 index 0000000..bed773f --- /dev/null +++ b/docs/emission-cadence/activity-core-evidence.yaml @@ -0,0 +1,58 @@ +# Source-owned Emission Cadence declaration (info-tech-canon INFO-WP-0029-T03). +# Contract: info-tech-canon emission-cadence candidate, document 0.2.0, +# wire schema 0.1, contract digest b08b4d95fc4b0bd3. +# This states intended cadence only. It is not evidence that the events are +# emitted, and it is not a conformance claim. +# +# Events are State Hub progress events written by activity-core's declared +# evidence/report sinks, one per scheduled activation of the named +# ActivityDefinition (activity-definitions/.md). Schedules are fixed-time +# Temporal cron schedules, so windows include slack for run duration. +schema_version: "0.1" +declaration_id: activity-core.scheduled-evidence.v1 +source: activity-core +stream_id: activity-core.state-hub-progress +sources: + - source_id: activity-core.daily-cnpg-option-a-backup + source_system: railiance01/activity-core + event_class: cnpg_option_a_backup + form: expected-rate + window: PT26H # cron "30 2 * * *" UTC; 24h period + 2h run slack + expected_min: 1 + drop_below: finding + extensions: + activity-core: + definition: daily-cnpg-option-a-backup + schedule: "30 2 * * * UTC" + - source_id: activity-core.weekly-forgejo-package-prune + source_system: railiance01/activity-core + event_class: forgejo_package_prune + form: expected-rate + window: P8D # cron "30 3 * * 0" UTC; 7d period + 1d slack + expected_min: 1 + drop_below: finding + extensions: + activity-core: + definition: weekly-forgejo-package-prune + schedule: "30 3 * * 0 UTC" + - source_id: activity-core.daily-sbom-catchup + source_system: railiance01/activity-core + event_class: sbom_catchup + form: heartbeat-or-reconciliation + reconciliation: + compare_local: activity_runs.count(definition_id=daily-sbom-catchup) + compare_observed: state_hub_progress.count(event_type=sbom_catchup) + divergence: finding + undrained_local: lag-not-divergence + extensions: + activity-core: + definition: daily-sbom-catchup + schedule: "15 9 * * 1-5 Europe/Berlin" + incompatibility: >- + expected-rate cannot express a weekday-only schedule. A PT26H window + raises a false finding every Saturday, Sunday and Monday morning; a + window long enough to span the weekend (P4D) hides a three-day + outage midweek. Declared as reconciliation against local activation + records instead. Suggested change: allow an expected-rate entry to + name a calendar (e.g. a cron expression and timezone) so the window + is counted in scheduled slots rather than wall-clock time. diff --git a/docs/evidence/ACTIVITY-WP-0036-queue-boundary-rollout-2026-08-23.md b/docs/evidence/ACTIVITY-WP-0036-queue-boundary-rollout-2026-08-23.md index 5de9fca..6ab8345 100644 --- a/docs/evidence/ACTIVITY-WP-0036-queue-boundary-rollout-2026-08-23.md +++ b/docs/evidence/ACTIVITY-WP-0036-queue-boundary-rollout-2026-08-23.md @@ -41,3 +41,28 @@ rejection. No run was actively leased during the rollout window, so a natural production heartbeat plus a rejected late close remains the final T04 evidence. This does not weaken the deployed enforcement; it avoids changing unrelated production work solely to create a demonstration row. + +## Natural heartbeat evidence (2026-09-22) + +Reported by rein-aharness in State Hub message +`c217e92f-0968-416f-9def-fd8ab4a436f3` (thread +`1250c36a-9fe8-45dc-bb5a-d5fa85e49fd0`): + +- rein-aharness `44f5bb9` heartbeats once immediately after claim and before + dispatch; a 409 on that heartbeat fails closed before dispatch + (`stage=pre-dispatch-heartbeat`). Deployed on railiance01 in claim-loop tree + `11020e8`; `rein-aharness-claim-loop.service` active since + 2026-09-13 20:52:18 UTC. +- 19 natural claims since then logged an accepted initial heartbeat, and none + were rejected. +- Natural trace, run `a19455cd-2d25-43f5-a0af-1a6af0910d37` + (fi-research-brief, 2026-09-14): `05:30:25.388` heartbeat HTTP 200, then + `05:30:29.138` complete HTTP 200, state `succeeded`. + +This is evidence the counterparty attested. It was not re-read from actcore-api logs or +the production database in this session. The T04 acceptance (authenticated +claim, active heartbeat, and a rejected mismatched *or* expired mutation) is +met: claim and 403 mismatch above, heartbeat here. Server-side expiry +rejection is proven by the deterministic suite. rein-aharness's labelled +late-close smoke remains an optional follow-up on their side and does not gate this +workplan. diff --git a/workplans/ACTIVITY-WP-0036-queue-identity-and-lease-integrity.md b/workplans/ACTIVITY-WP-0036-queue-identity-and-lease-integrity.md index faf0ed1..d8f4cb7 100644 --- a/workplans/ACTIVITY-WP-0036-queue-identity-and-lease-integrity.md +++ b/workplans/ACTIVITY-WP-0036-queue-identity-and-lease-integrity.md @@ -4,13 +4,13 @@ type: workplan title: "Bind queue mutations to worker identity and active leases" domain: infotech repo: activity-core -status: active +status: finished flavor: implementation owner: codex topic_slug: activity-core priority: high created: "2026-08-23" -updated: "2026-09-04" +updated: "2026-09-22" related: - ACT-ADR-005 - ACTIVITY-WP-0026 @@ -122,7 +122,7 @@ existing explicit opt-in, and the former implicit open mode is gone. ```task id: ACTIVITY-WP-0036-T04 -status: progress +status: done priority: high state_hub_task_id: "1228e10a-067b-54db-baa3-a8fc9549492b" ``` @@ -161,3 +161,13 @@ lease enforcement is absent. State Hub message immediately after claim, retain periodic heartbeats, and return a natural claim/heartbeat/close trace. It also requests an isolated labeled late-close smoke; no real workload will be delayed or expired to manufacture evidence. + +Closed 2026-09-22: rein-aharness `44f5bb9` now heartbeats immediately after +claim. It reported 19 natural claims with accepted heartbeats and no +rejections. Its natural trace for run `a19455cd` shows heartbeat HTTP 200, then +complete HTTP 200 (message `c217e92f`). Together with the 2026-08-23 claim and +spoofed-identity 403, this meets the acceptance. The late-close smoke is an +optional rein-side follow-up. Evidence is appended to +`docs/evidence/ACTIVITY-WP-0036-queue-boundary-rollout-2026-08-23.md`. That +evidence was reported by rein-aharness and not re-read from production in this +session.