Skip to content

CI never runs the Azure signer oracle #48

Description

@Alex1990

AGENTS.md requires every signer to stay byte-identical to its official SDK, and the oracles are what enforce that. Three of the four are covered; one is not:

Signer Oracle In CI?
AWS test/aws-signature.spec.ts yes — vitest, so pnpm test:ci runs it
COS test/cos-signature.spec.ts yes — vitest
OBS test/obs-signature.spec.ts yes — vitest
Azure test/azure-oracle.node.ts no — a standalone script (pnpm test:azure-oracle) that no workflow invokes

.github/workflows/ci.yml runs pnpm lint and pnpm test:ci:coverage, and the Azure oracle is not a vitest spec, so nothing in CI touches the Azure SharedKey/SAS signer. A PR that breaks Azure signature compatibility merges green.

Why this matters more than a missing test usually would:

  1. It is the oracle issue deps: track two dev-only advisories from pnpm audit (aws-sdk v2, fast-xml-parser) #42's disposition leans on. The fast-xml-parser advisory is reachable only through cos-js-sdk-v5, and the argument for widening the override is "re-run the oracle to confirm byte-identity". Doing that without CI coverage means the next dependency bump can silently break it again.
  2. The Azure signer has no runtime dependency to hide behind — it is our own canonicalization code.

Expected: a PR against main fails CI when the Azure oracle fails.

Notes for whoever implements it:

  • The script is CI-safe: no network, no credentials. It signs with a fixed 32-byte key and pins the clock (FixedDate), and mocks the request object. It just needs tsx, which the repo already uses for pnpm serve.
  • Locally it takes about 1.4s.
  • AGENTS.md says never to change a signer without these passing; the point of this issue is to make that enforceable rather than a convention.

Activity

  1. github-actions commented on Sep 15, 2026

    @github-actions
    Contributor

    Loop triage — bug / ready-for-agent (confidence: high)

    Confirmed the report: nothing in CI runs the Azure signer oracle.

    • test/azure-oracle.node.ts is exposed only as package.json:60 "test:azure-oracle": "tsx test/azure-oracle.node.ts"; a search of .github/ finds no reference to it.
    • .github/workflows/ci.yml runs pnpm lint and pnpm test:ci:coverage. test:ci:coverage is vitest run --browser.headless --coverage, and the oracle is not a vitest spec — so the Azure SharedKey/SAS signer has no CI coverage while the AWS/COS/OBS oracles (all vitest specs) do.
    • The oracle is CI-safe and already passes: pnpm test:azure-oracle returns exit 0 in ~1.4s locally. It uses a fixed 32-byte key, pins the clock with FixedDate, and mocks the request object; there is no network call and no credential read from the environment, and it exits non-zero when any check fails.

    Actionable by the loop without a workflow change: the CI Test job invokes pnpm test:ci:coverage, so chaining the oracle into that script (e.g. tsx test/azure-oracle.node.ts && vitest run --browser.headless --coverage) makes CI fail whenever the oracle fails. tsx is already a devDependency and is used by pnpm serve, which the same job runs. This is the enforceable form of AGENTS.md's “never change a signer without the oracles passing”, and it is what issue #42's “re-run the oracle to confirm byte-identity” argument needs.

    Labeling ready-for-agent and leaving bug in place.

  2. added
    ready-for-humanRequires a human: implementation, merge of a loop PR, or a release call
    and removed
    ready-for-agentFully specified, an AFK agent may handle it unattended
    on Sep 15, 2026
  3. github-actions commented on Sep 15, 2026

    @github-actions
    Contributor

    Loop bugfix — PR opened for this.

    The Azure SharedKey/SAS oracle is now enforced in CI: package.json chains pnpm test:azure-oracle into both test:ci and test:ci:coverage, and CI's Test job runs pnpm test:ci:coverage. A broken Azure signer now fails the step instead of merging green. No .github/workflows/** change was needed (the job token cannot push those), and the oracle/signers are untouched.

    Verified locally: the exact CI command exits 0 with the oracle output, and a temporarily forced oracle failure aborts the chain with exit 1. pnpm lint, pnpm fmt:check, pnpm check:types, pnpm test:ci:coverage and pnpm build all pass.

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingready-for-humanRequires a human: implementation, merge of a loop PR, or a release call

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions