Skip to content

ci(hypatia): retire the cured invalid_actions_lock ack (#963) - #1239

Merged
hyperpolymath merged 1 commit into
mainfrom
claude/kind-curie-w54eub
Oct 14, 2026
Merged

hyperpolymath merged 1 commit into
mainfrom
claude/kind-curie-w54eub

Conversation

@hyperpolymath

@hyperpolymath hyperpolymath commented Oct 14, 2026 •

Copy link
Copy Markdown
Owner

Closes #963.

Summary

Removes the .hypatia-baseline.json acknowledgement for invalid_actions_lock. The entry had:

It acknowledged asana/push-signed-commits@d615…, which declared the floating transitive actions/setup-python@v2. One of its listed exit criteria was "we replace the action", and that is now met:

While the entry stood, **actions.lock would have muted any new invalid_actions_lock finding in the repo until 2026-12-22.

Evidence the rule no longer fires on main

These are from the Hypatia scan on main at 7d2041a (run 38484072239, scanner pinned at 51ab6496):

  • The scan reported 59 findings: critical=2, high=2, medium=34, warn=21.
  • findings_kept is [].
  • None of the 59 suppressed findings has type invalid_actions_lock. The two highs are WH013 and ncl_k9_missing_pedigree.
  • No finding names actions.lock, asana or setup-python anywhere in the log.

The ack was matching nothing. Both lock checks from the task print nothing on this branch:

  • the non-SHA key grep;
  • the non-SHA nested uses: grep.

Changes

File Change
.hypatia-baseline.json One entry deleted, 12 lines. jq confirms the result equals the original with only that entry removed. No other entry changes.
scripts/tests/apply-baseline-test.sh The "SHIPPED ledger" section asserted that the real baseline holds exactly one such ack and suppresses both emission paths, so it would go red on this removal. It is inverted: it now asserts the ledger holds no invalid_actions_lock ack and that both emission paths reach the gate (workflow_audit/actions.lock and workflow_hardening/.github/workflows/actions.lock). The fixture-based tests for list-valued rule_module are unchanged.

docs/HYPATIA-BASELINE-FORMAT.adoc, the schema description and the comment in apply-baseline.sh still use invalid_actions_lock as their example of one defect emitted by two modules. That describes how the scanner behaves, not a live ack, so they are left as they are.

Testing

Check Result
bash scripts/tests/exemption-ratchet-test.sh 14 passed, 0 failed
bash scripts/tests/apply-baseline-test.sh 32 passed, 0 failed
bash scripts/tests/hypatia-blocking-gate-test.sh exit 0
scripts/check-exemption-ratchet.sh origin/main SHRANK .hypatia-baseline.json: 189 -> 188. OK, and no Ratchet-exception: was needed.
apply-baseline.sh on [] in blocking mode schema-valid, exit 0
apply-baseline.sh with both invalid_actions_lock emissions in blocking mode kept=2, suppressed=0, exit 1. A recurrence now blocks.
.githooks/pre-commit and commit-msg passed. Included gitleaks 8.28.0, validate-actions-lock and validate-sha-pins, using checksum-verified gitleaks and mikefarah yq v4.47.1.

The Hypatia scanner itself was not run locally, because the container has no Elixir. This PR's own scan / Hypatia Neurosymbolic Analysis run is the live confirmation.

Licence headers are untouched.

🤖 Generated with Claude Code

https://claude.ai/code/session_01TbbnKqskQA5mj5gfMniPzi

The .hypatia-baseline.json entry for invalid_actions_lock
(rule_module [workflow_audit, workflow_hardening], file_pattern
`**actions.lock`, tracking #963, expires 2026-12-22) acknowledged
asana/push-signed-commits@d615... declaring the floating transitive
actions/setup-python@v2 in .github/workflows/actions.lock.

Its exit criterion "we replace the action" is met:
- #1233 replaced the Asana action in .github/actions/signed-push/ with
  push-verified.sh.
- #1238 removed both the asana/push-signed-commits and
  actions/setup-python@v2 records from actions.lock. Every lock key and
  every nested `uses:` ref is now a 40-hex SHA.

Evidence the rule no longer fires: the Hypatia scan on main at 7d2041a
(run 38484072239, scanner 51ab6496) reports 59 findings, none of type
invalid_actions_lock and none naming actions.lock. findings_kept is
empty, and the ack matched nothing in findings_suppressed.

While it stood, `**actions.lock` would have muted ANY new
invalid_actions_lock in the repo until 2026-12-22. Removing it shrinks
the ledger, which check-exemption-ratchet.sh permits. No other entry
changes.

scripts/tests/apply-baseline-test.sh pinned the shipped ledger to hold
exactly one such ack, so that section is inverted. It now asserts the
ledger holds none and that both emission paths (workflow_audit
`actions.lock`, workflow_hardening `.github/workflows/actions.lock`)
reach the gate. The fixture-based list-valued rule_module tests are
unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TbbnKqskQA5mj5gfMniPzi
@coderabbitai

coderabbitai Bot commented Oct 14, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: ASSERTIVE
  • Plan: Advanced
  • Run ID: 3c8fc428-0883-49e9-95bf-1034234612ed
📥 Commits

Reviewing files that changed from the base of the PR and between 7d2041a and 5886da1.

📒 Files selected for processing: 2
  • .hypatia-baseline.json
  • scripts/tests/apply-baseline-test.sh
💤 Files with no reviewable changes: 1
  • .hypatia-baseline.json

Included review availability: This review used your included allowance. Your plan provides up to 1 included review per hour; 0 remain after this review.

📜 Recent review details
⏰ Context from checks skipped due to timeout: 15
  • GitHub Check: governance / Validate Hypatia Baseline
  • GitHub Check: Call CI Pipeline / Rust / Detect Cargo.toml
  • GitHub Check: Call CI Pipeline / Nickel
  • GitHub Check: scorecard / Run Scorecard PR
  • GitHub Check: governance / Licence consistency
  • GitHub Check: governance / Workflow security linter
  • GitHub Check: scan / gitleaks
  • GitHub Check: Call CI Pipeline / Secret scanning / gitleaks
  • GitHub Check: analyze-actions / analyze
  • GitHub Check: analyze-js / analyze
  • GitHub Check: scan / Hypatia Neurosymbolic Analysis
  • GitHub Check: Report non-canonical JSON (report-only)
  • GitHub Check: K9-SVC contractile validation
  • GitHub Check: Repo self-tests
  • GitHub Check: semgrep-cloud-platform/scan
🔇 Additional comments: 1
scripts/tests/apply-baseline-test.sh: 1

287-294: LGTM!

Also applies to: 300-307, 309-316, 318-324

📝 Summary

Summary by CodeRabbit

  • Security
    • Findings related to invalid actions.lock entries in workflow audits and hardening checks are no longer suppressed by a baseline acknowledgement. These findings remain visible for review, including when they involve other finding types or modules. This makes relevant workflow security issues easier to identify and address.

The invalid_actions_lock acknowledgement was removed from the shipped baseline. Regression checks now verify that findings from workflow_audit and workflow_hardening remain unsuppressed.

Changes: actions.lock baseline

Layer / File(s) Summary
Baseline removal and regression checks
.hypatia-baseline.json, scripts/tests/apply-baseline-test.sh
The baseline no longer acknowledges invalid_actions_lock findings. The shipped-ledger tests verify that these findings remain unsuppressed and that other findings remain unsuppressed as expected.

Priority: ⬇️ Low

Estimated code review effort: 2 (Simple) | ~10 minutes

Change: Bug fix

Suggested reviewers: joshuajewell

Merge Risk: ⚪ Minimal · up to 5886d

The change matches the stated goal, with regression checks for the affected findings. No actionable merge risk was identified; normal checks should still pass.

Security architecture risk: ⚪ Minimal · up to 5886d

The change strengthens the existing control: matching lockfile findings remain visible and eligible to fail the gate. The accompanying changes are regression assertions, not a new public endpoint or privilege boundary. No introduced or worsened security concern was identified.

Retained concerns
No architecture-level concerns identified.

Security review details

Security Blast Radius

  • inferred — The effective change is bounded to consumers of the shipped baseline: emitted invalid_actions_lock findings can no longer be acknowledged or downgraded by an entry of that type. Whether they block a particular run still depends on its existing mode and threshold.

Trust Boundaries and Controls

  • observed — The existing suppression control requires matching severity tier, module, finding type, and file or file pattern. The PR removes policy data rather than weakening those checks.
Pre-merge checks: Passed 5
Passed Passed checks: 5 passed
Check name Status Explanation
Docstring Coverage Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 1…
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
Description check Passed The description clearly explains the removal of the obsolete invalid_actions_lock acknowledgement, the related test updates, and the validation results.
Title check Passed The title clearly and concisely identifies the retirement of the cured invalid_actions_lock acknowledgement, which is the main change.
✨ Finishing Touches: 💡 1
📝 Generate docstrings: 💡
  • 🔴 Error committing to branch - (🔄 Check to retry)
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

A rabbit checks the ledger at dawn,
The old acknowledgement is gone.
Two findings stay in sight,
No baseline hides their light.
I nibble greens and hop away.

Comment @coderabbitai help to get the list of available commands.

@github-actions

Copy link
Copy Markdown
Contributor

K9 contract conformance

run https://github.com/hyperpolymath/standards/actions/runs/38493064951

K9 normative contract typecheck

k9_contract.ncl typechecks

K9 contract self-test

== the bash mirrors cannot drift from the normative contract ==
ok   leash_levels mirrors k9_contract.ncl
ok   core_capabilities mirrors k9_contract.ncl
ok   contract_version mirrors k9_contract.ncl
ok   schema_major mirrors k9_contract.ncl
== capability arithmetic (§8) ==
ok   capability_ok fs.read accepted
ok   capability_ok rollback.apply accepted
ok   capability_ok x-acme.gpu.alloc accepted
ok   capability_ok x-acme rejected
ok   capability_ok x-.gpu rejected
ok   capability_ok fs.delete rejected
ok   capability_ok  rejected
== the extractor ==
ok   extracts pedigree.security.leash
ok   extracts pedigree.component_type
ok   extracts pedigree.metadata.name
ok   pedigree leash is not reported as top-level leash
ok   required_capabilities for a quiet component
ok   required_capabilities follows allow_network
== the envelope strip keeps line numbers (§3.6) ==
ok   line 1 becomes a comment
ok   line count is preserved
ok   schema_version stays on line 5
== L3: signature presence is not verification (§10) ==
ok   no verifier -> K9-C001 is SKIPPED, never a pass
ok   the skip states presence does not authorise 'Hunt
ok   verifier accepts -> verdict 'Verified, no K9-C001 finding
ok   verifier refuses -> K9-C001 error, verdict 'Rejected
== the fixture runner's attribution cannot be fooled by a filename ==
ok   every extracted finding is well-formed rule+layer
ok   the rule that really fired is attributed
ok   a rule named only in the filename is NOT attributed
ok   K9-C001 is present as a skipped finding
ok   and that same finding is NOT extractable as a rejection
== the dialect discriminator agrees with the coordination grammar (§4.3) ==
ok   magic file opening '---' is coordination
ok   magic file opening 'metadata:' is coordination
ok   plain file opening '---' is unclaimed
ok   plain file opening 'metadata:' is unclaimed
== no Nickel reserved word is used as an identifier ==
ok   the contract and all 27 fixtures avoid Nickel's reserved words

self-test: all assertions passed

K9 conformance fixtures

== positive controls (must pass) ==
ok   extension-capability.k9.ncl
ok   extension-fields.k9.ncl
ok   hunt-fully-granted.k9.ncl
ok   kennel-data.k9.ncl
ok   library-base.ncl
ok   yard-typed-config.k9.ncl

== negative controls (must fail, by the named rule) ==
ok   L0-K9-E001-bad-magic.k9.ncl (rejected by K9-E001 at L0)
ok   L0-K9-E002-nul-byte.k9.ncl (rejected by K9-E002 at L0)
ok   L0-K9-E003-crlf.k9.ncl (rejected by K9-E003 at L0)
ok   L0-K9-E004-no-spdx.k9.ncl (rejected by K9-E004 at L0)
ok   L0-K9-E005-unclaimed-body.k9.ncl (rejected by K9-E005 at L0)
ok   L0-K9-S012-library-with-pedigree.ncl (rejected by K9-S012 at L0)
ok   L0-K9-S014-stray-leash.ncl (rejected by K9-S014 at L0)
ok   L1-K9-S001-no-pedigree.k9.ncl (rejected by K9-S001 at L1)
ok   L1-K9-S002-wrong-major.k9.ncl (rejected by K9-S002 at L1)
ok   L1-K9-S003-todo-component-type.k9.ncl (rejected by K9-S003 at L1)
ok   L1-K9-S004-unknown-leash.k9.ncl (rejected by K9-S004 at L1)
ok   L1-K9-S005-missing-name.k9.ncl (rejected by K9-S005 at L1)
ok   L1-K9-S006-unknown-capability.k9.ncl (rejected by K9-S006 at L1)
ok   L1-K9-S007-ungranted-flag.k9.ncl (rejected by K9-S007 at L1)
ok   L1-K9-S008-hunt-signature-not-required.k9.ncl (rejected by K9-S008 at L1)
ok   L1-K9-S009-hunt-no-signature-block.k9.ncl (rejected by K9-S009 at L1)
ok   L1-K9-S010-hunt-empty-side-effects.k9.ncl (rejected by K9-S010 at L1)
ok   L1-K9-S011-recipes-at-yard.k9.ncl (rejected by K9-S011 at L1)
ok   L1-K9-S013-dangling-import.k9.ncl (rejected by K9-S013 at L1)
ok   L2-K9-N001-two-segment-version.k9.ncl (rejected by K9-N001 at L2)
ok   L2-K9-N001-wrong-field-type.k9.ncl (rejected by K9-N001 at L2)

fixtures: 6 positive, 21 negative (0 needing nickel), 0 failure(s)

K9 corpus conformance (L2)

[validate-k9] 14 conforming, 0 grandfathered (layer all, contract v1.0.0)

@sonarqubecloud

Copy link
Copy Markdown

@hyperpolymath
hyperpolymath marked this pull request as ready for review October 14, 2026 01:04
@hyperpolymath
hyperpolymath merged commit e3d5107 into main Oct 14, 2026
66 checks passed
@hyperpolymath
hyperpolymath deleted the claude/kind-curie-w54eub branch October 14, 2026 01:04
@coderabbitai

coderabbitai Bot commented Oct 17, 2026

Copy link
Copy Markdown
Contributor

❌ Failed to create Coding Agent finishing-touch task. Please try again.

hyperpolymath added a commit that referenced this pull request Oct 19, 2026
…1305)

## Summary

Follow-up to #1239. SonarCloud's quality gate passed on #1239 but
reported **1 new issue**. The session that wrote #1239 could not open
the finding, because its proxy blocks sonarcloud.io.

The only conditional #1239 added is `if [ "$got" = "0" ]` in
`scripts/tests/apply-baseline-test.sh`, the guard that keeps an
`invalid_actions_lock` ack out of the shipped baseline. #1291 answered
the same Sonar rule elsewhere in this repo with Bash `[[ ... ]]`, so
this PR does the same to this one line:

```diff
-  if [ "$got" = "0" ]; then
+  if [[ "$got" == "0" ]]; then
```

The rest of the file is unchanged.

## Testing

| Check | Result |
|---|---|
| `bash scripts/tests/apply-baseline-test.sh` | 52 passed, 0 failed |
| Mutation: an `invalid_actions_lock` ack restored to a copy of
`.hypatia-baseline.json` | 2 FAIL, exit 1. The guard still fails on its
target. |
| `.githooks/pre-commit` and `commit-msg` | passed, including gitleaks,
SPDX and validate-actions-lock |

**Unconfirmed:** I could not read the Sonar finding itself, so this PR's
Sonar run is the confirmation. If Sonar still reports a new issue here,
it was something else and I'll follow up.

---
_Generated by [Claude
Code](https://claude.ai/code/session_01TbbnKqskQA5mj5gfMniPzi)_

Co-authored-by: Claude <noreply@anthropic.com>
hyperpolymath added a commit that referenced this pull request Oct 19, 2026
…eep it that way (#1304)

## Summary
`.hypatia-baseline.json` was valid I-JSON but not JCS: it had 516
indented lines and unsorted member names. `3-practice/JSON-POLICY.adoc`
§6 left this file undecided. On 2026-10-19 the owner ruled that it must
be converted. This PR has two commits.

### 1. `chore(json): canonicalise .hypatia-baseline.json`
- I ran `ijson-jcs fix` with the binary built from the commit CI pins
(`0fdeea71`). The file is now one sorted line ending in LF, which
satisfies `.editorconfig`. Its parsed value is unchanged: `jq` reads
`$old == $new` as true.
- No tool rewrites this file in this repo. People and agents edit it by
hand or with `jq` in PRs. Every reader parses it with `jq`, so the
single-line layout breaks no consumer:
  - `apply-baseline.sh`
  - `filter-sarif-by-baseline.sh`
  - `check-exemption-ratchet.sh`
  - the banned-language lookup in `governance-reusable.yml`
  - `tests/test_secret_scanner_no_inherit.sh`
- Docs:
  - `JSON-POLICY.adoc` §6 records the ruling.
- `HYPATIA-BASELINE-FORMAT.adoc` tells editors to run `ijson-jcs fix
.hypatia-baseline.json` after an edit. It also says the indented example
there is for reading only.

### 2. `ci(json): block drift on converted JSON` (separate commit, so it
can be dropped)
- Adds the job **"Converted JSON stays canonical"** to `ijson-jcs.yml`.
It runs `check-ijson-jcs.sh --enforce .hypatia-baseline.json` and
nothing else. The repo-wide scan stays report-only.
- Why it's needed: the baseline is edited often (#1239 and #1244 last
week). A plain `jq` edit writes it back indented, and the report-only
scan would not fail on that. This follows the precedent of
`package.json` in LANGUAGE-POLICY §1.4, where the conversion comes with
a job that fails if someone forgets to re-canonicalise.
- ⚠ This makes one file blocking. Per JSON-POLICY §3, making the gate
blocking is an owner decision. If you only want the conversion, drop
this commit.

## Testing
- `check-ijson-jcs.sh --enforce .hypatia-baseline.json` exits 0 on this
branch and 1 on `origin/main`'s copy.
- `apply-baseline.sh` gives **byte-identical output** on the old and new
files, in both `advisory` and `blocking` modes. The input had 62
matching findings plus one planted finding that should not match: 62
were suppressed and 1 was kept, in both.
- `check-exemption-ratchet.sh origin/main` passes, with
`.hypatia-baseline.json` unchanged at 62 entries.
- These tests pass:

  | Test | Result |
  |---|---|
  | `exemption-ratchet-test` | 14/14 |
  | `apply-baseline-test` | 52/52 |
  | `check-ijson-jcs-test` | 31/31 |
  | `hypatia-blocking-gate-test` | pass |
  | `test_secret_scanner_no_inherit` | pass |
- Workflow checks: `actionlint` 1.7.7 is clean. `validate-sha-pins`,
`validate-actions-lock`, `check-lock-sync`,
`check-workflow-duplicate-keys`, `validate-permissions` and the
actions-lock gate all pass. The pre-commit and commit-msg hooks pass.
- `validate-spdx-workflows` fails when run across the whole repo. The
failure is on
`9-archive/rhodium-standard-repositories/satellites/rsr-deployer/.github/workflows/jekyll-gh-pages.yml`,
which this PR does not touch. The staged-file run in pre-commit passes.

## Trade-off
Because the file is now one line, every future edit shows in a diff as a
whole-line change. To review a change, run `jq . <file>` on both sides
and compare those, or use `git diff --word-diff`.

---
_Generated by [Claude
Code](https://claude.ai/code/session_014h2gFLLQibfB5N5hFz9ZCD)_

---------

Co-authored-by: Claude <noreply@anthropic.com>
hyperpolymath added a commit that referenced this pull request Oct 20, 2026
… support) (#1315)

## Problem
`governance / Validate Hypatia Baseline` is red on `main` (`b3ce78e`,
run 39340237981) and on every open PR, including #1309, #1310 and #1311.
The only blocking findings are:

```
invalid_actions_lock (workflow_audit, high):     {:line, 4, {:unsupported_version, "v0.0.3"}}
invalid_actions_lock (workflow_hardening, high): actions.lock failed closed: {:line, 4, {:unsupported_version, "v0.0.3"}}
```

The baseline job does not build Hypatia HEAD. Both
`governance-reusable.yml` and `hypatia-scan-reusable.yml` default
`hypatia-ref` to the vetted SHA `51ab6496…` (2026-10-01), and that
commit's lockfile parser accepts only `v0.0.2`. `gh actions-lock` now
writes `v0.0.3`. The lockfile is tool-owned, and this finding is
deliberately not baselinable (#1239, #1305), so the scanner pin is what
has to move.

## Change
Both `hypatia-ref` defaults move from
`51ab6496bf47e30a0576d503df31fec30f3cfe56` to
`aa34a4cc6ba39d873710ff39763fdb9cde715f9d`. They move together, as their
descriptions require. `aa34a4cc` is hypatia `main` after
hyperpolymath/hypatia#938, which adds proper `v0.0.3` support, including
the one field `v0.0.3` introduces (the optional per-dependency
`hostname`). Unknown versions still fail closed.

No `uses:` ref changes, so `actions.lock` is untouched.

## Blast radius (measured, not assumed)
The bump carries every Hypatia commit since `51ab6496` (23 of them,
including the `research_extensions` rules and
hyperpolymath/hypatia#922's finding-shape change), and a pin move broke
every caller once before (hyperpolymath/hypatia#895). So I replayed the
`validate-hypatia-baseline` step locally at both pins on three repos:
scan, path relativisation, then `apply-baseline.sh` with
`BLOCKING_THRESHOLD=info`.

| Repo | Kept at `51ab6496` | Kept at `aa34a4cc` | Change |
|---|---|---|---|
| standards (`d55304a`) | 2 × `invalid_actions_lock` | **0** | gate
passes |
| echidna | 2 × `invalid_actions_lock`, 1 `DependencyPinning` | same 3 |
none* |
| hypatia | 2 × `invalid_actions_lock` + 28 pre-existing (RE001/4/5,
WH013) | the 28 | −2 |

(The table leaves out `GS002`/`GS005`, which come from my detached local
checkouts.)

- On all three repos the raw findings only *lose* `invalid_actions_lock`
and the derived `DependencyPinning`. There is no new finding type and no
severity change.
- All emitted severities stay inside `hypatia-scan-reusable.yml`'s
accepted set. The new `support`/`evidence`/`level` finding fields are
additive, and the only `.level` the reusable reads is the SARIF one.
- \*echidna's lockfile now parses, but it has two real dangling edges
(`slsa-framework/slsa-github-generator@f7dd8c54…` and
`hyperpolymath/panic-attack@b689a74d…` are listed under `workflows:`
with no top-level record, the startup-failure case
`scripts/close-lock.sh` documents). That is an echidna repair, not
something this PR changes.

## Checks run locally
- `scripts/tests/governance-reusable-contract-test.sh`: PASS
- `scripts/tests/hypatia-blocking-gate-test.sh`: PASS
- `scripts/tests/apply-baseline-test.sh`: 52 passed, 0 failed
- `scripts/tests/check-workflow-duplicate-keys-test.sh`: 17 passed, 0
failed with mikefarah yq v4.47.2 (checksum-verified). It fails 13/4 on
`main` too when only the Python `yq` is on PATH.
`scripts/check-workflow-duplicate-keys.sh` on both files: clean.
- `actionlint` 1.7.7 on both files: output identical to `main`.
- `yq '.on.workflow_call.inputs."hypatia-ref".default'` → `aa34a4cc…` in
both files.

## After merge
Open PRs (#1309, #1310, #1311) need `main` merged into them. Re-running
their failed jobs won't help, because a re-run reuses the PR's old merge
commit, which still carries `51ab6496`.

---
_Generated by [Claude
Code](https://claude.ai/code/session_01KUZiEB43T3E9fJAXqwbSDm)_

Co-authored-by: Claude <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

main is red: actions.lock omits a transitive dependency of asana/push-signed-commits (actions/setup-python@v2)

2 participants