Skip to content

Allow non-SHA refs in skills frontmatter, pinned at compile time - #51455

Merged
pelikhan merged 6 commits into
mainfrom
copilot/allow-non-sha-ref-in-front-matter
Aug 8, 2026
Merged

Allow non-SHA refs in skills frontmatter, pinned at compile time#51455
pelikhan merged 6 commits into
mainfrom
copilot/allow-non-sha-ref-in-front-matter

Conversation

Copilot AI commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

skills: frontmatter entries required a fully-pinned 40-character lowercase commit SHA (owner/repo@<sha>), forcing authors to manually resolve and update SHAs by hand. This PR allows branch/tag refs instead, resolving them to a SHA automatically at compile time.

skills:
  # Now accepted — resolved and rewritten to a full commit SHA in the compiled .lock.yml
  - mattpocock/skills/tdd@main

  # Still supported — used as-is, no resolution needed
  - mattpocock/skills/diagnosing-bugs@801dca688564c529fa84f247f64472520d9ebe28

Validation changes (pkg/workflow/skills_frontmatter.go)

  • Accept owner/repo@<ref> and owner/repo/skill/path@<ref> where <ref> is a branch, tag, or full SHA (previously only a full 40-char lowercase SHA was accepted).
  • Accept owner/repo@ (trailing @, empty ref) as an explicit "no ref" opt-out.
  • Reject ambiguous SHA-like strings (wrong length or case, e.g. 39 hex chars or uppercase 40 hex) to avoid ref-confusion.
  • Restrict ref characters to a safe set to prevent argument/shell injection; GitHub Actions expressions remain unsupported as skill refs.

Compile-time pinning (pkg/workflow/skills_ref_resolution.go)

  • New resolveFrontmatterSkillRefs pass resolves non-SHA refs to their commit SHA using the compiler's existing shared action resolver (same GitHub API + cache + embedded-pins infrastructure used for uses: action pinning), rewriting skills[] entries before YAML generation.
  • Full SHAs are left untouched (no resolution needed).
  • No-ref entries (owner/repo@) are left unpinned and trigger a compiler warning recommending an explicit ref.
  • Resolution failures (e.g. no network/auth) degrade to a warning, keeping the original unpinned ref rather than failing compilation.

Docs

  • Updated docs/src/content/docs/reference/frontmatter.md and frontmatter-full.md to describe the new <ref> syntax and pinning/warning behavior.

Run: https://github.com/github/gh-aw/actions/runs/31277244247> Generated by 👨‍🍳 PR Sous Chef · gpt54 · 9.11 AIC · ⌖ 5.12 AIC · ⊞ 8.5K ·

Comment /souschef to run again


Generated by 👨‍🍳 PR Sous Chef · gpt54 · 13.9 AIC · ⌖ 5.41 AIC · ⊞ 8.5K ·
Comment /souschef to run again

Copilot AI and others added 2 commits August 8, 2026 20:09
Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Copilot AI requested a review from pelikhan August 8, 2026 20:14
@pelikhan
pelikhan marked this pull request as ready for review August 8, 2026 20:14
Copilot AI balanced review requested due to automatic review settings August 8, 2026 20:14

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Adds compile-time SHA pinning for non-SHA skill references.

Changes:

  • Expands skill-ref validation to branches, tags, and empty refs.
  • Resolves refs through the shared action resolver.
  • Updates tests and reference documentation.
Show a summary per file
File Description
pkg/workflow/skills_ref_resolution.go Implements skill-ref resolution.
pkg/workflow/skills_ref_resolution_test.go Tests resolution behavior.
pkg/workflow/skills_frontmatter.go Expands ref validation.
pkg/workflow/skills_frontmatter_test.go Tests accepted and rejected refs.
pkg/workflow/compiler_validators.go Adds resolution to compilation.
pkg/workflow/compiler_orchestrator_frontmatter_test.go Updates validation tests.
docs/src/content/docs/reference/frontmatter.md Documents ref syntax.
docs/src/content/docs/reference/frontmatter-full.md Updates full reference comments.

