fix(slack): drain gateway work and support safe native updates #85

Merged
karsten merged 1 commit from fix/slack-update-lifecycle into main 2026-11-11 07:23:00 +00:00
Owner

Cause

Installed standalone Slack gateway lacks foreground-owned update contract; native owner correctly refuses updates. Existing stop drained ingress and sockets but did not own whole outbound sends/uploads.

Fix

  • Declare foreground-owned only with synchronous send fencing and whole-delivery tracking (including response JSON, binary upload and persistence).
  • Stop waits for accepted ingress/egress, socket close and reconnect/start settlement; timeout still fails closed. Failed send outcomes continue to reach the Core outbox.
  • Preserve immutable install paths, credentials, permissions and replay semantics.

Verification

39 Slack tests pass, including actual Core Harness/GatewayManager hot replacement: legacy unsupported gateway -> drained non-overlapping replacement -> real update admission. Tests cover held response body, upload persistence, timed-out shutdown, failed send, reconnect, restart, durable acceptance and files.

Rollout

Explicit operator authorization: install merged exact four-file Slack module snapshot on native Karsten, hot-replace through existing Core safe boundary, obtain fresh admission, let existing native owner activate current released Core. Verify live process, Slack connection and API; no fake contract or admission bypass.

## Cause Installed standalone Slack gateway lacks foreground-owned update contract; native owner correctly refuses updates. Existing stop drained ingress and sockets but did not own whole outbound sends/uploads. ## Fix - Declare foreground-owned only with synchronous send fencing and whole-delivery tracking (including response JSON, binary upload and persistence). - Stop waits for accepted ingress/egress, socket close and reconnect/start settlement; timeout still fails closed. Failed send outcomes continue to reach the Core outbox. - Preserve immutable install paths, credentials, permissions and replay semantics. ## Verification 39 Slack tests pass, including actual Core Harness/GatewayManager hot replacement: legacy unsupported gateway -> drained non-overlapping replacement -> real update admission. Tests cover held response body, upload persistence, timed-out shutdown, failed send, reconnect, restart, durable acceptance and files. ## Rollout Explicit operator authorization: install merged exact four-file Slack module snapshot on native Karsten, hot-replace through existing Core safe boundary, obtain fresh admission, let existing native owner activate current released Core. Verify live process, Slack connection and API; no fake contract or admission bypass.
fix(slack): own and drain outbound work for safe update admission
All checks were successful
plugins-ci / compatibility (push) Successful in 2m22s
452d7a26f4
Author
Owner

Live rollout completed on native Karsten (work): exact merged f13f39bf43 four-file Slack snapshot installed under immutable home/plugins/slack/, all installed SHA256 values checked. Core startup confirms channels=matrix,slack,api,subagents,dispatch; actual Slack start performs auth.test and opens Socket Mode before completion. New process/healthy authenticated API verified. Real POST /v1/update-admission now returns HTTP 201 admitted with blockers=[], then test lease released. Existing native owner is active-verified again. No credential/admin/model/conversation/Slack-thread changes.

First activation uncovered separate Core settings defect: installation-only skills.adaptive made strict combined overlay validation reject gateway desired reload. Fixed in Core #334 (33efc9b6), full suite 1834 passed/1 skip. Because old process could not hot-replace, explicit operator-maintenance restart used conservative twice-checked durable business-work snapshots, owner flock and graceful SIGTERM; NOT a fabricated admission lease. Old process exit and exact new module selection proved. No forced kill.

Receipts on work: ~/.local/share/vanillacore-karsten/slack-maintenance.json and slack-lifecycle-rollout.json; private settings backup retained. Native Core continues following the existing normal protected-main owner. No claim of a real user-message Slack round trip; connection/start and API/admission are verified.

Live rollout completed on native Karsten (work): exact merged f13f39bf4387aacddae7335d27ac49756376c35f four-file Slack snapshot installed under immutable home/plugins/slack/<revision>, all installed SHA256 values checked. Core startup confirms channels=matrix,slack,api,subagents,dispatch; actual Slack start performs auth.test and opens Socket Mode before completion. New process/healthy authenticated API verified. Real POST /v1/update-admission now returns HTTP 201 admitted with blockers=[], then test lease released. Existing native owner is active-verified again. No credential/admin/model/conversation/Slack-thread changes. First activation uncovered separate Core settings defect: installation-only skills.adaptive made strict combined overlay validation reject gateway desired reload. Fixed in Core #334 (33efc9b6), full suite 1834 passed/1 skip. Because old process could not hot-replace, explicit operator-maintenance restart used conservative twice-checked durable business-work snapshots, owner flock and graceful SIGTERM; NOT a fabricated admission lease. Old process exit and exact new module selection proved. No forced kill. Receipts on work: ~/.local/share/vanillacore-karsten/slack-maintenance.json and slack-lifecycle-rollout.json; private settings backup retained. Native Core continues following the existing normal protected-main owner. No claim of a real user-message Slack round trip; connection/start and API/admission are verified.
Author
Owner

Additional native verification: all 39 Slack tests pass on the actual Darwin host with its installed Core Harness/GatewayManager and Node runtime, zero skips. The corrected live plugin has empty admission blockers; real lease acquisition/release succeeds. Native log: ~/.local/share/vanillacore-karsten/slack-native-acceptance.log.

Additional native verification: all 39 Slack tests pass on the actual Darwin host with its installed Core Harness/GatewayManager and Node runtime, zero skips. The corrected live plugin has empty admission blockers; real lease acquisition/release succeeds. Native log: ~/.local/share/vanillacore-karsten/slack-native-acceptance.log.
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
harness/plugins!85
No description provided.