Add generic tracker interface with Linear adapter - #102
Merged
Conversation
Summary: - Replace the Linear-shaped scheduler contract with a generic Issue model and two read operations for state polling and opaque-ID refreshes. - Keep Linear richness behind its adapter and provider-native linear_graphql tool, bound to one app-server session. - Execute tracker tools host-side, strip declared tracker secret env vars from child processes, and document the generic contract in SPEC.md. - Add coverage for scope-aware refreshes, fail-closed dispatchability, workspace-key collisions, auth isolation, and hot-reload binding. Rationale: - A narrow read kernel keeps the orchestrator portable without flattening provider-specific mutations into a lowest-common-denominator CRUD API. - Opaque dispatch IDs, native_ref, and adapter-derived dispatchable preserve provider semantics while avoiding duplicate agent authentication. Tests: - mise exec -- make all - TypeScript, Python, and Go no-context SPEC probes Co-authored-by: Codex <codex@openai.com>
Summary: - Align SPEC, Linear profile, and workflow with the generic tracker contract. - Keep provider tools session-bound and scrub tracker credentials after login shell startup. - Validate Linear provider settings and keep workspace keys collision-resistant. Rationale: - Final review found contract ambiguities and auth/config edge cases. - Keep the clean-cut design focused; no legacy workspace migration paths. Tests: - mise exec -- mix test test/symphony_elixir/dynamic_tool_test.exs test/symphony_elixir/extensions_test.exs test/symphony_elixir/workspace_and_config_test.exs test/symphony_elixir/app_server_test.exs - mise exec -- make -C elixir all Co-authored-by: Codex <codex@openai.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Context
Symphony's scheduler was coupled to Linear types, reads, and mutations, making a second ticketing system require core orchestration changes.
TL;DR
Introduce a generic tracker boundary while keeping Linear as the first adapter.
Summary
Tracker.Issueand two read operations.tracker.providerwith legacy Linear aliases.Alternatives
Test Plan
make -C elixir allmise exec -- mix test test/symphony_elixir/dynamic_tool_test.exs test/symphony_elixir/extensions_test.exs test/symphony_elixir/workspace_and_config_test.exs test/symphony_elixir/app_server_test.exs