Review details

Tip

Add a code-review agent skill for context-aware, tailored reviews. Learn more in the docs.

Suppressed comments (1)

docs/src/content/docs/reference/frontmatter-full.md:71

  • This contradicts the updated validator, which explicitly rejects any skill spec containing a GitHub Actions expression. Describe expressions as unsupported rather than accepted at runtime.
# remote repospec by `gh aw add`. GitHub Actions expressions (`${{ ... }}`) are also
# accepted and are evaluated at runtime.
  • Files reviewed: 8/8 changed files
  • Comments generated: 4
  • Review effort level: Balanced

Comment on lines +90 to +91
repoPath, ref, hasAt := strings.Cut(trimmed, "@")
if !hasAt || !skillRepoPathRegexp.MatchString(repoPath) {
ctx = context.Background()
}

sha, err := data.ActionResolver.ResolveSHA(ctx, repoPath, ref)
Comment on lines +250 to +254
`<ref>` may be a branch, tag, or 40-character lowercase commit SHA. Non-SHA
refs are resolved and rewritten to the matching commit SHA at compile time
(the compiled `.lock.yml` always pins the resolved SHA). Omitting the ref
(`owner/repo@`) installs from the repository's default branch on every run
and is not pinned; the compiler emits a warning recommending an explicit ref.
Comment on lines +65 to +68
# `.github/skills/my-skill`). `<ref>` may be a branch, tag, or full 40-character
# lowercase commit SHA; non-SHA refs are resolved and pinned to the matching commit
# SHA at compile time. Omitting the ref (`owner/repo@`) installs from the
# repository's default branch and is not pinned, which triggers a compiler warning.
@github-actions

github-actions Bot commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

🧠 Matt Pocock Skills Reviewer has completed the skills-based review. ✅

🧠 Reviewed using Matt Pocock's skills by Matt Pocock Skills Reviewer

@github-actions

github-actions Bot commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

Test Quality Sentinel completed test quality analysis.

🧪 Test quality analysis by Test Quality Sentinel

@github-actions

github-actions Bot commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

Design Decision Gate 🏗️ completed the design decision gate check.

🏗️ ADR gate enforced by Design Decision Gate 🏗️

@github-actions

github-actions Bot commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

Ponytail Reviewer completed successfully!

Generated by Ponytail Reviewer for #51455

@github-actions

github-actions Bot commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

PR Code Quality Reviewer completed the code quality review.

Warning

Threat Detection Engine Failure — The analysis engine could not complete. This is a tooling failure, not a security finding.

What happened

The threat detection engine failed to produce results.

Review the workflow run logs for details.

Warning

Firewall blocked 1 domain

The following domain was blocked by the firewall during workflow execution:

  • api.individual.githubcopilot.com

To allow these domains, add them to the network.allowed list in your workflow frontmatter:

network:
  allowed:
    - defaults
    - "api.individual.githubcopilot.com"

See Network Configuration for more information.

🔎 Code quality review by PR Code Quality Reviewer

@github-actions

github-actions Bot commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

🧪 Test Quality Sentinel Report

PR: Allow non-SHA refs in skills frontmatter, pinned at compile time
Score: 90/100 ✅ Excellent

Overview

Metric Value
New behavioral tests 27
Design tests (behavioral contract) 27 (100%)
Edge-case tests ~18 (67%)
Implementation tests 0 (0%) — threshold: 30%
Duplicate clusters 0
Inflation ratio > 2:1 None
Build tag violations None
Go mock library usage None

Test Files Changed

File Change Tests
skills_ref_resolution_test.go NEW (+127 lines) 5 new TestResolveFrontmatterSkillRefs_* functions
skills_frontmatter_test.go modified (+33/-3) 4 new subtests in TestValidateFrontmatterSkills
compiler_orchestrator_frontmatter_test.go modified (+3/-3) Minor adjustments (no new tests)

