Comparing v1.14.0...v2.0.0 · github/github-mcp-server · GitHub
Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: github/github-mcp-server
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: v1.14.0
Choose a base ref
...
head repository: github/github-mcp-server
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: v2.0.0
Choose a head ref
  • 18 commits
  • 271 files changed
  • 6 contributors

Commits on Oct 3, 2026

  1. perf: cache encoded tools/list schemas (#3407)

    * perf: cache encoded tools/list schemas
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * test: verify encoded schema cache lifecycle
    
    Document immutable shared schema definitions and verify bounded reuse across HTTP inventories and repeated server registration.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    ---------
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    SamMorrowDrums and Copilot authored Oct 3, 2026
    Configuration menu
    Copy the full SHA
    71ef826 View commit details
    Browse the repository at this point in the history

Commits on Oct 6, 2026

  1. Pin GitHub Actions to commit SHAs (#3259)

    Co-authored-by: Michael Recachinas <mrecachinas@github.com>
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    3 people authored Oct 6, 2026
    Configuration menu
    Copy the full SHA
    bf0f67f View commit details
    Browse the repository at this point in the history
  2. feat(inventory): add typed MCP tool registration foundation (#3371)

    * feat(inventory): add typed MCP tool registration foundation
    
    Use the MCP SDK's generic registration for concrete input/output types, with protocol-gated output schemas and structured results. Keep raw handlers compatible and apply shared middleware on both paths.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * chore: regenerate license files
    
    Auto-generated by license-check workflow
    
    * test: cover legacy typed CSV results
    
    Exercise the typed array and object paths through an initialized 2025-11-25 MCP session. Verify CSV text is returned once without structured output or the SDK JSON fallback.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * feat(inventory): normalize legacy typed arguments
    
    Add a raw JSON input normalizer that runs before SDK schema validation so migrated tools can retain legacy input coercions without widening their published schemas. Test case-folded issue states, numeric string IDs, validation failures and replacement registrations.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * chore: regenerate license files
    
    Auto-generated by license-check workflow
    
    * test(inventory): preserve typed input optionality
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(inventory): stabilize typed schema compatibility
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * test(inventory): cover protocol isolation across clients
    
    Exercise simultaneous legacy and modern sessions against one typed tool, plus stateless HTTP requests with modern, legacy, and absent protocol headers.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(inventory): harden typed schema registration contracts
    
    Cache immutable schema variants and enum overrides, preserve runtime input compatibility and request-era output behavior, and normalize dynamic scope challenges before dispatch.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(inventory): cache warm schemas and guard typed preflight
    
    Avoid repeated canonical schema serialization and header annotation for cache-owned immutable pointers while retaining content-based lookup for caller-owned schemas. Run typed authorization and availability middleware before preflight and preserve tool-result error semantics.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(inventory): preserve schema metadata isolation
    
    Advertise the SDK-compatible object schema for typed any input and deep-clone mutable JSON Schema metadata before caching or deriving runtime variants. Add legacy/modern registration and mutation isolation coverage.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(inventory): detach numeric schema bounds and dedupe default traversal
    
    Two Copilot findings on 431b7a2:
    
    - CloneSchemas only deep-copies subschema nodes, so pointer-valued
      numeric validation keywords (Minimum, Maximum, MinLength, MinItems,
      etc.) remained aliased with the caller-owned schema after
      CloneSchema/CachedSchema. A caller mutating one of those pointers
      after caching could race with concurrent cached-schema
      serialization or silently change the cached validation bounds.
      Clone every *int/*float64 keyword explicitly alongside the existing
      collection/metadata cloning.
    
    - CloneSchemaWithoutDefaults's removeSchemaDefaults visited every
      map/pointer child twice: once via two literal child-collection
      loops, and again via schemaChildren, which already covers the same
      fields. This doubled traversal at every nested level, making
      default removal exponential for deeply nested object/array schemas.
      Traverse only the single comprehensive schemaChildren list.
    
    Add regression coverage across CloneSchema, CachedSchema, schema
    inference option cloning, and CloneSchemaWithoutDefaults: every
    *int/*float64 keyword is isolated from caller mutation (including
    under concurrent marshaling), and a 48-level deep chain is used for
    every schema-child field kind to confirm linear, non-exponential
    default removal.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(inventory): gate typed output on supported protocol range
    
    Select modern typed output for SDK-supported ISO-date protocol versions from 2026-07-28 onward. Missing, malformed, and unsupported future versions retain legacy behavior. Cover a later supported version through the selector list seam and verify the public path against the SDK supported set.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(inventory): unwrap pointer inputs before schema inference
    
    Match SDK input inference by unwrapping one pointer level before the cached input key and inference. Preserve nullable output pointer schemas. Cover both public constructors with actual modern and legacy discovery and calls, including structured null output.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(inventory): reuse encoded schema cache for typed tools
    
    Key output encodings by their source definitions while preserving the SDK-registered schema guard. Keep header routing metadata available for legacy and unknown protocol clients.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    ---------
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
    3 people authored Oct 6, 2026
    1 Configuration menu
    Copy the full SHA
    18fb782 View commit details
    Browse the repository at this point in the history
  3. feat(context): add typed tool schemas and outputs (#3377)

    * feat(context): add typed tool schemas and outputs
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(context): preserve legacy input acceptance
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * test(context): preserve input schema roots and optionality
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(context): validate direct team member calls
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * test(context): pin structured output and legacy text fixtures
    
    Describe profile timestamps and validate null and empty team outputs against modern schemas while retaining exact legacy text.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(context): emit structured empty team collections
    
    Keep legacy null text while returning nonnil typed slices so modern clients receive structured content for empty successful results.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(context): preserve legacy team input schemas
    
    Keep empty identifier rejection in the handler without tightening the published input schema. Pin modern text to structured output and preserve the legacy formatter fixtures.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(context): preserve advertised input schema compatibility
    
    Keep legacy-visible schemas byte-compatible while applying unknown-field acceptance only to the cached runtime validation schema. Verify modern DTO text parity and preserve legacy formatted text.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(context): reject explicit null team user arguments
    
    Preserve the legacy optional user type error before typed decoding, without changing omitted or empty user fallback.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(context): preserve exact routing argument keys
    
    Ignore case-variant routing aliases before typed decoding while retaining canonical fields and unrelated unknown arguments. Cover direct handlers and legacy/modern registered calls, authenticated fallback, canonical null rejection, and missing identifiers.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    ---------
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    SamMorrowDrums and Copilot authored Oct 6, 2026
    Configuration menu
    Copy the full SHA
    9cbd4b2 View commit details
    Browse the repository at this point in the history
  4. feat(comments): add typed visibility tool inputs and outputs (#3384)

    * feat(comments): add typed visibility tool inputs and outputs
    
    Preserve legacy argument normalization and text responses while exposing protocol-gated structured results for six hide/unhide tools.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * chore: regenerate license files
    
    Auto-generated by license-check workflow
    
    * chore: regenerate license files
    
    Auto-generated by license-check workflow
    
    * test(comments): pin protocol output parity and reason metadata
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(comments): reuse cached visibility output schema
    
    Clarify supported negotiated protocol versions without expanding runtime support.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    ---------
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
    3 people authored Oct 6, 2026
    Configuration menu
    Copy the full SHA
    1feeae4 View commit details
    Browse the repository at this point in the history
  5. feat(search): add typed projected result outputs (#3386)

    * feat(search): add typed projected result outputs
    
    * fix(search): preserve field_values presence and add nested schema fixtures
    
    Address review findings on the typed search/list projected-output
    tools (search_code, search_issues, search_pull_requests, list_issues,
    list_pull_requests, list_branches, list_tags):
    
    - issues.go/pullrequests.go: change FieldValues to a pointer-to-slice
      (*[]MinimalFieldValue) so a successful-but-empty [] is preserved in
      structuredContent, matching legacy text output instead of being
      dropped by omitempty.
    - search.go: related adjustments to keep typed search outputs aligned
      with the field_values presence fix.
    - typed_search_outputs_test.go: add representative nested/non-empty
      projected item fixtures so schema-conformance tests actually
      exercise item shapes instead of only validating empty collections.
    - Add/update toolsnaps for list_branches, list_issues,
      list_pull_requests, list_tags, search_code, search_issues, and
      search_pull_requests to reflect the schema.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * test: bound encoded schema parity registration work
    
    Reuse each immutable HTTP server across pagination requests and share the SDK schema cache across parity variants without changing wire comparisons.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    ---------
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    SamMorrowDrums and Copilot authored Oct 6, 2026
    Configuration menu
    Copy the full SHA
    26bf4c4 View commit details
    Browse the repository at this point in the history
  6. feat(security): add typed security alert outputs (#3387)

    * feat(security): add typed alert outputs
    
    Add typed protocol-gated outputs for code quality, code and secret scanning, Dependabot, and security advisories while preserving existing text responses.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(security): preserve compatibility with compact typed outputs
    
    Keep advertised input defaults while disabling runtime default injection for security filters. Normalize null CWE filters, compact findings, and verify modern wire outputs alongside exact legacy formatting.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    ---------
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    SamMorrowDrums and Copilot authored Oct 6, 2026
    Configuration menu
    Copy the full SHA
    70891c0 View commit details
    Browse the repository at this point in the history
  7. feat: type discussion and notification tool outputs (#3388)

    * feat: type discussion and notification tool outputs
    
    Migrate all eleven tools to typed registration and compact output DTOs. Preserve legacy text, parameter compatibility, pagination, and mutation validation while publishing honest modern output unions.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix: tighten discussion and notification output contracts
    
    Trim notification hypermedia, preserve useful HTML links, and record all modern schemas in canonical snapshots. Preserve source presence during discussion read normalization and cover the Copilot review regression alongside empty/null outputs, IFC labels, sanitization, and output enums.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * test: cover empty-object discussion read requests and modern-text==DTO expectations
    
    Add an explicit {} (fully-empty args) case to
    TestDiscussionReadRequiredArguments proving the normalizer never
    synthesizes placeholder owner/repo/discussionNumber values that would
    let an empty request satisfy SDK required-schema validation and reach
    GraphQL; verified both protocols reject it pre-handler with zero
    GraphQL calls (addresses readiness-audit re-flag of already-fixed
    Copilot review comment 4171698931 in 578e9929).
    
    Also record the pending modern-text==structuredContent DTO contract
    (2026-07-28 protocol) in test expectations; these assertions are
    intentionally red pending the coordinator's central once-marshal
    wrapper in pkg/inventory/typed_output.go, which this branch does not
    yet have.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(notifications): preserve plain status output content
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    ---------
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    SamMorrowDrums and Copilot authored Oct 6, 2026
    Configuration menu
    Copy the full SHA
    8b2656a View commit details
    Browse the repository at this point in the history
  8. feat(repos): add typed commit tool outputs (#3389)

    * feat(repos): add typed commit tool outputs
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(repos): restore commit pagination defaults
    
    Normalize omitted and explicit zero pagination to page 1 and perPage 30 for get_commit and list_commits. Cover legacy and modern wire calls and direct handlers.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(repos): return typed projected commit lists
    
    Use an optional-field commit DTO for full and projected modern outputs while retaining exact legacy text. Cover SHA and nested commit projections, empty lists, and output schema conformance.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * chore: regenerate license files
    
    Auto-generated by license-check workflow
    
    * test(repos): snapshot modern commit tools and strengthen wire coverage
    
    Capture canonical modern schemas, exercise null lists and error suppression with IFC labels, and drop unrelated generated Linux license drift noted by Copilot review.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * test(repos): distinguish legacy and modern commit text
    
    Keep exact-main byte assertions for the legacy protocol and verify modern text represents the same typed DTO as structured content.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * test(repos): sync commit snapshots with parent DTO metadata
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    ---------
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
    3 people authored Oct 6, 2026
    Configuration menu
    Copy the full SHA
    c4ed8cb View commit details
    Browse the repository at this point in the history
  9. feat(issues): add typed metadata, comment, and dependency outputs (#3391

    )
    
    * feat(issues): add typed metadata comment and dependency outputs
    
    Preserve legacy text and argument coercions while exposing protocol-gated structured issue outputs. Add modern, legacy, unknown-version, union-schema and API-error contracts.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * chore: regenerate license files
    
    Auto-generated by license-check workflow
    
    * chore: regenerate license files
    
    Auto-generated by license-check workflow
    
    * fix(issues): preserve zero pagination for duplicate search
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * refactor(issues): preserve compact typed output contracts
    
    Cache DTO schema inference, retain byte-exact handler text, and cover protocol, pagination and schema contracts.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * test(issues): bound encoded schema parity registration work
    
    Reuse immutable HTTP comparison servers and the SDK schema cache across the full parity matrix. Refresh inherited user timestamp descriptions in issue snapshots.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    ---------
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
    3 people authored Oct 6, 2026
    Configuration menu
    Copy the full SHA
    5e737b4 View commit details
    Browse the repository at this point in the history
  10. feat(repos): complete typed repository tool outputs (#3392)

    * feat(repos): complete typed repository tool outputs
    
    Migrate the remaining 17 repository tools to concrete inputs and outputs. Preserve existing content, mutations, scopes, filtering, and protocol gating; add wire and schema conformance coverage.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * chore(repos): exclude unrelated snapshot formatting drift
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * refactor(repos): compact typed repository outputs
    
    Replace raw REST output schemas with compact repository DTOs, retain one canonical snapshot per tool, and align modern JSON text with structured output while pinning legacy content.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    ---------
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    SamMorrowDrums and Copilot authored Oct 6, 2026
    Configuration menu
    Copy the full SHA
    7894659 View commit details
    Browse the repository at this point in the history
  11. feat(issues): add protocol-gated typed consolidated issue tools (#3393)

    * feat(repos): complete typed repository tool outputs
    
    Migrate the remaining 17 repository tools to concrete inputs and outputs. Preserve existing content, mutations, scopes, filtering, and protocol gating; add wire and schema conformance coverage.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * chore(repos): exclude unrelated snapshot formatting drift
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * refactor(repos): compact typed repository outputs
    
    Replace raw REST output schemas with compact repository DTOs, retain one canonical snapshot per tool, and align modern JSON text with structured output while pinning legacy content.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * feat(issues): add typed consolidated issue tool contracts
    
    Preserve raw helper APIs and exact legacy text while exposing concrete output unions for modern protocols. Retain explicit awaiting statuses and real null responses without exposing SDK-generated error fallbacks.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * chore: regenerate license files
    
    Auto-generated by license-check workflow
    
    * refactor(issues): minimize consolidated typed outputs
    
    Project compact method-discriminated DTOs from API responses while preserving the separate legacy text formatter and explicit app-awaiting status. Cache strict schemas and keep only canonical snapshots. Strengthen null-member presence, schema size, and lockdown projection regressions.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(issues): keep union property schemas portable
    
    Preserve forbidden variant properties as annotated schema objects rather than boolean schemas emitted by jsonschema-go. Cover Inspector's input paths and IFC labels on every issue-read method across protocols.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * test(issues): cover strict sub-issue output variants
    
    Reject unknown methods, states, field types, opaque values and API URL properties while covering nullable and empty method data.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * test(issues): pin compact comment user redaction
    
    Pin unchanged legacy profile/avatar fields separately from compact modern user projections and assert identical lockdown filtering and sanitization across protocols.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(issues): restore main-identical advertised input schema
    
    Remove added custom-field union constraints and sentinel enums from the advertised issue-write input. Preserve runtime exactly-one validation and private strict-schema tests. All three scoped input schemas compare exactly equal to main.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(issues): restore protocol output parity
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * chore: regenerate license files
    
    Auto-generated by license-check workflow
    
    ---------
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
    3 people authored Oct 6, 2026
    Configuration menu
    Copy the full SHA
    b628491 View commit details
    Browse the repository at this point in the history
  12. Type granular issue MCP inputs and protocol-gated outputs (#3394)

    * feat(repos): complete typed repository tool outputs
    
    Migrate the remaining 17 repository tools to concrete inputs and outputs. Preserve existing content, mutations, scopes, filtering, and protocol gating; add wire and schema conformance coverage.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * chore(repos): exclude unrelated snapshot formatting drift
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * refactor(repos): compact typed repository outputs
    
    Replace raw REST output schemas with compact repository DTOs, retain one canonical snapshot per tool, and align modern JSON text with structured output while pinning legacy content.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * feat(issues): add typed consolidated issue tool contracts
    
    Preserve raw helper APIs and exact legacy text while exposing concrete output unions for modern protocols. Retain explicit awaiting statuses and real null responses without exposing SDK-generated error fallbacks.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * chore: regenerate license files
    
    Auto-generated by license-check workflow
    
    * refactor(issues): minimize consolidated typed outputs
    
    Project compact method-discriminated DTOs from API responses while preserving the separate legacy text formatter and explicit app-awaiting status. Cache strict schemas and keep only canonical snapshots. Strengthen null-member presence, schema size, and lockdown projection regressions.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(issues): keep union property schemas portable
    
    Preserve forbidden variant properties as annotated schema objects rather than boolean schemas emitted by jsonschema-go. Cover Inspector's input paths and IFC labels on every issue-read method across protocols.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * test(issues): cover strict sub-issue output variants
    
    Reject unknown methods, states, field types, opaque values and API URL properties while covering nullable and empty method data.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * test(issues): pin compact comment user redaction
    
    Pin unchanged legacy profile/avatar fields separately from compact modern user projections and assert identical lockdown filtering and sanitization across protocols.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(issues): restore main-identical advertised input schema
    
    Remove added custom-field union constraints and sentinel enums from the advertised issue-write input. Preserve runtime exactly-one validation and private strict-schema tests. All three scoped input schemas compare exactly equal to main.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(issues): restore protocol output parity
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * chore: regenerate license files
    
    Auto-generated by license-check workflow
    
    * refactor(issues): minimize granular structured outputs
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    # Conflicts:
    #	pkg/github/__toolsnaps__/add_sub_issue.snap
    #	pkg/github/__toolsnaps__/remove_sub_issue.snap
    #	pkg/github/__toolsnaps__/reprioritize_sub_issue.snap
    #	pkg/github/granular_issue_types.go
    #	pkg/github/issues_granular.go
    #	pkg/github/typed_granular_issue_outputs_test.go
    
    # Please enter the commit message for your changes. Lines starting
    # with '#' will be ignored, and an empty message aborts the commit.
    #
    # interactive rebase in progress; onto 1973eee
    # Last command done (1 command done):
    #    pick 5b8f9d19 # refactor(issues): minimize granular structured outputs
    # No commands remaining.
    # You are currently rebasing.
    #
    # Changes to be committed:
    #	modified:   pkg/github/__toolsnaps__/add_issue_comment_reaction.snap
    #	modified:   pkg/github/__toolsnaps__/add_issue_reaction.snap
    #	modified:   pkg/github/__toolsnaps__/add_sub_issue.snap
    #	modified:   pkg/github/__toolsnaps__/create_issue.snap
    #	modified:   pkg/github/__toolsnaps__/hide_issue_comment.snap
    #	modified:   pkg/github/__toolsnaps__/remove_issue_comment_reaction.snap
    #	modified:   pkg/github/__toolsnaps__/remove_issue_reaction.snap
    #	modified:   pkg/github/__toolsnaps__/remove_sub_issue.snap
    #	modified:   pkg/github/__toolsnaps__/reprioritize_sub_issue.snap
    #	modified:   pkg/github/__toolsnaps__/set_issue_fields.snap
    #	modified:   pkg/github/__toolsnaps__/unhide_issue_comment.snap
    #	modified:   pkg/github/__toolsnaps__/update_issue_assignees.snap
    #	modified:   pkg/github/__toolsnaps__/update_issue_body.snap
    #	modified:   pkg/github/__toolsnaps__/update_issue_labels.snap
    #	modified:   pkg/github/__toolsnaps__/update_issue_milestone.snap
    #	modified:   pkg/github/__toolsnaps__/update_issue_state.snap
    #	modified:   pkg/github/__toolsnaps__/update_issue_title.snap
    #	modified:   pkg/github/__toolsnaps__/update_issue_type.snap
    #	modified:   pkg/github/comment_minimize_test.go
    #	new file:   pkg/github/granular_issue_types.go
    #	modified:   pkg/github/granular_tools_test.go
    #	modified:   pkg/github/issues_granular.go
    #	new file:   pkg/github/typed_granular_issue_outputs_test.go
    #
    
    ---------
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
    3 people authored Oct 6, 2026
    Configuration menu
    Copy the full SHA
    d6a8ac1 View commit details
    Browse the repository at this point in the history
  13. refactor(search): type repository, user, org and commit search tools (#…

    …3395)
    
    * feat(repos): complete typed repository tool outputs
    
    Migrate the remaining 17 repository tools to concrete inputs and outputs. Preserve existing content, mutations, scopes, filtering, and protocol gating; add wire and schema conformance coverage.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * chore(repos): exclude unrelated snapshot formatting drift
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * refactor(repos): compact typed repository outputs
    
    Replace raw REST output schemas with compact repository DTOs, retain one canonical snapshot per tool, and align modern JSON text with structured output while pinning legacy content.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * feat(issues): add typed consolidated issue tool contracts
    
    Preserve raw helper APIs and exact legacy text while exposing concrete output unions for modern protocols. Retain explicit awaiting statuses and real null responses without exposing SDK-generated error fallbacks.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * chore: regenerate license files
    
    Auto-generated by license-check workflow
    
    * refactor(issues): minimize consolidated typed outputs
    
    Project compact method-discriminated DTOs from API responses while preserving the separate legacy text formatter and explicit app-awaiting status. Cache strict schemas and keep only canonical snapshots. Strengthen null-member presence, schema size, and lockdown projection regressions.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(issues): keep union property schemas portable
    
    Preserve forbidden variant properties as annotated schema objects rather than boolean schemas emitted by jsonschema-go. Cover Inspector's input paths and IFC labels on every issue-read method across protocols.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * test(issues): cover strict sub-issue output variants
    
    Reject unknown methods, states, field types, opaque values and API URL properties while covering nullable and empty method data.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * test(issues): pin compact comment user redaction
    
    Pin unchanged legacy profile/avatar fields separately from compact modern user projections and assert identical lockdown filtering and sanitization across protocols.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(issues): restore main-identical advertised input schema
    
    Remove added custom-field union constraints and sentinel enums from the advertised issue-write input. Preserve runtime exactly-one validation and private strict-schema tests. All three scoped input schemas compare exactly equal to main.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(issues): restore protocol output parity
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * chore: regenerate license files
    
    Auto-generated by license-check workflow
    
    * refactor(issues): minimize granular structured outputs
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    # Conflicts:
    #	pkg/github/__toolsnaps__/add_sub_issue.snap
    #	pkg/github/__toolsnaps__/remove_sub_issue.snap
    #	pkg/github/__toolsnaps__/reprioritize_sub_issue.snap
    #	pkg/github/granular_issue_types.go
    #	pkg/github/issues_granular.go
    #	pkg/github/typed_granular_issue_outputs_test.go
    
    # Please enter the commit message for your changes. Lines starting
    # with '#' will be ignored, and an empty message aborts the commit.
    #
    # interactive rebase in progress; onto 1973eee
    # Last command done (1 command done):
    #    pick 5b8f9d19 # refactor(issues): minimize granular structured outputs
    # No commands remaining.
    # You are currently rebasing.
    #
    # Changes to be committed:
    #	modified:   pkg/github/__toolsnaps__/add_issue_comment_reaction.snap
    #	modified:   pkg/github/__toolsnaps__/add_issue_reaction.snap
    #	modified:   pkg/github/__toolsnaps__/add_sub_issue.snap
    #	modified:   pkg/github/__toolsnaps__/create_issue.snap
    #	modified:   pkg/github/__toolsnaps__/hide_issue_comment.snap
    #	modified:   pkg/github/__toolsnaps__/remove_issue_comment_reaction.snap
    #	modified:   pkg/github/__toolsnaps__/remove_issue_reaction.snap
    #	modified:   pkg/github/__toolsnaps__/remove_sub_issue.snap
    #	modified:   pkg/github/__toolsnaps__/reprioritize_sub_issue.snap
    #	modified:   pkg/github/__toolsnaps__/set_issue_fields.snap
    #	modified:   pkg/github/__toolsnaps__/unhide_issue_comment.snap
    #	modified:   pkg/github/__toolsnaps__/update_issue_assignees.snap
    #	modified:   pkg/github/__toolsnaps__/update_issue_body.snap
    #	modified:   pkg/github/__toolsnaps__/update_issue_labels.snap
    #	modified:   pkg/github/__toolsnaps__/update_issue_milestone.snap
    #	modified:   pkg/github/__toolsnaps__/update_issue_state.snap
    #	modified:   pkg/github/__toolsnaps__/update_issue_title.snap
    #	modified:   pkg/github/__toolsnaps__/update_issue_type.snap
    #	modified:   pkg/github/comment_minimize_test.go
    #	new file:   pkg/github/granular_issue_types.go
    #	modified:   pkg/github/granular_tools_test.go
    #	modified:   pkg/github/issues_granular.go
    #	new file:   pkg/github/typed_granular_issue_outputs_test.go
    #
    
    * refactor(search): use typed account repository and commit tools
    
    Preserve legacy text and search semantics while publishing protocol-gated concrete structured outputs. Cover modern, legacy, and unknown clients, full repository JSON unions, defaults, IFC labels, and errors.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * refactor(search): compact typed repository search output
    
    Replace the full REST repository mirror with MinimalRepository-based
    structured items plus purpose-built full-mode details. Legacy text remains
    unchanged, and canonical snapshots now hold the modern output schema.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * refactor(search): expose repository visibility enum
    
    Remove the derivable node_id from compact full repository search output and
    publish the visibility enum in the static output schema.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * test(search): align snapshots with protocol wrapper
    
    Keep the modern text assertion aligned with structured content after the shared output wrapper change.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    ---------
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
    3 people authored Oct 6, 2026
    Configuration menu
    Copy the full SHA
    15e4b32 View commit details
    Browse the repository at this point in the history
  14. refactor(pull-requests): migrate consolidated PR tools to typed input…

    …s and outputs (#3396)
    
    * feat(repos): complete typed repository tool outputs
    
    Migrate the remaining 17 repository tools to concrete inputs and outputs. Preserve existing content, mutations, scopes, filtering, and protocol gating; add wire and schema conformance coverage.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * chore(repos): exclude unrelated snapshot formatting drift
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * refactor(repos): compact typed repository outputs
    
    Replace raw REST output schemas with compact repository DTOs, retain one canonical snapshot per tool, and align modern JSON text with structured output while pinning legacy content.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * feat(issues): add typed consolidated issue tool contracts
    
    Preserve raw helper APIs and exact legacy text while exposing concrete output unions for modern protocols. Retain explicit awaiting statuses and real null responses without exposing SDK-generated error fallbacks.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * chore: regenerate license files
    
    Auto-generated by license-check workflow
    
    * refactor(issues): minimize consolidated typed outputs
    
    Project compact method-discriminated DTOs from API responses while preserving the separate legacy text formatter and explicit app-awaiting status. Cache strict schemas and keep only canonical snapshots. Strengthen null-member presence, schema size, and lockdown projection regressions.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(issues): keep union property schemas portable
    
    Preserve forbidden variant properties as annotated schema objects rather than boolean schemas emitted by jsonschema-go. Cover Inspector's input paths and IFC labels on every issue-read method across protocols.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * test(issues): cover strict sub-issue output variants
    
    Reject unknown methods, states, field types, opaque values and API URL properties while covering nullable and empty method data.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * test(issues): pin compact comment user redaction
    
    Pin unchanged legacy profile/avatar fields separately from compact modern user projections and assert identical lockdown filtering and sanitization across protocols.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(issues): restore main-identical advertised input schema
    
    Remove added custom-field union constraints and sentinel enums from the advertised issue-write input. Preserve runtime exactly-one validation and private strict-schema tests. All three scoped input schemas compare exactly equal to main.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(issues): restore protocol output parity
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * chore: regenerate license files
    
    Auto-generated by license-check workflow
    
    * refactor(issues): minimize granular structured outputs
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    # Conflicts:
    #	pkg/github/__toolsnaps__/add_sub_issue.snap
    #	pkg/github/__toolsnaps__/remove_sub_issue.snap
    #	pkg/github/__toolsnaps__/reprioritize_sub_issue.snap
    #	pkg/github/granular_issue_types.go
    #	pkg/github/issues_granular.go
    #	pkg/github/typed_granular_issue_outputs_test.go
    
    # Please enter the commit message for your changes. Lines starting
    # with '#' will be ignored, and an empty message aborts the commit.
    #
    # interactive rebase in progress; onto 1973eee
    # Last command done (1 command done):
    #    pick 5b8f9d19 # refactor(issues): minimize granular structured outputs
    # No commands remaining.
    # You are currently rebasing.
    #
    # Changes to be committed:
    #	modified:   pkg/github/__toolsnaps__/add_issue_comment_reaction.snap
    #	modified:   pkg/github/__toolsnaps__/add_issue_reaction.snap
    #	modified:   pkg/github/__toolsnaps__/add_sub_issue.snap
    #	modified:   pkg/github/__toolsnaps__/create_issue.snap
    #	modified:   pkg/github/__toolsnaps__/hide_issue_comment.snap
    #	modified:   pkg/github/__toolsnaps__/remove_issue_comment_reaction.snap
    #	modified:   pkg/github/__toolsnaps__/remove_issue_reaction.snap
    #	modified:   pkg/github/__toolsnaps__/remove_sub_issue.snap
    #	modified:   pkg/github/__toolsnaps__/reprioritize_sub_issue.snap
    #	modified:   pkg/github/__toolsnaps__/set_issue_fields.snap
    #	modified:   pkg/github/__toolsnaps__/unhide_issue_comment.snap
    #	modified:   pkg/github/__toolsnaps__/update_issue_assignees.snap
    #	modified:   pkg/github/__toolsnaps__/update_issue_body.snap
    #	modified:   pkg/github/__toolsnaps__/update_issue_labels.snap
    #	modified:   pkg/github/__toolsnaps__/update_issue_milestone.snap
    #	modified:   pkg/github/__toolsnaps__/update_issue_state.snap
    #	modified:   pkg/github/__toolsnaps__/update_issue_title.snap
    #	modified:   pkg/github/__toolsnaps__/update_issue_type.snap
    #	modified:   pkg/github/comment_minimize_test.go
    #	new file:   pkg/github/granular_issue_types.go
    #	modified:   pkg/github/granular_tools_test.go
    #	modified:   pkg/github/issues_granular.go
    #	new file:   pkg/github/typed_granular_issue_outputs_test.go
    #
    
    * refactor(search): use typed account repository and commit tools
    
    Preserve legacy text and search semantics while publishing protocol-gated concrete structured outputs. Cover modern, legacy, and unknown clients, full repository JSON unions, defaults, IFC labels, and errors.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * refactor(search): compact typed repository search output
    
    Replace the full REST repository mirror with MinimalRepository-based
    structured items plus purpose-built full-mode details. Legacy text remains
    unchanged, and canonical snapshots now hold the modern output schema.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * refactor(search): expose repository visibility enum
    
    Remove the derivable node_id from compact full repository search output and
    publish the visibility enum in the static output schema.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * test(search): align snapshots with protocol wrapper
    
    Keep the modern text assertion aligned with structured content after the shared output wrapper change.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * refactor(pull-requests): migrate consolidated PR tools to typed inputs and outputs
    
    Convert pull_request_read, create_pull_request, update_pull_request,
    merge_pull_request, update_pull_request_branch, pull_request_review_write
    (both feature variants), add_comment_to_pending_review and
    add_reply_to_pull_request_comment to NewTool with concrete inputs and
    output DTOs. Input normalizers replay legacy handler checks so legacy
    coercions and error text are preserved.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(pull-requests): align modern text with typed outputs
    
    Use curated output DTOs for modern JSON text while preserving legacy serialization. Cover successful null responses, empty check runs, and Link-header page traversal.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(pull-requests): preserve legacy validation order
    
    Replay parameter checks in handler order and scope cursor validation to review-thread reads. Keep commit message schema descriptions distinct from operation messages.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * refactor(pull-requests): simplify compatibility validation
    
    Remove normalization and test assertions that only pinned which invalid argument wins. Keep per-field validation, accepted coercions, and response-shape behavior.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    ---------
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
    3 people authored Oct 6, 2026
    Configuration menu
    Copy the full SHA
    867131b View commit details
    Browse the repository at this point in the history
  15. refactor(pull-requests): type granular MCP tools (#3397)

    * feat(inventory): add typed MCP tool registration foundation
    
    Use the MCP SDK's generic registration for concrete input/output types, with protocol-gated output schemas and structured results. Keep raw handlers compatible and apply shared middleware on both paths.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * chore: regenerate license files
    
    Auto-generated by license-check workflow
    
    * test: cover legacy typed CSV results
    
    Exercise the typed array and object paths through an initialized 2025-11-25 MCP session. Verify CSV text is returned once without structured output or the SDK JSON fallback.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * feat(inventory): normalize legacy typed arguments
    
    Add a raw JSON input normalizer that runs before SDK schema validation so migrated tools can retain legacy input coercions without widening their published schemas. Test case-folded issue states, numeric string IDs, validation failures and replacement registrations.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * chore: regenerate license files
    
    Auto-generated by license-check workflow
    
    * test(inventory): preserve typed input optionality
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(inventory): stabilize typed schema compatibility
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * test(inventory): cover protocol isolation across clients
    
    Exercise simultaneous legacy and modern sessions against one typed tool, plus stateless HTTP requests with modern, legacy, and absent protocol headers.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(inventory): harden typed schema registration contracts
    
    Cache immutable schema variants and enum overrides, preserve runtime input compatibility and request-era output behavior, and normalize dynamic scope challenges before dispatch.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(inventory): cache warm schemas and guard typed preflight
    
    Avoid repeated canonical schema serialization and header annotation for cache-owned immutable pointers while retaining content-based lookup for caller-owned schemas. Run typed authorization and availability middleware before preflight and preserve tool-result error semantics.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(inventory): preserve schema metadata isolation
    
    Advertise the SDK-compatible object schema for typed any input and deep-clone mutable JSON Schema metadata before caching or deriving runtime variants. Add legacy/modern registration and mutation isolation coverage.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(inventory): detach numeric schema bounds and dedupe default traversal
    
    Two Copilot findings on 431b7a2:
    
    - CloneSchemas only deep-copies subschema nodes, so pointer-valued
      numeric validation keywords (Minimum, Maximum, MinLength, MinItems,
      etc.) remained aliased with the caller-owned schema after
      CloneSchema/CachedSchema. A caller mutating one of those pointers
      after caching could race with concurrent cached-schema
      serialization or silently change the cached validation bounds.
      Clone every *int/*float64 keyword explicitly alongside the existing
      collection/metadata cloning.
    
    - CloneSchemaWithoutDefaults's removeSchemaDefaults visited every
      map/pointer child twice: once via two literal child-collection
      loops, and again via schemaChildren, which already covers the same
      fields. This doubled traversal at every nested level, making
      default removal exponential for deeply nested object/array schemas.
      Traverse only the single comprehensive schemaChildren list.
    
    Add regression coverage across CloneSchema, CachedSchema, schema
    inference option cloning, and CloneSchemaWithoutDefaults: every
    *int/*float64 keyword is isolated from caller mutation (including
    under concurrent marshaling), and a 48-level deep chain is used for
    every schema-child field kind to confirm linear, non-exponential
    default removal.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(inventory): gate typed output on supported protocol range
    
    Select modern typed output for SDK-supported ISO-date protocol versions from 2026-07-28 onward. Missing, malformed, and unsupported future versions retain legacy behavior. Cover a later supported version through the selector list seam and verify the public path against the SDK supported set.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(inventory): unwrap pointer inputs before schema inference
    
    Match SDK input inference by unwrapping one pointer level before the cached input key and inference. Preserve nullable output pointer schemas. Cover both public constructors with actual modern and legacy discovery and calls, including structured null output.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(inventory): reuse encoded schema cache for typed tools
    
    Key output encodings by their source definitions while preserving the SDK-registered schema guard. Keep header routing metadata available for legacy and unknown protocol clients.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * feat(context): add typed tool schemas and outputs
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(context): preserve legacy input acceptance
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * test(context): preserve input schema roots and optionality
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(context): validate direct team member calls
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * test(context): pin structured output and legacy text fixtures
    
    Describe profile timestamps and validate null and empty team outputs against modern schemas while retaining exact legacy text.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(context): emit structured empty team collections
    
    Keep legacy null text while returning nonnil typed slices so modern clients receive structured content for empty successful results.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(context): preserve legacy team input schemas
    
    Keep empty identifier rejection in the handler without tightening the published input schema. Pin modern text to structured output and preserve the legacy formatter fixtures.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(context): preserve advertised input schema compatibility
    
    Keep legacy-visible schemas byte-compatible while applying unknown-field acceptance only to the cached runtime validation schema. Verify modern DTO text parity and preserve legacy formatted text.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(context): reject explicit null team user arguments
    
    Preserve the legacy optional user type error before typed decoding, without changing omitted or empty user fallback.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(context): preserve exact routing argument keys
    
    Ignore case-variant routing aliases before typed decoding while retaining canonical fields and unrelated unknown arguments. Cover direct handlers and legacy/modern registered calls, authenticated fallback, canonical null rejection, and missing identifiers.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * feat(comments): add typed visibility tool inputs and outputs
    
    Preserve legacy argument normalization and text responses while exposing protocol-gated structured results for six hide/unhide tools.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * chore: regenerate license files
    
    Auto-generated by license-check workflow
    
    * chore: regenerate license files
    
    Auto-generated by license-check workflow
    
    * test(comments): pin protocol output parity and reason metadata
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(comments): reuse cached visibility output schema
    
    Clarify supported negotiated protocol versions without expanding runtime support.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * feat(search): add typed projected result outputs
    
    * fix(search): preserve field_values presence and add nested schema fixtures
    
    Address review findings on the typed search/list projected-output
    tools (search_code, search_issues, search_pull_requests, list_issues,
    list_pull_requests, list_branches, list_tags):
    
    - issues.go/pullrequests.go: change FieldValues to a pointer-to-slice
      (*[]MinimalFieldValue) so a successful-but-empty [] is preserved in
      structuredContent, matching legacy text output instead of being
      dropped by omitempty.
    - search.go: related adjustments to keep typed search outputs aligned
      with the field_values presence fix.
    - typed_search_outputs_test.go: add representative nested/non-empty
      projected item fixtures so schema-conformance tests actually
      exercise item shapes instead of only validating empty collections.
    - Add/update toolsnaps for list_branches, list_issues,
      list_pull_requests, list_tags, search_code, search_issues, and
      search_pull_requests to reflect the schema.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * test: bound encoded schema parity registration work
    
    Reuse each immutable HTTP server across pagination requests and share the SDK schema cache across parity variants without changing wire comparisons.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * feat(security): add typed alert outputs
    
    Add typed protocol-gated outputs for code quality, code and secret scanning, Dependabot, and security advisories while preserving existing text responses.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(security): preserve compatibility with compact typed outputs
    
    Keep advertised input defaults while disabling runtime default injection for security filters. Normalize null CWE filters, compact findings, and verify modern wire outputs alongside exact legacy formatting.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * feat: type discussion and notification tool outputs
    
    Migrate all eleven tools to typed registration and compact output DTOs. Preserve legacy text, parameter compatibility, pagination, and mutation validation while publishing honest modern output unions.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix: tighten discussion and notification output contracts
    
    Trim notification hypermedia, preserve useful HTML links, and record all modern schemas in canonical snapshots. Preserve source presence during discussion read normalization and cover the Copilot review regression alongside empty/null outputs, IFC labels, sanitization, and output enums.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * test: cover empty-object discussion read requests and modern-text==DTO expectations
    
    Add an explicit {} (fully-empty args) case to
    TestDiscussionReadRequiredArguments proving the normalizer never
    synthesizes placeholder owner/repo/discussionNumber values that would
    let an empty request satisfy SDK required-schema validation and reach
    GraphQL; verified both protocols reject it pre-handler with zero
    GraphQL calls (addresses readiness-audit re-flag of already-fixed
    Copilot review comment 4171698931 in 578e9929).
    
    Also record the pending modern-text==structuredContent DTO contract
    (2026-07-28 protocol) in test expectations; these assertions are
    intentionally red pending the coordinator's central once-marshal
    wrapper in pkg/inventory/typed_output.go, which this branch does not
    yet have.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(notifications): preserve plain status output content
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * feat(repos): add typed commit tool outputs
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(repos): restore commit pagination defaults
    
    Normalize omitted and explicit zero pagination to page 1 and perPage 30 for get_commit and list_commits. Cover legacy and modern wire calls and direct handlers.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(repos): return typed projected commit lists
    
    Use an optional-field commit DTO for full and projected modern outputs while retaining exact legacy text. Cover SHA and nested commit projections, empty lists, and output schema conformance.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * chore: regenerate license files
    
    Auto-generated by license-check workflow
    
    * test(repos): snapshot modern commit tools and strengthen wire coverage
    
    Capture canonical modern schemas, exercise null lists and error suppression with IFC labels, and drop unrelated generated Linux license drift noted by Copilot review.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * test(repos): distinguish legacy and modern commit text
    
    Keep exact-main byte assertions for the legacy protocol and verify modern text represents the same typed DTO as structured content.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * test(repos): sync commit snapshots with parent DTO metadata
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * feat(issues): add typed metadata comment and dependency outputs
    
    Preserve legacy text and argument coercions while exposing protocol-gated structured issue outputs. Add modern, legacy, unknown-version, union-schema and API-error contracts.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * chore: regenerate license files
    
    Auto-generated by license-check workflow
    
    * chore: regenerate license files
    
    Auto-generated by license-check workflow
    
    * fix(issues): preserve zero pagination for duplicate search
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * refactor(issues): preserve compact typed output contracts
    
    Cache DTO schema inference, retain byte-exact handler text, and cover protocol, pagination and schema contracts.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * test(issues): bound encoded schema parity registration work
    
    Reuse immutable HTTP comparison servers and the SDK schema cache across the full parity matrix. Refresh inherited user timestamp descriptions in issue snapshots.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * feat(repos): complete typed repository tool outputs
    
    Migrate the remaining 17 repository tools to concrete inputs and outputs. Preserve existing content, mutations, scopes, filtering, and protocol gating; add wire and schema conformance coverage.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * chore(repos): exclude unrelated snapshot formatting drift
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * refactor(repos): compact typed repository outputs
    
    Replace raw REST output schemas with compact repository DTOs, retain one canonical snapshot per tool, and align modern JSON text with structured output while pinning legacy content.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * feat(issues): add typed consolidated issue tool contracts
    
    Preserve raw helper APIs and exact legacy text while exposing concrete output unions for modern protocols. Retain explicit awaiting statuses and real null responses without exposing SDK-generated error fallbacks.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * chore: regenerate license files
    
    Auto-generated by license-check workflow
    
    * refactor(issues): minimize consolidated typed outputs
    
    Project compact method-discriminated DTOs from API responses while preserving the separate legacy text formatter and explicit app-awaiting status. Cache strict schemas and keep only canonical snapshots. Strengthen null-member presence, schema size, and lockdown projection regressions.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(issues): keep union property schemas portable
    
    Preserve forbidden variant properties as annotated schema objects rather than boolean schemas emitted by jsonschema-go. Cover Inspector's input paths and IFC labels on every issue-read method across protocols.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * test(issues): cover strict sub-issue output variants
    
    Reject unknown methods, states, field types, opaque values and API URL properties while covering nullable and empty method data.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * test(issues): pin compact comment user redaction
    
    Pin unchanged legacy profile/avatar fields separately from compact modern user projections and assert identical lockdown filtering and sanitization across protocols.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(issues): restore main-identical advertised input schema
    
    Remove added custom-field union constraints and sentinel enums from the advertised issue-write input. Preserve runtime exactly-one validation and private strict-schema tests. All three scoped input schemas compare exactly equal to main.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(issues): restore protocol output parity
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * chore: regenerate license files
    
    Auto-generated by license-check workflow
    
    * refactor(issues): minimize granular structured outputs
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    # Conflicts:
    #	pkg/github/__toolsnaps__/add_sub_issue.snap
    #	pkg/github/__toolsnaps__/remove_sub_issue.snap
    #	pkg/github/__toolsnaps__/reprioritize_sub_issue.snap
    #	pkg/github/granular_issue_types.go
    #	pkg/github/issues_granular.go
    #	pkg/github/typed_granular_issue_outputs_test.go
    
    # Please enter the commit message for your changes. Lines starting
    # with '#' will be ignored, and an empty message aborts the commit.
    #
    # interactive rebase in progress; onto 1973eee
    # Last command done (1 command done):
    #    pick 5b8f9d19 # refactor(issues): minimize granular structured outputs
    # No commands remaining.
    # You are currently rebasing.
    #
    # Changes to be committed:
    #	modified:   pkg/github/__toolsnaps__/add_issue_comment_reaction.snap
    #	modified:   pkg/github/__toolsnaps__/add_issue_reaction.snap
    #	modified:   pkg/github/__toolsnaps__/add_sub_issue.snap
    #	modified:   pkg/github/__toolsnaps__/create_issue.snap
    #	modified:   pkg/github/__toolsnaps__/hide_issue_comment.snap
    #	modified:   pkg/github/__toolsnaps__/remove_issue_comment_reaction.snap
    #	modified:   pkg/github/__toolsnaps__/remove_issue_reaction.snap
    #	modified:   pkg/github/__toolsnaps__/remove_sub_issue.snap
    #	modified:   pkg/github/__toolsnaps__/reprioritize_sub_issue.snap
    #	modified:   pkg/github/__toolsnaps__/set_issue_fields.snap
    #	modified:   pkg/github/__toolsnaps__/unhide_issue_comment.snap
    #	modified:   pkg/github/__toolsnaps__/update_issue_assignees.snap
    #	modified:   pkg/github/__toolsnaps__/update_issue_body.snap
    #	modified:   pkg/github/__toolsnaps__/update_issue_labels.snap
    #	modified:   pkg/github/__toolsnaps__/update_issue_milestone.snap
    #	modified:   pkg/github/__toolsnaps__/update_issue_state.snap
    #	modified:   pkg/github/__toolsnaps__/update_issue_title.snap
    #	modified:   pkg/github/__toolsnaps__/update_issue_type.snap
    #	modified:   pkg/github/comment_minimize_test.go
    #	new file:   pkg/github/granular_issue_types.go
    #	modified:   pkg/github/granular_tools_test.go
    #	modified:   pkg/github/issues_granular.go
    #	new file:   pkg/github/typed_granular_issue_outputs_test.go
    #
    
    * refactor(search): use typed account repository and commit tools
    
    Preserve legacy text and search semantics while publishing protocol-gated concrete structured outputs. Cover modern, legacy, and unknown clients, full repository JSON unions, defaults, IFC labels, and errors.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * refactor(search): compact typed repository search output
    
    Replace the full REST repository mirror with MinimalRepository-based
    structured items plus purpose-built full-mode details. Legacy text remains
    unchanged, and canonical snapshots now hold the modern output schema.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * refactor(search): expose repository visibility enum
    
    Remove the derivable node_id from compact full repository search output and
    publish the visibility enum in the static output schema.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * test(search): align snapshots with protocol wrapper
    
    Keep the modern text assertion aligned with structured content after the shared output wrapper change.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * refactor(pull-requests): migrate consolidated PR tools to typed inputs and outputs
    
    Convert pull_request_read, create_pull_request, update_pull_request,
    merge_pull_request, update_pull_request_branch, pull_request_review_write
    (both feature variants), add_comment_to_pending_review and
    add_reply_to_pull_request_comment to NewTool with concrete inputs and
    output DTOs. Input normalizers replay legacy handler checks so legacy
    coercions and error text are preserved.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(pull-requests): align modern text with typed outputs
    
    Use curated output DTOs for modern JSON text while preserving legacy serialization. Cover successful null responses, empty check runs, and Link-header page traversal.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(pull-requests): preserve legacy validation order
    
    Replay parameter checks in handler order and scope cursor validation to review-thread reads. Keep commit message schema descriptions distinct from operation messages.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * refactor(pull-requests): simplify compatibility validation
    
    Remove normalization and test assertions that only pinned which invalid argument wins. Keep per-field validation, accepted coercions, and response-shape behavior.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * refactor(pull-requests): type granular MCP tools
    
    Preserve exact legacy validation and response text while advertising concrete protocol-gated outputs for all granular PR mutations and both thread-resolution variants.
    
    Make the inherited overflow assertion architecture-independent.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * chore: regenerate license files
    
    Auto-generated by license-check workflow
    
    * fix(pull-requests): preserve granular tool compatibility
    
    Keep advertised schemas exact while applying legacy-compatible runtime validation, and verify protocol-era output parity.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * chore: regenerate license files
    
    Auto-generated by license-check workflow
    
    * test(pull-requests): compare schema sets semantically
    
    Treat required properties and enum values as unordered sets in the schema audit.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(pull-requests): retain granular schema descriptions
    
    Keep the original enum guidance in input descriptions while preserving actual JSON Schema enum constraints.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * feat(repos): complete typed repository tool outputs
    
    Migrate the remaining 17 repository tools to concrete inputs and outputs. Preserve existing content, mutations, scopes, filtering, and protocol gating; add wire and schema conformance coverage.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * chore(repos): exclude unrelated snapshot formatting drift
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * refactor(repos): compact typed repository outputs
    
    Replace raw REST output schemas with compact repository DTOs, retain one canonical snapshot per tool, and align modern JSON text with structured output while pinning legacy content.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * feat(issues): add typed consolidated issue tool contracts
    
    Preserve raw helper APIs and exact legacy text while exposing concrete output unions for modern protocols. Retain explicit awaiting statuses and real null responses without exposing SDK-generated error fallbacks.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * chore: regenerate license files
    
    Auto-generated by license-check workflow
    
    * refactor(issues): minimize consolidated typed outputs
    
    Project compact method-discriminated DTOs from API responses while preserving the separate legacy text formatter and explicit app-awaiting status. Cache strict schemas and keep only canonical snapshots. Strengthen null-member presence, schema size, and lockdown projection regressions.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(issues): keep union property schemas portable
    
    Preserve forbidden variant properties as annotated schema objects rather than boolean schemas emitted by jsonschema-go. Cover Inspector's input paths and IFC labels on every issue-read method across protocols.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * test(issues): cover strict sub-issue output variants
    
    Reject unknown methods, states, field types, opaque values and API URL properties while covering nullable and empty method data.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * test(issues): pin compact comment user redaction
    
    Pin unchanged legacy profile/avatar fields separately from compact modern user projections and assert identical lockdown filtering and sanitization across protocols.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(issues): restore main-identical advertised input schema
    
    Remove added custom-field union constraints and sentinel enums from the advertised issue-write input. Preserve runtime exactly-one validation and private strict-schema tests. All three scoped input schemas compare exactly equal to main.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(issues): restore protocol output parity
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * chore: regenerate license files
    
    Auto-generated by license-check workflow
    
    * refactor(issues): minimize granular structured outputs
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    # Conflicts:
    #	pkg/github/__toolsnaps__/add_sub_issue.snap
    #	pkg/github/__toolsnaps__/remove_sub_issue.snap
    #	pkg/github/__toolsnaps__/reprioritize_sub_issue.snap
    #	pkg/github/granular_issue_types.go
    #	pkg/github/issues_granular.go
    #	pkg/github/typed_granular_issue_outputs_test.go
    
    # Please enter the commit message for your changes. Lines starting
    # with '#' will be ignored, and an empty message aborts the commit.
    #
    # interactive rebase in progress; onto 1973eee
    # Last command done (1 command done):
    #    pick 5b8f9d19 # refactor(issues): minimize granular structured outputs
    # No commands remaining.
    # You are currently rebasing.
    #
    # Changes to be committed:
    #	modified:   pkg/github/__toolsnaps__/add_issue_comment_reaction.snap
    #	modified:   pkg/github/__toolsnaps__/add_issue_reaction.snap
    #	modified:   pkg/github/__toolsnaps__/add_sub_issue.snap
    #	modified:   pkg/github/__toolsnaps__/create_issue.snap
    #	modified:   pkg/github/__toolsnaps__/hide_issue_comment.snap
    #	modified:   pkg/github/__toolsnaps__/remove_issue_comment_reaction.snap
    #	modified:   pkg/github/__toolsnaps__/remove_issue_reaction.snap
    #	modified:   pkg/github/__toolsnaps__/remove_sub_issue.snap
    #	modified:   pkg/github/__toolsnaps__/reprioritize_sub_issue.snap
    #	modified:   pkg/github/__toolsnaps__/set_issue_fields.snap
    #	modified:   pkg/github/__toolsnaps__/unhide_issue_comment.snap
    #	modified:   pkg/github/__toolsnaps__/update_issue_assignees.snap
    #	modified:   pkg/github/__toolsnaps__/update_issue_body.snap
    #	modified:   pkg/github/__toolsnaps__/update_issue_labels.snap
    #	modified:   pkg/github/__toolsnaps__/update_issue_milestone.snap
    #	modified:   pkg/github/__toolsnaps__/update_issue_state.snap
    #	modified:   pkg/github/__toolsnaps__/update_issue_title.snap
    #	modified:   pkg/github/__toolsnaps__/update_issue_type.snap
    #	modified:   pkg/github/comment_minimize_test.go
    #	new file:   pkg/github/granular_issue_types.go
    #	modified:   pkg/github/granular_tools_test.go
    #	modified:   pkg/github/issues_granular.go
    #	new file:   pkg/github/typed_granular_issue_outputs_test.go
    #
    
    * refactor(search): use typed account repository and commit tools
    
    Preserve legacy text and search semantics while publishing protocol-gated concrete structured outputs. Cover modern, legacy, and unknown clients, full repository JSON unions, defaults, IFC labels, and errors.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * refactor(search): compact typed repository search output
    
    Replace the full REST repository mirror with MinimalRepository-based
    structured items plus purpose-built full-mode details. Legacy text remains
    unchanged, and canonical snapshots now hold the modern output schema.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * refactor(search): expose repository visibility enum
    
    Remove the derivable node_id from compact full repository search output and
    publish the visibility enum in the static output schema.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * test(search): align snapshots with protocol wrapper
    
    Keep the modern text assertion aligned with structured content after the shared output wrapper change.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * refactor(pull-requests): migrate consolidated PR tools to typed inputs and outputs
    
    Convert pull_request_read, create_pull_request, update_pull_request,
    merge_pull_request, update_pull_request_branch, pull_request_review_write
    (both feature variants), add_comment_to_pending_review and
    add_reply_to_pull_request_comment to NewTool with concrete inputs and
    output DTOs. Input normalizers replay legacy handler checks so legacy
    coercions and error text are preserved.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(pull-requests): align modern text with typed outputs
    
    Use curated output DTOs for modern JSON text while preserving legacy serialization. Cover successful null responses, empty check runs, and Link-header page traversal.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(pull-requests): preserve legacy validation order
    
    Replay parameter checks in handler order and scope cursor validation to review-thread reads. Keep commit message schema descriptions distinct from operation messages.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * refactor(pull-requests): simplify compatibility validation
    
    Remove normalization and test assertions that only pinned which invalid argument wins. Keep per-field validation, accepted coercions, and response-shape behavior.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * refactor(pull-requests): type granular MCP tools
    
    Preserve exact legacy validation and response text while advertising concrete protocol-gated outputs for all granular PR mutations and both thread-resolution variants.
    
    Make the inherited overflow assertion architecture-independent.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * chore: regenerate license files
    
    Auto-generated by license-check workflow
    
    * fix(pull-requests): preserve granular tool compatibility
    
    Keep advertised schemas exact while applying legacy-compatible runtime validation, and verify protocol-era output parity.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * chore: regenerate license files
    
    Auto-generated by license-check workflow
    
    * test(pull-requests): compare schema sets semantically
    
    Treat required properties and enum values as unordered sets in the schema audit.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(pull-requests): retain granular schema descriptions
    
    Keep the original enum guidance in input descriptions while preserving actual JSON Schema enum constraints.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    ---------
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
    3 people authored Oct 6, 2026
    Configuration menu
    Copy the full SHA
    da2cbc8 View commit details
    Browse the repository at this point in the history
  16. refactor(actions): type consolidated MCP tools (#3398)

    * feat(inventory): add typed MCP tool registration foundation
    
    Use the MCP SDK's generic registration for concrete input/output types, with protocol-gated output schemas and structured results. Keep raw handlers compatible and apply shared middleware on both paths.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * chore: regenerate license files
    
    Auto-generated by license-check workflow
    
    * test: cover legacy typed CSV results
    
    Exercise the typed array and object paths through an initialized 2025-11-25 MCP session. Verify CSV text is returned once without structured output or the SDK JSON fallback.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * feat(inventory): normalize legacy typed arguments
    
    Add a raw JSON input normalizer that runs before SDK schema validation so migrated tools can retain legacy input coercions without widening their published schemas. Test case-folded issue states, numeric string IDs, validation failures and replacement registrations.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * chore: regenerate license files
    
    Auto-generated by license-check workflow
    
    * test(inventory): preserve typed input optionality
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(inventory): stabilize typed schema compatibility
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * test(inventory): cover protocol isolation across clients
    
    Exercise simultaneous legacy and modern sessions against one typed tool, plus stateless HTTP requests with modern, legacy, and absent protocol headers.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(inventory): harden typed schema registration contracts
    
    Cache immutable schema variants and enum overrides, preserve runtime input compatibility and request-era output behavior, and normalize dynamic scope challenges before dispatch.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(inventory): cache warm schemas and guard typed preflight
    
    Avoid repeated canonical schema serialization and header annotation for cache-owned immutable pointers while retaining content-based lookup for caller-owned schemas. Run typed authorization and availability middleware before preflight and preserve tool-result error semantics.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(inventory): preserve schema metadata isolation
    
    Advertise the SDK-compatible object schema for typed any input and deep-clone mutable JSON Schema metadata before caching or deriving runtime variants. Add legacy/modern registration and mutation isolation coverage.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(inventory): detach numeric schema bounds and dedupe default traversal
    
    Two Copilot findings on 431b7a2:
    
    - CloneSchemas only deep-copies subschema nodes, so pointer-valued
      numeric validation keywords (Minimum, Maximum, MinLength, MinItems,
      etc.) remained aliased with the caller-owned schema after
      CloneSchema/CachedSchema. A caller mutating one of those pointers
      after caching could race with concurrent cached-schema
      serialization or silently change the cached validation bounds.
      Clone every *int/*float64 keyword explicitly alongside the existing
      collection/metadata cloning.
    
    - CloneSchemaWithoutDefaults's removeSchemaDefaults visited every
      map/pointer child twice: once via two literal child-collection
      loops, and again via schemaChildren, which already covers the same
      fields. This doubled traversal at every nested level, making
      default removal exponential for deeply nested object/array schemas.
      Traverse only the single comprehensive schemaChildren list.
    
    Add regression coverage across CloneSchema, CachedSchema, schema
    inference option cloning, and CloneSchemaWithoutDefaults: every
    *int/*float64 keyword is isolated from caller mutation (including
    under concurrent marshaling), and a 48-level deep chain is used for
    every schema-child field kind to confirm linear, non-exponential
    default removal.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(inventory): gate typed output on supported protocol range
    
    Select modern typed output for SDK-supported ISO-date protocol versions from 2026-07-28 onward. Missing, malformed, and unsupported future versions retain legacy behavior. Cover a later supported version through the selector list seam and verify the public path against the SDK supported set.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(inventory): unwrap pointer inputs before schema inference
    
    Match SDK input inference by unwrapping one pointer level before the cached input key and inference. Preserve nullable output pointer schemas. Cover both public constructors with actual modern and legacy discovery and calls, including structured null output.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(inventory): reuse encoded schema cache for typed tools
    
    Key output encodings by their source definitions while preserving the SDK-registered schema guard. Keep header routing metadata available for legacy and unknown protocol clients.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * feat(context): add typed tool schemas and outputs
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(context): preserve legacy input acceptance
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * test(context): preserve input schema roots and optionality
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(context): validate direct team member calls
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * test(context): pin structured output and legacy text fixtures
    
    Describe profile timestamps and validate null and empty team outputs against modern schemas while retaining exact legacy text.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(context): emit structured empty team collections
    
    Keep legacy null text while returning nonnil typed slices so modern clients receive structured content for empty successful results.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(context): preserve legacy team input schemas
    
    Keep empty identifier rejection in the handler without tightening the published input schema. Pin modern text to structured output and preserve the legacy formatter fixtures.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(context): preserve advertised input schema compatibility
    
    Keep legacy-visible schemas byte-compatible while applying unknown-field acceptance only to the cached runtime validation schema. Verify modern DTO text parity and preserve legacy formatted text.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(context): reject explicit null team user arguments
    
    Preserve the legacy optional user type error before typed decoding, without changing omitted or empty user fallback.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(context): preserve exact routing argument keys
    
    Ignore case-variant routing aliases before typed decoding while retaining canonical fields and unrelated unknown arguments. Cover direct handlers and legacy/modern registered calls, authenticated fallback, canonical null rejection, and missing identifiers.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * feat(comments): add typed visibility tool inputs and outputs
    
    Preserve legacy argument normalization and text responses while exposing protocol-gated structured results for six hide/unhide tools.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * chore: regenerate license files
    
    Auto-generated by license-check workflow
    
    * chore: regenerate license files
    
    Auto-generated by license-check workflow
    
    * test(comments): pin protocol output parity and reason metadata
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(comments): reuse cached visibility output schema
    
    Clarify supported negotiated protocol versions without expanding runtime support.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * feat(search): add typed projected result outputs
    
    * fix(search): preserve field_values presence and add nested schema fixtures
    
    Address review findings on the typed search/list projected-output
    tools (search_code, search_issues, search_pull_requests, list_issues,
    list_pull_requests, list_branches, list_tags):
    
    - issues.go/pullrequests.go: change FieldValues to a pointer-to-slice
      (*[]MinimalFieldValue) so a successful-but-empty [] is preserved in
      structuredContent, matching legacy text output instead of being
      dropped by omitempty.
    - search.go: related adjustments to keep typed search outputs aligned
      with the field_values presence fix.
    - typed_search_outputs_test.go: add representative nested/non-empty
      projected item fixtures so schema-conformance tests actually
      exercise item shapes instead of only validating empty collections.
    - Add/update toolsnaps for list_branches, list_issues,
      list_pull_requests, list_tags, search_code, search_issues, and
      search_pull_requests to reflect the schema.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * test: bound encoded schema parity registration work
    
    Reuse each immutable HTTP server across pagination requests and share the SDK schema cache across parity variants without changing wire comparisons.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * feat(security): add typed alert outputs
    
    Add typed protocol-gated outputs for code quality, code and secret scanning, Dependabot, and security advisories while preserving existing text responses.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(security): preserve compatibility with compact typed outputs
    
    Keep advertised input defaults while disabling runtime default injection for security filters. Normalize null CWE filters, compact findings, and verify modern wire outputs alongside exact legacy formatting.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * feat: type discussion and notification tool outputs
    
    Migrate all eleven tools to typed registration and compact output DTOs. Preserve legacy text, parameter compatibility, pagination, and mutation validation while publishing honest modern output unions.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix: tighten discussion and notification output contracts
    
    Trim notification hypermedia, preserve useful HTML links, and record all modern schemas in canonical snapshots. Preserve source presence during discussion read normalization and cover the Copilot review regression alongside empty/null outputs, IFC labels, sanitization, and output enums.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * test: cover empty-object discussion read requests and modern-text==DTO expectations
    
    Add an explicit {} (fully-empty args) case to
    TestDiscussionReadRequiredArguments proving the normalizer never
    synthesizes placeholder owner/repo/discussionNumber values that would
    let an empty request satisfy SDK required-schema validation and reach
    GraphQL; verified both protocols reject it pre-handler with zero
    GraphQL calls (addresses readiness-audit re-flag of already-fixed
    Copilot review comment 4171698931 in 578e9929).
    
    Also record the pending modern-text==structuredContent DTO contract
    (2026-07-28 protocol) in test expectations; these assertions are
    intentionally red pending the coordinator's central once-marshal
    wrapper in pkg/inventory/typed_output.go, which this branch does not
    yet have.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(notifications): preserve plain status output content
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * feat(repos): add typed commit tool outputs
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(repos): restore commit pagination defaults
    
    Normalize omitted and explicit zero pagination to page 1 and perPage 30 for get_commit and list_commits. Cover legacy and modern wire calls and direct handlers.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(repos): return typed projected commit lists
    
    Use an optional-field commit DTO for full and projected modern outputs while retaining exact legacy text. Cover SHA and nested commit projections, empty lists, and output schema conformance.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * chore: regenerate license files
    
    Auto-generated by license-check workflow
    
    * test(repos): snapshot modern commit tools and strengthen wire coverage
    
    Capture canonical modern schemas, exercise null lists and error suppression with IFC labels, and drop unrelated generated Linux license drift noted by Copilot review.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * test(repos): distinguish legacy and modern commit text
    
    Keep exact-main byte assertions for the legacy protocol and verify modern text represents the same typed DTO as structured content.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * test(repos): sync commit snapshots with parent DTO metadata
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * feat(issues): add typed metadata comment and dependency outputs
    
    Preserve legacy text and argument coercions while exposing protocol-gated structured issue outputs. Add modern, legacy, unknown-version, union-schema and API-error contracts.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * chore: regenerate license files
    
    Auto-generated by license-check workflow
    
    * chore: regenerate license files
    
    Auto-generated by license-check workflow
    
    * fix(issues): preserve zero pagination for duplicate search
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * refactor(issues): preserve compact typed output contracts
    
    Cache DTO schema inference, retain byte-exact handler text, and cover protocol, pagination and schema contracts.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * test(issues): bound encoded schema parity registration work
    
    Reuse immutable HTTP comparison servers and the SDK schema cache across the full parity matrix. Refresh inherited user timestamp descriptions in issue snapshots.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * feat(repos): complete typed repository tool outputs
    
    Migrate the remaining 17 repository tools to concrete inputs and outputs. Preserve existing content, mutations, scopes, filtering, and protocol gating; add wire and schema conformance coverage.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * chore(repos): exclude unrelated snapshot formatting drift
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * refactor(repos): compact typed repository outputs
    
    Replace raw REST output schemas with compact repository DTOs, retain one canonical snapshot per tool, and align modern JSON text with structured output while pinning legacy content.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * feat(issues): add typed consolidated issue tool contracts
    
    Preserve raw helper APIs and exact legacy text while exposing concrete output unions for modern protocols. Retain explicit awaiting statuses and real null responses without exposing SDK-generated error fallbacks.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * chore: regenerate license files
    
    Auto-generated by license-check workflow
    
    * refactor(issues): minimize consolidated typed outputs
    
    Project compact method-discriminated DTOs from API responses while preserving the separate legacy text formatter and explicit app-awaiting status. Cache strict schemas and keep only canonical snapshots. Strengthen null-member presence, schema size, and lockdown projection regressions.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(issues): keep union property schemas portable
    
    Preserve forbidden variant properties as annotated schema objects rather than boolean schemas emitted by jsonschema-go. Cover Inspector's input paths and IFC labels on every issue-read method across protocols.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * test(issues): cover strict sub-issue output variants
    
    Reject unknown methods, states, field types, opaque values and API URL properties while covering nullable and empty method data.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * test(issues): pin compact comment user redaction
    
    Pin unchanged legacy profile/avatar fields separately from compact modern user projections and assert identical lockdown filtering and sanitization across protocols.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(issues): restore main-identical advertised input schema
    
    Remove added custom-field union constraints and sentinel enums from the advertised issue-write input. Preserve runtime exactly-one validation and private strict-schema tests. All three scoped input schemas compare exactly equal to main.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(issues): restore protocol output parity
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * chore: regenerate license files
    
    Auto-generated by license-check workflow
    
    * refactor(issues): minimize granular structured outputs
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    # Conflicts:
    #	pkg/github/__toolsnaps__/add_sub_issue.snap
    #	pkg/github/__toolsnaps__/remove_sub_issue.snap
    #	pkg/github/__toolsnaps__/reprioritize_sub_issue.snap
    #	pkg/github/granular_issue_types.go
    #	pkg/github/issues_granular.go
    #	pkg/github/typed_granular_issue_outputs_test.go
    
    # Please enter the commit message for your changes. Lines starting
    # with '#' will be ignored, and an empty message aborts the commit.
    #
    # interactive rebase in progress; onto 1973eee
    # Last command done (1 command done):
    #    pick 5b8f9d19 # refactor(issues): minimize granular structured outputs
    # No commands remaining.
    # You are currently rebasing.
    #
    # Changes to be committed:
    #	modified:   pkg/github/__toolsnaps__/add_issue_comment_reaction.snap
    #	modified:   pkg/github/__toolsnaps__/add_issue_reaction.snap
    #	modified:   pkg/github/__toolsnaps__/add_sub_issue.snap
    #	modified:   pkg/github/__toolsnaps__/create_issue.snap
    #	modified:   pkg/github/__toolsnaps__/hide_issue_comment.snap
    #	modified:   pkg/github/__toolsnaps__/remove_issue_comment_reaction.snap
    #	modified:   pkg/github/__toolsnaps__/remove_issue_reaction.snap
    #	modified:   pkg/github/__toolsnaps__/remove_sub_issue.snap
    #	modified:   pkg/github/__toolsnaps__/reprioritize_sub_issue.snap
    #	modified:   pkg/github/__toolsnaps__/set_issue_fields.snap
    #	modified:   pkg/github/__toolsnaps__/unhide_issue_comment.snap
    #	modified:   pkg/github/__toolsnaps__/update_issue_assignees.snap
    #	modified:   pkg/github/__toolsnaps__/update_issue_body.snap
    #	modified:   pkg/github/__toolsnaps__/update_issue_labels.snap
    #	modified:   pkg/github/__toolsnaps__/update_issue_milestone.snap
    #	modified:   pkg/github/__toolsnaps__/update_issue_state.snap
    #	modified:   pkg/github/__toolsnaps__/update_issue_title.snap
    #	modified:   pkg/github/__toolsnaps__/update_issue_type.snap
    #	modified:   pkg/github/comment_minimize_test.go
    #	new file:   pkg/github/granular_issue_types.go
    #	modified:   pkg/github/granular_tools_test.go
    #	modified:   pkg/github/issues_granular.go
    #	new file:   pkg/github/typed_granular_issue_outputs_test.go
    #
    
    * refactor(search): use typed account repository and commit tools
    
    Preserve legacy text and search semantics while publishing protocol-gated concrete structured outputs. Cover modern, legacy, and unknown clients, full repository JSON unions, defaults, IFC labels, and errors.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * refactor(search): compact typed repository search output
    
    Replace the full REST repository mirror with MinimalRepository-based
    structured items plus purpose-built full-mode details. Legacy text remains
    unchanged, and canonical snapshots now hold the modern output schema.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * refactor(search): expose repository visibility enum
    
    Remove the derivable node_id from compact full repository search output and
    publish the visibility enum in the static output schema.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * test(search): align snapshots with protocol wrapper
    
    Keep the modern text assertion aligned with structured content after the shared output wrapper change.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * refactor(pull-requests): migrate consolidated PR tools to typed inputs and outputs
    
    Convert pull_request_read, create_pull_request, update_pull_request,
    merge_pull_request, update_pull_request_branch, pull_request_review_write
    (both feature variants), add_comment_to_pending_review and
    add_reply_to_pull_request_comment to NewTool with concrete inputs and
    output DTOs. Input normalizers replay legacy handler checks so legacy
    coercions and error text are preserved.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(pull-requests): align modern text with typed outputs
    
    Use curated output DTOs for modern JSON text while preserving legacy serialization. Cover successful null responses, empty check runs, and Link-header page traversal.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(pull-requests): preserve legacy validation order
    
    Replay parameter checks in handler order and scope cursor validation to review-thread reads. Keep commit message schema descriptions distinct from operation messages.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * refactor(pull-requests): simplify compatibility validation
    
    Remove normalization and test assertions that only pinned which invalid argument wins. Keep per-field validation, accepted coercions, and response-shape behavior.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * refactor(pull-requests): type granular MCP tools
    
    Preserve exact legacy validation and response text while advertising concrete protocol-gated outputs for all granular PR mutations and both thread-resolution variants.
    
    Make the inherited overflow assertion architecture-independent.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * chore: regenerate license files
    
    Auto-generated by license-check workflow
    
    * fix(pull-requests): preserve granular tool compatibility
    
    Keep advertised schemas exact while applying legacy-compatible runtime validation, and verify protocol-era output parity.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * chore: regenerate license files
    
    Auto-generated by license-check workflow
    
    * test(pull-requests): compare schema sets semantically
    
    Treat required properties and enum values as unordered sets in the schema audit.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(pull-requests): retain granular schema descriptions
    
    Keep the original enum guidance in input descriptions while preserving actual JSON Schema enum constraints.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * refactor(actions): type consolidated MCP tools
    
    Preserve legacy Actions payloads, validation ordering, coercions, IFC labels, and scope annotations while exposing concrete method-specific output unions to supported clients.
    
    Reject unrecognized versions in the shared structured-output capability gate without changing tool availability rules.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * feat(actions): add typed Actions tool outputs
    
    Expose compact method-discriminated outputs for Actions tools while preserving legacy behavior, input coercions, and pagination forwarding.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * feat(repos): complete typed repository tool outputs
    
    Migrate the remaining 17 repository tools to concrete inputs and outputs. Preserve existing content, mutations, scopes, filtering, and protocol gating; add wire and schema conformance coverage.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * chore(repos): exclude unrelated snapshot formatting drift
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * refactor(repos): compact typed repository outputs
    
    Replace raw REST output schemas with compact repository DTOs, retain one canonical snapshot per tool, and align modern JSON text with structured output while pinning legacy content.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * feat(issues): add typed consolidated issue tool contracts
    
    Preserve raw helper APIs and exact legacy text while exposing concrete output unions for modern protocols. Retain explicit awaiting statuses and real null responses without exposing SDK-generated error fallbacks.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * chore: regenerate license files
    
    Auto-generated by license-check workflow
    
    * refactor(issues): minimize consolidated typed outputs
    
    Project compact method-discriminated DTOs from API responses while preserving the separate legacy text formatter and explicit app-awaiting status. Cache strict schemas and keep only canonical snapshots. Strengthen null-member presence, schema size, and lockdown projection regressions.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(issues): keep union property schemas portable
    
    Preserve forbidden variant properties as annotated schema objects rather than boolean schemas emitted by jsonschema-go. Cover Inspector's input paths and IFC labels on every issue-read method across protocols.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * test(issues): cover strict sub-issue output variants
    
    Reject unknown methods, states, field types, opaque values and API URL properties while covering nullable and empty method data.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * test(issues): pin compact comment user redaction
    
    Pin unchanged legacy profile/avatar fields separately from compact modern user projections and assert identical lockdown filtering and sanitization across protocols.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(issues): restore main-identical advertised input schema
    
    Remove added custom-field union constraints and sentinel enums from the advertised issue-write input. Preserve runtime exactly-one validation and private strict-schema tests. All three scoped input schemas compare exactly equal to main.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(issues): restore protocol output parity
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * chore: regenerate license files
    
    Auto-generated by license-check workflow
    
    * refactor(issues): minimize granular structured outputs
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    # Conflicts:
    #	pkg/github/__toolsnaps__/add_sub_issue.snap
    #	pkg/github/__toolsnaps__/remove_sub_issue.snap
    #	pkg/github/__toolsnaps__/reprioritize_sub_issue.snap
    #	pkg/github/granular_issue_types.go
    #	pkg/github/issues_granular.go
    #	pkg/github/typed_granular_issue_outputs_test.go
    
    # Please enter the commit message for your changes. Lines starting
    # with '#' will be ignored, and an empty message aborts the commit.
    #
    # interactive rebase in progress; onto 1973eee
    # Last command done (1 command done):
    #    pick 5b8f9d19 # refactor(issues): minimize granular structured outputs
    # No commands remaining.
    # You are currently rebasing.
    #
    # Changes to be committed:
    #	modified:   pkg/github/__toolsnaps__/add_issue_comment_reaction.snap
    #	modified:   pkg/github/__toolsnaps__/add_issue_reaction.snap
    #	modified:   pkg/github/__toolsnaps__/add_sub_issue.snap
    #	modified:   pkg/github/__toolsnaps__/create_issue.snap
    #	modified:   pkg/github/__toolsnaps__/hide_issue_comment.snap
    #	modified:   pkg/github/__toolsnaps__/remove_issue_comment_reaction.snap
    #	modified:   pkg/github/__toolsnaps__/remove_issue_reaction.snap
    #	modified:   pkg/github/__toolsnaps__/remove_sub_issue.snap
    #	modified:   pkg/github/__toolsnaps__/reprioritize_sub_issue.snap
    #	modified:   pkg/github/__toolsnaps__/set_issue_fields.snap
    #	modified:   pkg/github/__toolsnaps__/unhide_issue_comment.snap
    #	modified:   pkg/github/__toolsnaps__/update_issue_assignees.snap
    #	modified:   pkg/github/__toolsnaps__/update_issue_body.snap
    #	modified:   pkg/github/__toolsnaps__/update_issue_labels.snap
    #	modified:   pkg/github/__toolsnaps__/update_issue_milestone.snap
    #	modified:   pkg/github/__toolsnaps__/update_issue_state.snap
    #	modified:   pkg/github/__toolsnaps__/update_issue_title.snap
    #	modified:   pkg/github/__toolsnaps__/update_issue_type.snap
    #	modified:   pkg/github/comment_minimize_test.go
    #	new file:   pkg/github/granular_issue_types.go
    #	modified:   pkg/github/granular_tools_test.go
    #	modified:   pkg/github/issues_granular.go
    #	new file:   pkg/github/typed_granular_issue_outputs_test.go
    #
    
    * refactor(search): use typed account repository and commit tools
    
    Preserve legacy text and search semantics while publishing protocol-gated concrete structured outputs. Cover modern, legacy, and unknown clients, full repository JSON unions, defaults, IFC labels, and errors.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * refactor(search): compact typed repository search output
    
    Replace the full REST repository mirror with MinimalRepository-based
    structured items plus purpose-built full-mode details. Legacy text remains
    unchanged, and canonical snapshots now hold the modern output schema.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * refactor(search): expose repository visibility enum
    
    Remove the derivable node_id from compact full repository search output and
    publish the visibility enum in the static output schema.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * test(search): align snapshots with protocol wrapper
    
    Keep the modern text assertion aligned with structured content after the shared output wrapper change.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * refactor(pull-requests): migrate consolidated PR tools to typed inputs and outputs
    
    Convert pull_request_read, create_pull_request, update_pull_request,
    merge_pull_request, update_pull_request_branch, pull_request_review_write
    (both feature variants), add_comment_to_pending_review and
    add_reply_to_pull_request_comment to NewTool with concrete inputs and
    output DTOs. Input normalizers replay legacy handler checks so legacy
    coercions and error text are preserved.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(pull-requests): align modern text with typed outputs
    
    Use curated output DTOs for modern JSON text while preserving legacy serialization. Cover successful null responses, empty check runs, and Link-header page traversal.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(pull-requests): preserve legacy validation order
    
    Replay parameter checks in handler order and scope cursor validation to review-thread reads. Keep commit message schema descriptions distinct from operation messages.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * refactor(pull-requests): simplify compatibility validation
    
    Remove normalization and test assertions that only pinned which invalid argument wins. Keep per-field validation, accepted coercions, and response-shape behavior.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * refactor(pull-requests): type granular MCP tools
    
    Preserve exact legacy validation and response text while advertising concrete protocol-gated outputs for all granular PR mutations and both thread-resolution variants.
    
    Make the inherited overflow assertion architecture-independent.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * chore: regenerate license files
    
    Auto-generated by license-check workflow
    
    * fix(pull-requests): preserve granular tool compatibility
    
    Keep advertised schemas exact while applying legacy-compatible runtime validation, and verify protocol-era output parity.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * chore: regenerate license files
    
    Auto-generated by license-check workflow
    
    * test(pull-requests): compare schema sets semantically
    
    Treat required properties and enum values as unordered sets in the schema audit.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * fix(pull-requests): retain granular schema descriptions
    
    Keep the original enum guidance in input descriptions while preserving actual JSON Schema enum constraints.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * refactor(actions): type consolidated MCP tools
    
    Preserve legacy Actions payloads, validation ordering, coercions, IFC labels, and scope annotations while exposing concrete method-specific output unions to supported clients.
    
    Reject unrecognized versions in the shared structured-output capability gate without changing tool availability rules.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    * feat(actions): add typed Actions tool outputs
    
    Expose compact method-discriminated outputs for Actions tools while preserving legacy behavior, input coercions, and pagination forwarding.
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    
    ---------
    
    Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
    Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
    3 people authored Oct 6, 2026
    Configuration menu
    Copy the full SHA
    2d5ad6e View commit details
    Browse the repository at this point in the history
  17. Address typed output compatibility gaps (#3433)

    * preserve typed tool compatibility
    
    * retain typed output fidelity
    
    * tighten typed output contracts
    kerobbi authored Oct 6, 2026
    Configuration menu
    Copy the full SHA
    cb29040 View commit details
    Browse the repository at this point in the history
Loading