Skip to content

feat: add integrity-reactions feature flag for MCPG reaction-based integrity promotion/demotion#25948

Open
Copilot wants to merge 5 commits intomainfrom
copilot/add-integrity-reactions-feature-flag
Open

feat: add integrity-reactions feature flag for MCPG reaction-based integrity promotion/demotion#25948
Copilot wants to merge 5 commits intomainfrom
copilot/add-integrity-reactions-feature-flag

Conversation

Copy link
Copy Markdown
Contributor

Copilot AI commented Apr 12, 2026

Adds integrity-reactions feature flag that injects endorsement-reactions and disapproval-reactions into the MCPG allow-only policy, enabling maintainer reaction-based integrity promotion/demotion (gh-aw-mcpg#3618). Version-gated to MCPG >= v0.2.18.

Reaction-based integrity is only enforced in proxy mode (DIFC proxy / CLI proxy). In MCP gateway mode, reaction authors cannot be identified from the GitHub MCP server protocol, so reactions are ignored for integrity decisions. The compiler emits a warning when reactions are configured with the gateway path.

New frontmatter syntax

features:
  integrity-reactions: true

tools:
  github:
    min-integrity: approved
    # All reaction fields below are optional.
    # endorsement-reactions defaults to ["THUMBS_UP", "HEART"]
    # disapproval-reactions defaults to ["THUMBS_DOWN", "CONFUSED"]
    endorsement-reactions: ["THUMBS_UP", "HEART"]    # optional, shown = default
    disapproval-reactions: ["THUMBS_DOWN", "CONFUSED"] # optional, shown = default
    disapproval-integrity: none           # optional, default: none
    endorser-min-integrity: approved      # optional, default: approved

Enabling integrity-reactions: true with min-integrity set is sufficient — all four reaction fields are optional and receive sensible defaults at compile time.

Changes

  • ConstantsIntegrityReactionsFeatureFlag = "integrity-reactions" and MCPGIntegrityReactionsMinVersion = "v0.2.18"
  • Struct/parsing — 4 new fields on GitHubToolConfig (EndorsementReactions, DisapprovalReactions, DisapprovalIntegrity, EndorserMinIntegrity) parsed in tools_parser.go
  • DefaultsDefaultEndorsementReactions = ["THUMBS_UP", "HEART"] and DefaultDisapprovalReactions = ["THUMBS_DOWN", "CONFUSED"] applied automatically when the feature flag is enabled but lists are not explicitly set
  • Injection (proxy only)injectIntegrityReactionFields() helper called in the proxy code path only:
    • DIFC proxy policy builder (compiler_difc_proxy.go) — getDIFCProxyPolicyJSON() now accepts data + gatewayConfig to support injection with defaults
    • CLI proxy shares the same code path
  • Gateway warningmcp_renderer_github.go no longer injects reactions; instead emits a compile-time warning when reactions are configured with the gateway path, explaining that reaction authors cannot be identified from the GitHub MCP server
  • Version gatemcpgSupportsIntegrityReactions(gatewayConfig) uses semver comparison; default MCPG version (v0.2.17) is below the minimum, so existing workflows are unaffected
  • ValidationvalidateIntegrityReactions() enforces: feature flag required when reaction fields are set, MCPG >= v0.2.18, min-integrity required when feature flag is enabled (even without explicit reaction lists since defaults will be injected), valid ReactionContent enum values, valid integrity level strings
  • Schemaendorsement-reactions, disapproval-reactions, disapproval-integrity, endorser-min-integrity added to main_workflow_schema.json with enum constraints, default values, and proxy-only documentation

Backward compatibility

Feature flag defaults off. make recompile produces no changes to existing .lock.yml files.

Closes #25947

Copilot AI and others added 2 commits April 13, 2026 00:00
Add new feature flag `integrity-reactions` that, when enabled, injects
`endorsement-reactions` and `disapproval-reactions` fields into the MCPG
allow-only integrity policy. Requires MCPG >= v0.2.18.

Changes:
- Add IntegrityReactionsFeatureFlag constant
- Add MCPGIntegrityReactionsMinVersion = "v0.2.18" constant
- Add new fields to GitHubToolConfig struct
- Parse new reaction fields in tools_parser.go
- Add mcpgSupportsIntegrityReactions() version gate helper
- Add injectIntegrityReactionFields() helper for both code paths
- Inject reactions into gateway allow-only policy (mcp_renderer_github.go)
- Inject reactions into DIFC proxy policy (compiler_difc_proxy.go)
- Add validateIntegrityReactions() validation
- Wire up validation in both compiler paths
- Update JSON schema with new fields
- Add comprehensive unit tests

Agent-Logs-Url: https://github.com/github/gh-aw/sessions/24601d6f-99dd-4b19-ac56-7c90f187f8e9

Co-authored-by: lpcox <15877973+lpcox@users.noreply.github.com>
…mprove function doc

Agent-Logs-Url: https://github.com/github/gh-aw/sessions/24601d6f-99dd-4b19-ac56-7c90f187f8e9

Co-authored-by: lpcox <15877973+lpcox@users.noreply.github.com>
Copilot AI changed the title [WIP] Add integrity-reactions feature flag to MCPG allow-only policy feat: add integrity-reactions feature flag for MCPG reaction-based integrity promotion/demotion Apr 13, 2026
Copilot AI requested a review from lpcox April 13, 2026 00:03
@lpcox lpcox marked this pull request as ready for review April 13, 2026 00:03
Copilot AI review requested due to automatic review settings April 13, 2026 00:04
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds an integrity-reactions feature flag to support maintainer reaction-based integrity promotion/demotion by injecting reaction-related fields into MCPG guard policy output, gated to MCPG >= v0.2.18.

Changes:

  • Added new GitHub tool config fields (endorsement-reactions, disapproval-reactions, disapproval-integrity, endorser-min-integrity) plus parsing and schema updates.
  • Implemented version-gated injection of these fields into rendered MCP gateway guard-policies and DIFC proxy policy JSON.
  • Added validation + tests for the feature flag, MCPG version gate, and allowed enum values.
Show a summary per file
File Description
pkg/workflow/tools_validation.go Adds validation for integrity-reactions configuration (feature flag, version gate, enums).
pkg/workflow/tools_validation_test.go Adds unit tests for version gating, validation, and DIFC proxy injection behavior.
pkg/workflow/tools_types.go Extends GitHubToolConfig with reaction-based integrity fields.
pkg/workflow/tools_parser.go Parses new reaction-based integrity fields from tools.github config.
pkg/workflow/mcp_renderer_github.go Injects reaction fields into explicit allow-only guard policy before rendering.
pkg/workflow/mcp_github_config.go Adds injection helper + MCPG version support check using semver compare.
pkg/workflow/compiler_string_api.go Runs integrity-reactions validation during string-based workflow parsing.
pkg/workflow/compiler_orchestrator_workflow.go Runs integrity-reactions validation during file-based workflow parsing.
pkg/workflow/compiler_difc_proxy.go Extends DIFC proxy policy builder to accept workflow data/config and inject reaction fields.
pkg/workflow/compiler_difc_proxy_test.go Updates DIFC proxy policy JSON tests for new function signature.
pkg/parser/schemas/main_workflow_schema.json Adds schema properties/enums for the new GitHub reaction-based guard-policy fields.
pkg/constants/version_constants.go Adds MCPGIntegrityReactionsMinVersion = v0.2.18.
pkg/constants/feature_constants.go Adds IntegrityReactionsFeatureFlag = "integrity-reactions".

Copilot's findings

Tip

Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

  • Files reviewed: 13/13 changed files
  • Comments generated: 5

Comment on lines +153 to +160
// Validate integrity-reactions feature configuration
var gatewayConfig *MCPGatewayRuntimeConfig
if workflowData.SandboxConfig != nil {
gatewayConfig = workflowData.SandboxConfig.MCP
}
if err := validateIntegrityReactions(workflowData.ParsedTools, workflowData.Name, workflowData, gatewayConfig); err != nil {
return nil, fmt.Errorf("%s: %w", cleanPath, err)
}
Copy link

Copilot AI Apr 13, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

validateIntegrityReactions is executed before imported features are merged (MergeFeatures happens later in this function). If a workflow enables integrity-reactions via an import, this validation will incorrectly fail because isFeatureEnabled() won’t see the merged flag yet. Move this validation to after the features merge (or validate against the merged feature set).

Copilot uses AI. Check for mistakes.
Comment on lines +115 to +122
// Validate integrity-reactions feature configuration
var gatewayConfig *MCPGatewayRuntimeConfig
if workflowData.SandboxConfig != nil {
gatewayConfig = workflowData.SandboxConfig.MCP
}
if err := validateIntegrityReactions(workflowData.ParsedTools, workflowData.Name, workflowData, gatewayConfig); err != nil {
return nil, fmt.Errorf("%s: %w", cleanPath, err)
}
Copy link

Copilot AI Apr 13, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

validateIntegrityReactions runs before features from imports are merged (MergeFeatures is later). This can reject workflows that enable integrity-reactions through an imported workflow because isFeatureEnabled() won’t observe the merged feature flags yet. Run this validation after feature merging (or validate against the merged feature map).

Copilot uses AI. Check for mistakes.
if strings.EqualFold(version, "latest") {
return true
}

Copy link

Copilot AI Apr 13, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

mcpgSupportsIntegrityReactions() claims non-semver versions should return false, but it unconditionally calls semverutil.Compare(version, minVersion). semverutil.Compare delegates to x/mod/semver.Compare without validating inputs, so non-semver strings (e.g. branch names) may compare unpredictably and could incorrectly pass the gate. Add an explicit semverutil.IsValid(version) check (after handling "latest") and return false when invalid.

Suggested change
if !semverutil.IsValid(version) {
return false
}

Copilot uses AI. Check for mistakes.
Comment on lines +218 to +221
// Reaction fields require min-integrity to be set
if (hasEndorsementReactions || hasDisapprovalReactions) && github.MinIntegrity == "" {
toolsValidationLog.Printf("endorsement-reactions/disapproval-reactions without min-integrity in workflow: %s", workflowName)
return errors.New("invalid guard policy: 'endorsement-reactions' and 'disapproval-reactions' require 'github.min-integrity' to be set")
Copy link

Copilot AI Apr 13, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

validateIntegrityReactions currently allows setting 'disapproval-integrity' and/or 'endorser-min-integrity' without 'github.min-integrity'. In that case no allow-only guard policy is rendered, so these fields are silently ignored (they’re only injected into an existing allow-only policy). Either require github.min-integrity whenever any integrity-reactions field is set, or ensure a guard policy is created/injected in the guard-from-step path so the config actually takes effect.

Suggested change
// Reaction fields require min-integrity to be set
if (hasEndorsementReactions || hasDisapprovalReactions) && github.MinIntegrity == "" {
toolsValidationLog.Printf("endorsement-reactions/disapproval-reactions without min-integrity in workflow: %s", workflowName)
return errors.New("invalid guard policy: 'endorsement-reactions' and 'disapproval-reactions' require 'github.min-integrity' to be set")
// Integrity reaction fields require min-integrity to be set so the allow-only guard policy is rendered
if (hasEndorsementReactions || hasDisapprovalReactions || hasDisapprovalIntegrity || hasEndorserMinIntegrity) && github.MinIntegrity == "" {
toolsValidationLog.Printf("integrity reaction fields without min-integrity in workflow: %s", workflowName)
return errors.New("invalid guard policy: 'endorsement-reactions', 'disapproval-reactions', 'disapproval-integrity', and 'endorser-min-integrity' require 'github.min-integrity' to be set")

Copilot uses AI. Check for mistakes.
// Reaction fields require the integrity-reactions feature flag
if !isFeatureEnabled(constants.IntegrityReactionsFeatureFlag, data) {
toolsValidationLog.Printf("Reaction fields present but integrity-reactions feature flag not enabled in workflow: %s", workflowName)
return errors.New("invalid guard policy: 'endorsement-reactions', 'disapproval-reactions', 'disapproval-integrity', and 'endorser-min-integrity' require the 'integrity-reactions' feature flag to be enabled. Add 'features: integrity-reactions: true' to your workflow")
Copy link

Copilot AI Apr 13, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The error message suggests adding "features: integrity-reactions: true", which is not valid YAML for this repo’s frontmatter style (it should be nested under features with proper indentation). Consider updating the message to show a correct YAML snippet (e.g. features:\n integrity-reactions: true) and include the full key path (tools.github.*) for clarity.

Suggested change
return errors.New("invalid guard policy: 'endorsement-reactions', 'disapproval-reactions', 'disapproval-integrity', and 'endorser-min-integrity' require the 'integrity-reactions' feature flag to be enabled. Add 'features: integrity-reactions: true' to your workflow")
return errors.New("invalid guard policy: 'tools.github.endorsement-reactions', 'tools.github.disapproval-reactions', 'tools.github.disapproval-integrity', and 'tools.github.endorser-min-integrity' require the 'integrity-reactions' feature flag to be enabled. Add the following to your workflow frontmatter:\nfeatures:\n integrity-reactions: true")

Copilot uses AI. Check for mistakes.
@github-actions
Copy link
Copy Markdown
Contributor

🧪 Test Quality Sentinel Report

Test Quality Score: 90/100

Excellent test quality

Metric Value
New/modified tests analyzed 3
✅ Design tests (behavioral contracts) 3 (100%)
⚠️ Implementation tests (low value) 0 (0%)
Tests with error/edge cases 3 (100%)
Duplicate test clusters 0
Test inflation detected ⚠️ Yes (tools_validation_test.go: 358 added / 105 production = 3.4:1 ratio)
🚨 Coding-guideline violations 0

Test Classification Details

Test File Classification Issues Detected
TestMCPGSupportsIntegrityReactions pkg/workflow/tools_validation_test.go ✅ Design None — covers nil, empty, exact boundary, above/below min, "latest"
TestValidateIntegrityReactions pkg/workflow/tools_validation_test.go ✅ Design None — 15 table rows covering happy path + 9 distinct error paths
TestGetDIFCProxyPolicyJSONWithReactions pkg/workflow/tools_validation_test.go ✅ Design None — asserts JSON output content directly
TestGetDIFCProxyPolicyJSON (modified) pkg/workflow/compiler_difc_proxy_test.go ✅ Design Signature update only (1-line change to match new API)

Flagged Tests — Requires Review

No tests are flagged for behavioral quality issues.

i️ Test Inflation Note (tools_validation_test.go)

The test file added 358 lines against 105 production lines (ratio 3.4:1, threshold 2:1). In this case the inflation is justified: the 15-row TestValidateIntegrityReactions table exhaustively covers each distinct validation rule (missing feature flag, wrong MCPG version, missing min-integrity, 4 invalid enum values, etc.), and each row is semantically distinct rather than copy-paste variation. No action needed, but noted per scoring rules.


Language Support

Tests analyzed:

  • 🐹 Go (*_test.go): 3 tests — unit (//go:build !integration)
  • 🟨 JavaScript (*.test.cjs, *.test.js): 0 tests

Verdict

Check passed. 0% of new tests are implementation tests (threshold: 30%). All three new test functions verify observable behavioral contracts: the version-gate predicate, the validation error surface, and the JSON policy output. Error paths and edge cases (nil inputs, boundary versions, invalid enum values, feature-flag/version combinations) are thoroughly covered. Both Go test files carry the required //go:build !integration build tag and all assertions include descriptive messages.


📖 Understanding Test Classifications

Design Tests (High Value) verify what the system does:

  • Assert on observable outputs, return values, or state changes
  • Cover error paths and boundary conditions
  • Would catch a behavioral regression if deleted
  • Remain valid even after internal refactoring

Implementation Tests (Low Value) verify how the system does it:

  • Assert on internal function calls (mocking internals)
  • Only test the happy path with typical inputs
  • Break during legitimate refactoring even when behavior is correct
  • Give false assurance: they pass even when the system is wrong

Goal: Shift toward tests that describe the system's behavioral contract — the promises it makes to its users and collaborators.

🧪 Test quality analysis by Test Quality Sentinel · ● 353.4K ·

Copy link
Copy Markdown
Contributor

@github-actions github-actions bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Test Quality Sentinel: 90/100. Test quality is excellent — 0% of new tests are implementation tests (threshold: 30%). All three new test functions enforce behavioral contracts with comprehensive edge-case and error-path coverage.

Generated by Design Decision Gate workflow. Records the decision to
introduce the integrity-reactions feature flag with a semver version
gate (MCPG >= v0.2.18) and a shared injection helper across all
policy code paths.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@github-actions
Copy link
Copy Markdown
Contributor

Commit pushed: 86530c1

🏗️ ADR gate enforced by Design Decision Gate 🏗️

@github-actions
Copy link
Copy Markdown
Contributor

🏗️ Design Decision Gate — ADR Required

This PR makes significant changes to core business logic (662 new lines in pkg/) but does not have a linked Architecture Decision Record (ADR).

AI has analyzed the PR diff and generated a draft ADR to help you get started:

📄 Draft ADR: docs/adr/25948-version-gated-integrity-reactions-for-mcpg-allow-only-policy.md

The draft captures the following key design decisions identified in the diff:

  • Feature-flag opt-in for integrity-reactions rather than unconditional rollout — preserves make recompile idempotency for existing workflows
  • Semver version gate (MCPG >= v0.2.18) with "latest" always passing and non-semver strings failing conservatively
  • Shared injection helper (injectIntegrityReactionFields) called from both mcp_renderer_github.go and compiler_difc_proxy.go to keep policy code paths in sync
  • Compile-time validation of enum values, feature-flag prerequisites, and MCPG version compatibility

What to do next

  1. Review the draft ADR committed to your branch — it was generated from the PR diff
  2. Complete any missing sections — particularly the Deciders field and any context the AI couldn't infer
  3. Reference the ADR in this PR body by adding a line such as:

    ADR: ADR-25948: Version-Gated Integrity Reactions for MCPG Allow-Only Policy

Once an ADR is linked in the PR body, this gate will re-run and verify the implementation matches the decision.

Why ADRs Matter

ADRs create a searchable, permanent record of why the codebase looks the way it does. Future contributors (and your future self) will thank you.


📋 Michael Nygard ADR Format Reference

An ADR must contain these four sections to be considered complete:

  • Context — What is the problem? What forces are at play?
  • Decision — What did you decide? Why?
  • Alternatives Considered — What else could have been done?
  • Consequences — What are the trade-offs (positive and negative)?

All ADRs are stored in docs/adr/ as Markdown files numbered by PR number (e.g., 25948-version-gated-integrity-reactions-for-mcpg-allow-only-policy.md for PR #25948).

🔒 This PR cannot merge until an ADR is linked in the PR body.

Note

🔒 Integrity filter blocked 1 item

The following item were blocked because they don't meet the GitHub integrity level.

To allow these resources, lower min-integrity in your GitHub frontmatter:

tools:
  github:
    min-integrity: approved  # merged | approved | unapproved | none

🏗️ ADR gate enforced by Design Decision Gate 🏗️ · ● 155.6K ·

Copilot AI added a commit that referenced this pull request Apr 13, 2026
Co-authored-by: lpcox <15877973+lpcox@users.noreply.github.com>
Copilot AI added a commit that referenced this pull request Apr 13, 2026
- Move validateIntegrityReactions after MergeFeatures in both
  compiler_string_api.go and compiler_orchestrator_workflow.go so
  imported feature flags are visible during validation
- Add semverutil.IsValid() guard in mcpgSupportsIntegrityReactions
  to safely handle non-semver strings (branch names, etc.)
- Extend min-integrity requirement to all 4 integrity-reactions fields
- Fix error message to show correct YAML multi-line format
- Update tests to reflect new behavior

Agent-Logs-Url: https://github.com/github/gh-aw/sessions/c9ae237b-f229-4918-98e7-7d057c6618ca

Co-authored-by: lpcox <15877973+lpcox@users.noreply.github.com>
@lpcox
Copy link
Copy Markdown
Collaborator

lpcox commented Apr 13, 2026

Review of PR #25948 — integrity-reactions feature flag

Overall Assessment

Solid implementation that follows existing patterns well. The injectIntegrityReactionFields shared helper, the version gate via mcpgSupportsIntegrityReactions, and the comprehensive validation in validateIntegrityReactions are all well-designed. Test coverage is good — version gate, validation, and DIFC proxy injection paths are all covered.

Issues

  1. ADR file may be unnecessarydocs/adr/25948-version-gated-integrity-reactions-for-mcpg-allow-only-policy.md is a well-written ADR, but AGENTS.md says "do NOT commit explanation markdown files about the fixes." ADRs are arguable, but consider whether this adds maintenance burden vs. the code comments already present.

  2. ensureDefaultMCPGatewayConfig(data) ordering change — Moving this call earlier in both buildStartDIFCProxyStepYAML and buildStartCliProxyStepYAML is functionally correct but is a subtle change. In the old code, it was only called after getDIFCProxyPolicyJSON returned non-empty. Now it's called unconditionally before. This is harmless since it just sets defaults, but the ADR correctly notes this is "a subtle ordering dependency" — good documentation.

  3. Validation duplication in ParseWorkflowFile and ParseWorkflowString — The 9-line validation block is copy-pasted between these two methods. This follows the existing pattern for validateGitHubGuardPolicy (which is also called in both), so it's consistent. But consider extracting a helper if more validations are added.

  4. Existing DIFC proxy tests pass nil, nil — This is correct; nil data means isFeatureEnabled returns false, so reactions are never injected. The new TestGetDIFCProxyPolicyJSONWithReactions tests properly exercise the reaction injection path. ✅

  5. Schema has minItems: 1 for reaction arrays — This will be changed per user request to make these fields optional with defaults.

Upcoming Change

Per user request, endorsement-reactions and disapproval-reactions will be made optional with defaults:

  • endorsement-reactions defaults to ["THUMBS_UP", "HEART"]
  • disapproval-reactions defaults to ["THUMBS_DOWN", "CONFUSED"]

This means enabling integrity-reactions: true with min-integrity set will automatically use sensible defaults. I'll push this as a follow-up commit on this branch.

- endorsement-reactions defaults to [THUMBS_UP, HEART] when
  integrity-reactions feature flag is enabled
- disapproval-reactions defaults to [THUMBS_DOWN, CONFUSED]
- Reaction-based integrity is only enforced in proxy mode (DIFC/CLI
  proxy), not MCP gateway mode, because the GitHub MCP server protocol
  does not expose reaction author information
- Compiler emits a warning when reactions are configured with the
  gateway path
- Validation now requires min-integrity when feature flag is enabled
  (even without explicit reaction lists, since defaults will be injected)
- Schema updated: removed minItems constraint, added default values
- Updated all type docs and schema descriptions to clarify proxy-only

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@lpcox
Copy link
Copy Markdown
Collaborator

lpcox commented Apr 13, 2026

@pelikhan please take a look; feature flag to use maintainers' reactions on github.com to promote or demote objects' integrity when cli-proxy is enabled.

@github-actions github-actions bot added the lgtm label Apr 13, 2026
@github-actions
Copy link
Copy Markdown
Contributor

Hey @Copilot 👋 — great work on the integrity-reactions feature flag! This PR is well-structured, thoroughly documented, and follows the project's contribution process perfectly. Here's a quick summary of the contribution check:

Check Result
On-topic ✅ Yes
Follows process ✅ Yes — issue #25947 was filed first by @lpcox with a full implementation plan
Focused ✅ Yes — all 14 files are scoped to the integrity-reactions feature
New dependencies ✅ No
Has tests ✅ Yes — tools_validation_test.go (404 additions) + compiler_difc_proxy_test.go
Has description ✅ Yes — comprehensive PR body with syntax examples, change summary, and backward-compat notes
Diff size 846 lines (839 additions, 7 deletions)

Verdict: 🟢 Aligned — looks ready for maintainer review!

The implementation faithfully executes the plan from #25947: constants, parsing, validation with semver-gated version check, proxy-only injection with gateway warning, schema updates, and an ADR. Backward compatibility is preserved (feature flag defaults off, make recompile produces no changes for existing workflows).

Generated by Contribution Check · ● 1.7M ·

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat: add integrity-reactions feature flag to inject endorsement/disapproval reactions into MCPG allow-only policy

3 participants