Score Breakdown

design_tests / total (27/27 = 100%)            × 40 = 40
edge_case_tests / total (~18/27 = 67%)          × 30 = 20
20 - duplicate_clusters×5 (0)                       = 20
no inflation ratio > 2:1                            = 10
                                              Total = 90
Per-test classification (27 tests)

skills_ref_resolution_test.go — 5 new tests

Test Contract Value Type Flags
TestResolveFrontmatterSkillRefs_PinsNonSHARefUsingCache Pins non-SHA ref to SHA from cache; verifies both Skills[] and SkillReferences[]; asserts no warning emitted behavioral_contract high_value design_test
TestResolveFrontmatterSkillRefs_LeavesFullSHAUnchanged Full 40-char SHA passes through unmodified behavioral_contract high_value design_test
TestResolveFrontmatterSkillRefs_WarnsWhenNoRefSpecified No ref → warning emitted, warning count incremented, value kept as-is behavioral_contract high_value design_test
TestResolveFrontmatterSkillRefs_LeavesLocalPathUnchanged Local path refs bypass resolution entirely behavioral_contract high_value design_test
TestResolveFrontmatterSkillRefs_WarnsAndKeepsUnpinnedRefOnResolutionFailure Failed resolution → warning emitted, ref kept unpinned; tests pre-seeded failure map to avoid network behavioral_contract high_value design_test

skills_frontmatter_test.go — new subtests added to TestValidateFrontmatterSkills

Subtest Classification Value Flags
accepts non-sha refs (branch/tag) behavioral_contract high_value
accepts remote spec with no ref specified behavioral_contract high_value
rejects ref with unsafe characters behavioral_contract high_value
rejects 39-char sha behavioral_contract high_value
rejects uppercase sha chars behavioral_contract high_value

(The remaining ~17 subtests in TestValidateFrontmatterSkills were pre-existing and not re-analyzed.)

Quality Highlights

  • ✅ All new tests carry (go/redacted):build !integration on line 1
  • ✅ No Go mock libraries (gomock, testify/mock, .EXPECT()) used
  • ✅ Error/edge cases covered: resolution failure, missing ref, local path bypass, unsafe chars, short SHA, uppercase SHA, expression injection
  • ✅ Inflation ratio within bounds: skills_ref_resolution_test.go 127 added lines vs skills_ref_resolution.go 97 lines (~1.3:1)
  • withCapturedStderr helper cleanly validates warning output side-effects without coupling to internal state
  • i️ No goroutine-leak guard (goleak.VerifyTestMain) added — not required for this PR

Verdict

APPROVE — 0% implementation tests (threshold: 30%). No violations.

🧪 Test quality analysis by Test Quality Sentinel · sonnet46 · 44.8 AIC · ⌖ 10.1 AIC · ⊞ 7.7K ·
Comment /review to run again

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

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. 0% implementation tests (threshold: 30%). All new tests enforce behavioral contracts with solid edge-case coverage. No violations.

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🧵 Reviewed using Impeccable skills by Impeccable Skills Reviewer · sonnet46 · 38.1 AIC · ⌖ 7.23 AIC · ⊞ 5.5K

ctx = context.Background()
}

sha, err := data.ActionResolver.ResolveSHA(ctx, repoPath, ref)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

[Blocking] Branch refs fail to resolve — resolveFromGitHub only queries /git/ref/tags/<ref>

The PR documents and advertises that non-SHA refs (branch names like main, release/1.0) are "resolved and pinned to the matching commit SHA at compile time". However, resolveFromGitHub (called via ResolveSHA) only hits the tags endpoint:

GET /repos/{owner}/{repo}/git/ref/tags/{version}

A branch name returns 404, which resolveSkillRefSpec treats as a resolution failure — emitting only a warning and leaving the ref unpinned. This silently violates the documented guarantee for the most common case (owner/repo@main).

Fix: after a tag lookup returns a non-zero error, fall back to the heads endpoint (/git/ref/heads/<ref>) before treating resolution as failed.

@copilot please address this.


fn()

require.NoError(t, w.Close())

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

[Minor] Double-close of w in withCapturedStderr

The pipe writer w is explicitly closed at line 42 (require.NoError(t, w.Close())), and then the deferred closure at line 37 (_ = w.Close()) closes it again when the helper returns. While the second close error is silently swallowed, this is misleading and could mask a genuine close failure on the first call if the defer were ever changed.

Either remove the explicit w.Close() on line 42 and close only in the defer (before reading from r), or remove the w.Close() in the defer since the explicit close already ran.

@copilot please address this.

Adds a draft Architecture Decision Record capturing the decision to
accept branch/tag refs in the skills: frontmatter field and resolve them
to commit SHAs at compile time.

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

github-actions Bot commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

ADR Required — Draft Generated

This PR touches 335 lines in pkg/ (threshold: 100), triggering ADR enforcement.

A draft Architecture Decision Record has been committed to this branch at:
docs/adr/51455-allow-non-sha-refs-in-skills-frontmatter.md

This PR cannot merge until the ADR is reviewed and its status updated from Draft to Accepted.

What to do next
  1. Review the draft ADR — confirm the Decision, Alternatives, and Consequences sections accurately describe the intent of this change.
  2. Edit any sections that are incomplete or inaccurate.
  3. Change the status in the ADR from Draft to Accepted once the team agrees.
  4. Push the updated ADR to this branch — the gate will re-run and approve the PR.
Why ADRs Matter

Architecture Decision Records capture why a decision was made, not just what was changed. A future engineer reading this code 12 months from now will understand the tradeoffs and constraints that led to this design, making it much easier to evolve the system safely.

ADR Format Reference (Michael Nygard Template)

The draft follows this structure:

  • Context — situation, constraints, and problem being solved
  • Decision — what was decided and the primary rationale
  • Alternatives Considered — 2+ realistic options that were evaluated
  • Consequences — positive, negative, and neutral outcomes

Merge is blocked until this ADR is accepted.

🏗️ ADR gate enforced by Design Decision Gate 🏗️ · sonnet46 · 58.9 AIC · ⌖ 25.2 AIC · ⊞ 8.8K ·
Comment /review to run again

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Ponytail review (over-engineering only): one finding.

net: -18 lines possible.

Generated by ✂️ Ponytail Reviewer for #51455 · auto · 45.5 AIC · ⌖ 6.58 AIC · ⊞ 6.8K
Comment /ponytail to run again

Comments that could not be inline-anchored

pkg/workflow/skills_ref_resolution_test.go:443

L427-444: stdlib: withCapturedStderr reimplements the existing testutil.CaptureStderr(t, fn) helper (pkg/testutil/tempdir.go:76) with an identical signature. Use that instead, 0 new lines.

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Skills-Based Review 🧠

Applied /tdd and /codebase-design — commenting with a few targeted issues; no blocking changes required.

📋 Key Themes & Highlights

Issues Found

  • Weak test assertion (skills_frontmatter_test.go): injection-safety test passes on any error, not specifically the unsafe-character error
  • Branch resolution gap (skills_ref_resolution.go): ResolveSHA only resolves tags; branch names will silently fall back to unpinned behavior without a clear test demonstrating this
  • Missing invariant guard (skills_ref_resolution.go): Skills / SkillReferences sync assumes equal length; no defensive check exists
  • Ambiguous-SHA boundary coverage (skills_frontmatter.go): 6-char and 41-char hex strings are not tested

Positive Highlights

  • ✅ Graceful degradation (warn + keep original ref) is the right default for a compile-time enrichment pass
  • ✅ Ambiguous-SHA rejection is a smart safety net — prevents silent truncation confusion
  • ✅ Reusing the existing ActionResolver / cache infrastructure for skill ref resolution is a clean, consistent design
  • ✅ Test file structure is clear and well-organized; withCapturedStderr helper is a nice pattern

