Skip to content

feat!: migrate slack to the public Signal contract - #32

Open
mikehostetler wants to merge 16 commits into
mainfrom
codex/public-signal-v3
Open

mikehostetler wants to merge 16 commits into
mainfrom
codex/public-signal-v3

Conversation

@mikehostetler

@mikehostetler mikehostetler commented Oct 14, 2026 •

Copy link
Copy Markdown
Contributor

This breaking change moves public communication to shared typed Signals. Provider input produces complete ordered deliveries. Commands and queries produce defined typed results. Messaging owns runtime acceptance, authority and retries.

Local validation: 142 package tests, the package quality gate, and production package build pass. All C01–C14 checks and both complete runtime profiles pass. Messaging coverage is 90.05%; WhatsApp coverage is 80.8%. The exact user-accepted Cowlib/Gun finding remains recorded as a failed raw audit with an explicit exception. Mattermost is excluded.

Development and test use immutable source pins. Publication remains blocked on compatible upstream releases containing the tested contracts and fixes, Jido AI 3.0, and the new Chat/consumer releases. See the migration guide and the G7 evidence.

Related: agentjido/jido_chat#57 and agentjido/jido_chat#58.

… controls

Passed: 15 deterministic native mapper tests with seed 0 and no compiler warnings. One mapper covers webhook/JSON/form/Socket payloads, messages/lifecycle, mentions, partial membership, reactions, all actions, modals/options/slash requests, assistant context, and scoped media. HTTP and Socket forms keep the same item identity. Trigger IDs/response URLs remain in owned private resources. Mixed actions retain valid items around registered failures; count/failure/byte limits reject whole units and cancel resources.

Open: wire the complete protocol 1 adapter and Socket worker, scope modal correlations, migrate all operation/query/result paths and original tests, run package/runtime conformance and quality, and finish every G3-G9 requirement. This is mapper proof, not full Slack adapter completion.
…results

Passed: strict compile and 27 focused protocol/normalizer/Socket tests with seed 0 and warnings as errors. Capture credentials, transport, signing secret, app token, and options loader once. Public requests use native execution; messages/pages retain selected portable fields and cursors. Observed thread participants remain explicitly partial. Scoped private interaction controls prepare modals and retain later view conversation context. Native options requests replace old communication DTOs and the duplicate envelope router is removed.

Open: finish every Slack operation and original test migration, exact event/interaction/resource matrix, captured Socket worker conformance, full package/runtime quality/coverage/audit/build, and all G3-G9 final requirements. No live provider call occurred.
… ack timing

Passed: 27 protocol/mapper/Socket tests with seed 0 and warnings as errors. Capture the configured binding before listener startup and validate complete native deliveries before every sink or payload acknowledgement. Ordered test observations prove ordinary envelopes acknowledge before the typed sink and response-bearing envelopes acknowledge after it. A whole-payload size breach has zero acknowledgement and sink calls. Original reconnect/response cases remain active.

Open: complete Slack operation/event matrix, old package/live fixture migration, full quality/coverage/audit/build, Messaging paths, and all remaining G3-G9 final requirements. The preserved ordinary-event ack timing is not a new durable acceptance guarantee.
Passed: 20 lifecycle/normalizer tests with seed 0 and warnings as errors. Port all five original lifecycle cases to native facts and typed handlers. Retain provider message/thread IDs, inherited bot sender/username, event timestamps, atom-key/atom-valued inputs, absent minimal fields, and update-vs-create routing. Deleted content and raw previous payloads remain out of public fact data.

Open: original card/modal/channel/live fixture migration, all operation/event/resource conformance, full package/runtime checks, G3 coverage and all remaining G4-G9 requirements, PR review, and current-head CI.
Passed: 20 original card/modal/options and native protocol tests with seed 0 and warnings as errors. Native resource requests preserve card action IDs, modal fields, rendering and provider limits. Native LoadOptions requests return portable results and private webhook responses render Slack plain-text option objects. Typed loader timeout results remain retryable and return empty options; the deadline test uses a controlled receive instead of sleeps.

Open: full channel/live fixture test migration, all operation/event/resource matrix and actual Messaging paths, full package quality/coverage/audit/build, G3 coverage and remaining G4-G9 requirements, PR review, and current-head CI.
Port all 27 original channel cases to native delivery and request boundaries or private provider controls. Preserve file-share text, MIME and URL fallback, private media details, selected metadata, and file upload details.

Passed: channel, normalizer, and protocol suites, 48 tests with warnings as errors; git diff --check.

Open: full package live fixture compilation, operation matrix, real Messaging paths, package quality and coverage, all remaining goal gates and current-head PR evidence.
Replace removed stream and post_message calls with native requests and owned resources. Update selected result fields and keep the native ephemeral target without DM fallback. Keep the existing live exclusions.

Passed: complete default package suite, 89 tests and the same 8 live exclusions, with warnings as errors; git diff --check. Live provider calls were not run.

Open: operation matrix, actual Messaging paths, quality and coverage, all final completion gates and current-head PR evidence.
Check all 26 declared operations through configured bindings, registered result decoding, trace linkage, cached repeats, and exact ordered transport calls. Check provider failure and lazy or cancelled streams. Set the correct conversation or thread kind for Slack subjects.

Passed: operation matrix and original channel suites, 58 tests with warnings as errors; git diff --check.

Open: full package quality and coverage, real Messaging paths and context isolation, remaining adapters, final gates and current-head PR evidence.
Passed: package quality, including format, strict compile, Credo, Dialyzer with zero errors and skips, and Doctor.

Open: real Messaging paths, final coverage and audit checks, remaining adapters, all final gates and current-head PR evidence.
Validate each message and thread page before mapping it. Fail a page with malformed items as one registered invalid_provider_result instead of dropping an item or exposing an exception.

Passed: operation matrix and original channel suites, 59 tests with warnings as errors; git diff --check.

Open: actual Messaging paths and context isolation, refreshed package quality and coverage, remaining adapter and final goal gates and current-head PR evidence.
… order

Keep the Socket worker alive after sink error, raise, throw, exit and invalid returns. Preserve the frozen ordinary ack-before-sink and response-bearing sink-before-ack order. Complete delivery limits make zero sink and ack calls.

Validation: 142 non-live Slack tests pass, with the original 8 live exclusions; coverage 74.1 percent. Package quality passes, with zero Dialyzer errors or skips. The 22 Socket tests pass. B3 evidence is saved in the core migration folder. G6-G9 remain open.
…rols

Use the same resolved conversation for native facts and private controls. Release controls when all normalized action items fail. Check global and unknown modal scopes, binding isolation, cancellation, expiry, owner exit and binding closure.

Validation: 142 Slack tests pass with 8 existing live exclusions; package quality passes. The pinned B3 runtime has 129 passing tests, including frozen event rows and actual Messaging modal execution. G6-G9 and final CI remain open.
Use immutable Chat source in development and test. Keep intended Hex requirements in production. Local suite, quality gate, package build and both runtime profiles pass.
Pin the required Signal API explicitly for development and test. Read shared contract fixtures from the resolved Chat dependency. Local suites, quality gates and production metadata builds pass.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant