- Fix
IssuesActorpattern call to use the single-argument formpattern 'github.issues.*'— the two-argument formpattern :routing_key, valueis only valid onAbsorbers::Basesubclasses; onActors::Subscriptionsubclasses the method accepts a single routing key string
Runners::App#setupand#complete_setupwere not being picked up bybuild_routesbecauseinstance_methods(false)only returns methods defined directly on a module, not included ones; explicitly defined both methods onRunners::Appto surface them to the route builder
CLI::AppRunner#setupand#complete_setupwere posting to/api/extensions/github/cli/app/*which is not a valid daemon route; corrected to/api/extensions/github/runners/app/*Runners::Appwas missing entirely — addedrunners/app.rbas a proper runner module includingCLI::Appso the daemon auto-registers the routes viabuild_routes- Added
require 'legion/extensions/github/runners/app'to maingithub.rbload chain AppRunnernow prompts interactively forname,url, andwebhook_urlwhen not provided; bumpedread_timeoutto 300s to survive the OAuth callback wait
Absorbers::Issues: normalizes GitHub issue webhook events to fleet work items; filters bot-generated events, already-claimed issues (fleet labels), and ignored actions; stores raw payload in Redis; publishes to assessor queueAbsorbers::IssuesActor: subscription actor withpattern 'github.issues.*'that delegates toAbsorbers::IssuesAbsorbers::WebhookSetup: mixin for idempotent webhook registration and fleet label creation (fleet:received,fleet:implementing,fleet:pr-open,fleet:escalated) on target reposAbsorbers::Helpers: shared utilities —bot_generated?,has_fleet_label?,ignored?,work_item_fingerprint,generate_work_item_id,transport_connected?
mark_pr_ready: GraphQLmarkPullRequestAsReadymutation to remove draft status from a PR (REST API has no endpoint for this); includes privategraphql_connectionhelperget_tree: fetch recursive repo file tree via Git Trees API (GET /repos/{owner}/{repo}/git/trees/{sha})get_file_content: fetch a single file's content via Contents API with optionalrefparamlist_all_pull_request_files: paginated variant that collects all pages (100/page) until exhausted; originallist_pull_request_filespreserved for backward compatlist_pull_request_review_comments: fetch inline code review comments (GET /pulls/{n}/comments), distinct from issue commentslist_pull_request_commits: simplified variant (per_page: 100, no cache) for fleet validator stale-diff guard
resolve_broker_apptoCREDENTIAL_RESOLVERSfor Broker integration (Phase 8 Wave 3)- Stable
installation_idfingerprint for consistent credential caching across GitHub App installations
- CLI runner output:
statusandlogincommands now print JSON results to stdout - CLI runner errors print to stderr via
warn
- CLI command registration:
legionio lex exec github auth status|loginandlegionio lex exec github app setup|complete_setup CLI::AuthRunnerandCLI::AppRunnerwrapper classes forlex execdispatch- Self-registering CLI manifest at
~/.legionio/cache/cli/lex-github.json(written on first require) - Require redirect
lib/lex/github.rbforlex execcompatibility
- Unpin jwt dependency from
~> 2.7to>= 2.7to resolve conflict with jwt 3.x
- GitHub App authentication (JWT generation, installation tokens via
App::Runners::Auth) - OAuth delegated user authentication (Authorization Code + PKCE, device code flow via
OAuth::Runners::Auth) - GitHub App manifest flow for streamlined app registration (
App::Runners::Manifest) - Webhook signature verification and event parsing (
App::Runners::Webhooks) - 8-source credential resolution chain: Vault delegated → Settings delegated → Vault App → Settings App → Vault PAT → Settings PAT → GH CLI → ENV (
Helpers::Client) - Rate limit fallback across credential sources with scope-aware skipping (
Helpers::ScopeRegistry) - Token lifecycle management with expiry tracking and rate limit recording (
Helpers::TokenCache) - Two-tier API response caching (global Redis + local in-memory) with configurable per-resource TTLs (
Helpers::Cache) jwt(~> 2.7) andbase64(>= 0.1) runtime dependencies
- update to rubocop-legion 0.1.7, resolve all offenses
Runners::Branches—create_branchusing the Git Data API (GET ref + POST refs)Runners::Contents—commit_filesfor multi-file commits via the Git Data API (ref, commit, tree, new commit, ref update)- Specs for both new runners (57 total, up from 47)
- Add runtime dependencies for all 7 legion sub-gems (legion-cache, legion-crypt, legion-data, legion-json, legion-logging, legion-settings, legion-transport)
- Update spec_helper to require real sub-gem helpers and stub Helpers::Lex with all 7 includes
- deleted gemfile.lock
Runners::Labels— full label management:list_labels,get_label,create_label,update_label,delete_label,add_labels_to_issue,remove_label_from_issueRunners::Comments— issue comment threads:list_comments,get_comment,create_comment,update_comment,delete_commentRunners::PullRequests#list_pull_request_reviews— GET reviews for a pull requestRunners::Commitsincluded inClientclass (was already implemented but not wired up)- Specs for all new methods
- Initial release