🧠 Reviewed using Matt Pocock's skills by Matt Pocock Skills Reviewer · sonnet46 · 68.9 AIC · ⌖ 7.9 AIC · ⊞ 7.1K
Comment /matt to run again

require.ErrorContains(t, err, "40-char-sha")
})

t.Run("rejects 39-char sha", func(t *testing.T) {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

[/tdd] The "rejects ref with unsafe characters" test only asserts require.Error(t, err) without checking the error message, so any incidental validation error would make it pass even if the injection-safety check regresses.

💡 Suggested assertion

Add an ErrorContains check to pin the test to the intended validation path:

require.Error(t, err)
require.ErrorContains(t, err, "unsupported characters")

@copilot please address this.

c.IncrementWarningCount()
return spec
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

[/tdd] ResolveSHA (action_resolver.go:199) only queries /git/ref/tags/<version>, so branch names like main cannot be resolved unless they happen to have a cached entry. The test pins a cache entry directly, bypassing the real API path. There is no test that validates the branch-resolution failure mode (when the tag API 404s and the fallback also misses).

💡 Why this matters

A user writing owner/repo@main will silently fall back to the original unpinned ref because the tag API returns 404 for branch names and the resolver has no branch-specific fallback. This is a correctness gap that the current tests do not surface.

Consider either:

  1. Adding a test that mocks a 404 from the tags API to confirm the fallback warning fires, or
  2. Documenting in the code that branch resolution requires the caller to pre-populate the cache.

@copilot please address this.

data.Skills[i] = data.SkillReferences[i].Skill
}
}
return

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

[/codebase-design] data.SkillReferences and data.Skills are synced by assuming they are in the same order and have the same length. If a caller ever populates only one of these (or in a different order), the sync silently produces mismatched entries.

💡 Suggested guard

Add an invariant check at the top of resolveFrontmatterSkillRefs:

if len(data.SkillReferences) > 0 && len(data.Skills) != len(data.SkillReferences) {
    skillsFrontmatterLog.Printf("warning: Skills/SkillReferences length mismatch (%d vs %d); skipping ref resolution",
        len(data.Skills), len(data.SkillReferences))
    return
}

This makes the invariant explicit and prevents a silent partial-sync bug.

@copilot please address this.

idx,
idx,
)
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

[/tdd] There are no tests for the looksLikeAmbiguousSHA boundary conditions — specifically, a 6-char hex string (below the 7-char floor) and a 41-char hex string (above the 40-char ceiling). Both should be accepted as valid non-SHA refs, but a test regression in the boundary logic would go undetected.

💡 Suggested test cases

Add to TestValidateFrontmatterSkills:

t.Run("accepts 6-char hex string as branch/tag (below ambiguous-SHA floor)", func(t *testing.T) {
    err := validateFrontmatterSkills(map[string]any{
        "skills": []any{"owner/repo@abcdef"},
    })
    require.NoError(t, err)
})

@copilot please address this.

@gh-aw-bot

Copy link
Copy Markdown
Collaborator

@copilot Quick triage nudge for this PR.

Please refresh the branch if GitHub can update it cleanly, address the latest review feedback, make sure the ADR is accepted if still required, run the pr-finisher skill, and push follow-up fixes.

Open items (newest first):

  • Matt Pocock Skills Reviewer: weak injection-safety assertion, branch-resolution gap, missing Skills/SkillReferences invariant guard, and ambiguous-SHA boundary coverage remain worth addressing.
  • Copilot review noted the docs mismatch around expressions in frontmatter-full.md; please align the docs with the validator behavior if not already handled.
  • No failed checks were listed in the compact candidate report.

Branch refresh was requested.

Run: https://github.com/github/gh-aw/actions/runs/31277244247

