Skip to content

feat(ci): propagate-hypatia-caller-id — standardise the wrapper caller id, audited - #877

Merged
hyperpolymath merged 1 commit into
mainfrom
fix/propagate-hypatia-caller-id
Sep 20, 2026
Merged

hyperpolymath merged 1 commit into
mainfrom
fix/propagate-hypatia-caller-id

Conversation

@hyperpolymath

Copy link
Copy Markdown
Owner

What

The standards-side action for standardising the Hypatia wrapper's caller job id, in the shape of scripts/propagate-workflow-pins.sh: audit by default, --fix stages, never commits, never pushes.

Why

The check a reusable-caller job publishes is <caller job id or name> / <inner job display name>. The estate's canonical required context is hypatia / Hypatia Neurosymbolic Analysis. Measured read-only across all 365 non-archived public repositories on 2026-09-20:

count
repositories with a scan wrapper 274
caller id scan 202
caller id hypatia 72
repositories whose rules require scan / Hypatia Neurosymbolic Analysis 7
repositories requiring the canonical form already 1

Two names for one gate is a trap for the next arming decision: a rule written against the form a repository does not publish is unsatisfiable, which is the class tropical-types#17 belongs to.

Behaviour

  • audit prints one tab-separated line per repository: canonical | stage | BLOCKED | UNVERIFIED | unchanged-shape | absent;
  • --fix rewrites exactly one job key. The pin, the inputs and secrets: inherit are untouched byte-for-byte (the fixture asserts a two-line diff);
  • requirement-aware: a repository whose rules name the old prefixed string is BLOCKED and refused under --fix, because the rename and the requirement must move together;
  • honest about blindness: unreadable requirement sets give UNVERIFIED and --fix refuses — no rename on an unread requirement set;
  • idempotent, shell-only, no network in the fixture path.

Verification

  • bash scripts/tests/propagate-hypatia-caller-id-test.sh — 15 branches, all pass (canonical, stage, blocked-and-untouched, absent, unchanged-shape, key-only rewrite, pin preserved, secrets: inherit preserved, idempotent, both refusal paths).
  • bash scripts/check-canonical-names.sh origin/main — clean.
  • Scope figures reproducible with a read-only pass over /users/hyperpolymath/repos + per-repo rulesets and branch protection.

Related

Not a repair of anything currently broken — nothing in the estate is blocked by the drift today. This is the mechanism for the decision to publish one name, taken deliberately rather than by whoever arms the next rule.

…r id, audited

The check a reusable-caller job publishes is `<caller job id or name> / <inner job
display name>`. The estate's canonical required context is
`hypatia / Hypatia Neurosymbolic Analysis`; in 202 of the 274 repositories that
have a scan wrapper the caller is named `scan`, so they publish
`scan / Hypatia Neurosymbolic Analysis` instead. Two names for one gate: an
arming decision that picks the wrong one is unsatisfiable, which is the class
tropical-types#17 belongs to.

Adds the standards-side action that settles it, mirroring the shape of
scripts/propagate-workflow-pins.sh:

* audit by default, one tab-separated line per repository;
* --fix stages the rename in the consumer checkout — one job key, nothing else;
  the pin, the inputs and `secrets: inherit` are untouched byte-for-byte;
* requirement-aware: a repository whose rules name the old prefixed string is
  reported BLOCKED and refused under --fix, because the rename and the requirement
  must move together;
* honest about blindness: when the requirement set cannot be read (no API, offline,
  multi-repo path) the verdict is UNVERIFIED and --fix refuses. Never rename on an
  unread requirement set;
* never commits, never pushes (estate guardrail: no unattended mutations).

Fixture suite scripts/tests/propagate-hypatia-caller-id-test.sh drives fifteen
branches against synthetic repositories with no network and no token: canonical,
stage, blocked-but-untouched, absent, unchanged-shape, key-only rewrite, pin and
secrets preserved, idempotent, and both refusal paths.

Scope measured with a read-only pass over all 365 non-archived public repositories
on 2026-09-20: 274 wrappers (202 `scan`, 72 `hypatia`), of which 7 require the old
prefixed form in a ruleset and must update the rule in the same change.
@coderabbitai

coderabbitai Bot commented Sep 20, 2026

Copy link
Copy Markdown
Contributor

Warning

Review limit reached

Next included review available in 40 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used the included review currently available.

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Learn how review limits work.

Review configuration:

⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Advanced

Run ID: 876827e4-1720-4cba-9b2d-58d92470bace

📥 Commits

Reviewing files that changed from the base of the PR and between 84a438e and 65a493c.

📒 Files selected for processing (2)
  • scripts/propagate-hypatia-caller-id.sh
  • scripts/tests/propagate-hypatia-caller-id-test.sh

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

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

@sonarqubecloud

Copy link
Copy Markdown

@hyperpolymath
hyperpolymath merged commit 2b77b41 into main Sep 20, 2026
15 of 23 checks passed
@hyperpolymath
hyperpolymath deleted the fix/propagate-hypatia-caller-id branch September 20, 2026 22:48
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.

1 participant