Generated by 👨‍🍳 PR Sous Chef · gpt54 · 9.11 AIC · ⌖ 5.12 AIC · ⊞ 8.5K ·
Comment /souschef to run again

… commits endpoint; update docs for fallback behavior

Co-authored-by: gh-aw-bot <259018956+gh-aw-bot@users.noreply.github.com>
Co-authored-by: gh-aw-bot <259018956+gh-aw-bot@users.noreply.github.com>

Copilot AI commented Aug 8, 2026

Copy link
Copy Markdown
Contributor Author

@copilot Quick triage nudge for this PR.

Please refresh the branch if GitHub can update it cleanly, address the latest review feedback, make sure the ADR is accepted if still required, run the `pr-fi...

Addressed the review feedback in two follow-up commits:

  1. Schema fix (main_workflow_schema.json): Updated the skills[] patterns (string and object forms) to accept branch/tag refs and empty refs, not just 40-char SHA. The ref portion now uses (?:[0-9a-f]{40}|[A-Za-z0-9](?:[A-Za-z0-9_./-]*[A-Za-z0-9_.-])?)? which allows branches/tags while rejecting trailing slashes. The Go-level validator (validateSkillSpecValue) still rejects ambiguous partial SHAs.

  2. Branch resolution fix (action_resolver.go): Added a resolveRefViaCommitsEndpoint fallback in resolveFromGitHub. When the tags endpoint returns an error (e.g. main is not a tag), the resolver now falls back to /repos/{owner}/{repo}/commits/{ref} which accepts both branch and tag names — the same approach used by ResolveGhAwRef.

  3. Docs (frontmatter.md, frontmatter-full.md): Updated both files to accurately state that resolution can fail (with a warning and fallback to the unpinned ref), removing the incorrect claim that the lock file "always pins" the resolved SHA.

Copilot AI requested a review from gh-aw-bot August 8, 2026 20:54
@gh-aw-bot

Copy link
Copy Markdown
Collaborator

@copilot Quick triage nudge for this PR.

Please refresh the branch if GitHub can update it cleanly, address the latest review feedback, make sure the ADR is accepted if still required, run the pr-finisher skill, and push follow-up fixes.

Open items (newest first):

  • Matt Pocock Skills Reviewer: re-check the weak injection-safety assertion, Skills/SkillReferences invariant guard, and ambiguous-SHA boundary coverage to confirm nothing still needs a follow-up on the current head.
  • Your latest reply says the schema fix, branch-resolution fallback, and docs updates are already in place; please verify that against the latest review state after the branch refresh.
  • No failed checks were listed in the compact candidate report.

Branch refresh was requested.

Run: https://github.com/github/gh-aw/actions/runs/31277905762

Generated by 👨‍🍳 PR Sous Chef · gpt54 · 13.9 AIC · ⌖ 5.41 AIC · ⊞ 8.5K ·
Comment /souschef to run again

@pelikhan
pelikhan merged commit ba0a9f9 into main Aug 8, 2026
1 check failed
@pelikhan
pelikhan deleted the copilot/allow-non-sha-ref-in-front-matter branch August 8, 2026 20:59
Copilot stopped work on behalf of gh-aw-bot due to an error August 8, 2026 21:00
@github-actions

github-actions Bot commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

Great work on enabling non-SHA refs in skills frontmatter! 🎉 This feature makes skill resolution much more flexible while maintaining compile-time pinning for reproducibility. The implementation is well-structured with:

✅ Comprehensive validation logic for ref formats
✅ Proper error handling and degradation strategies
✅ Full test coverage for new functionality
✅ Clear documentation updates
✅ Thoughtful ADR documenting the design decision

This PR is ready for review.

Generated by ✅ Contribution Check · auto · 75.6 AIC · ⌖ 3.73 AIC · ⊞ 8.8K ·

@github-actions

Copy link
Copy Markdown
Contributor

🎉 This pull request is included in a new release.

Release: v0.86.2

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants