Skip to content

ci: add me-client to packages build matrix + release tag list#4

Merged
Xaxis merged 1 commit into
mainfrom
feat/me-client-ci
Apr 30, 2026
Merged

ci: add me-client to packages build matrix + release tag list#4
Xaxis merged 1 commit into
mainfrom
feat/me-client-ci

Conversation

@Xaxis
Copy link
Copy Markdown
Contributor

@Xaxis Xaxis commented Apr 30, 2026

Closes the gap that let me-client v0.1.0 merge without going through CI.

Also adds me-client-v* to the release.yml tag-trigger list so future versions auto-publish on tag push.

🤖 Generated with Claude Code

The Packages workflow's build matrix was missing me-client, so PR #3
(me-client v0.1.0) merged green without ever building or testing the
new package — and never auto-published to npm. v0.1.0 was published
manually via NPM_TOKEN to unblock /integrate code samples.

This commit closes that gap so future me-client versions go through
the same gate every other package does:

  - packages.yml: add me-client to the build matrix.
  - release.yml: add me-client-v* to the tag-trigger list, plus a
    matching docstring entry.

After merge, future releases ship with: yarn version → git tag
me-client-v0.X.0 → git push --tags. Packages CI runs build+test on
every push, release.yml publishes on tag push.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@Xaxis Xaxis merged commit 68351d9 into main Apr 30, 2026
22 checks passed
@Xaxis Xaxis deleted the feat/me-client-ci branch April 30, 2026 18:06
Xaxis added a commit that referenced this pull request Apr 30, 2026
…Fees (#5)

* ci: add me-client to packages build matrix + release tag list

The Packages workflow's build matrix was missing me-client, so PR #3
(me-client v0.1.0) merged green without ever building or testing the
new package — and never auto-published to npm. v0.1.0 was published
manually via NPM_TOKEN to unblock /integrate code samples.

This commit closes that gap so future me-client versions go through
the same gate every other package does:

  - packages.yml: add me-client to the build matrix.
  - release.yml: add me-client-v* to the tag-trigger list, plus a
    matching docstring entry.

After merge, future releases ship with: yarn version → git tag
me-client-v0.X.0 → git push --tags. Packages CI runs build+test on
every push, release.yml publishes on tag push.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* feat: @orangecheck/me-client v0.2.0 — IntegratorPriceConfig + computeFees

Mirror the systemic refactor in oc-me-web. The package now exports the
canonical integrator-configurable pricing types:

  - IntegratorPriceConfig — what every integrator declares
  - IntegratorEventConfig — per-subtype { enabled, site_pays, user_share_pct }
  - SiteFeeShape — { kind: 'fixed_sats' | 'percent_of_amount', ... }
  - ComputedFees — the four-way split: gross / platform / user / site_rebate

Plus the platform constants OC inherits to all integrators:

  - PLATFORM_FEE_POLICY = { pct: 0.2, min_floor_sats: 1, ratified }
  - MIN_INTEGRATOR_PRICE_SATS = 5
  - computeFees(cfg, payment_amount?) helper for client-side preview

Type bundle grew 3.79 KB → 4.81 KB.

Already published manually; this commit makes the version bump
auditable in git history. Future versions auto-publish on
me-client-v0.X.0 tags now that PR #4 added me-client to the release
workflow's tag list.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Xaxis added a commit that referenced this pull request May 7, 2026
Mirrors @orangecheck/pledge-core@0.1.0 function-for-function so the
"cross-impl, where it counts" claim on ochk.io now applies to OC Pledge
the same way it applies to OC Attest. All 28 committed test vectors in
oc-pledge-protocol/test-vectors/ reproduce byte-identically across the
two SDKs.

Module layout (orangecheck/pledge/):

  canonical.py    Canonical messages, ids, validators, RFC 8785 envelope
                  canonicalization. Exports:
                    canonical_pledge_message / _outcome_ / _abandonment_
                    compute_pledge_id / _outcome_id / _abandonment_id
                    validate_pledge_input / _outcome_ / _abandonment_
                    pledge_input_from_dict / _outcome_ / _abandonment_
                    canonicalize_envelope, generate_nonce
                  Frozen dataclasses for inputs (PledgeCanonicalInput,
                  OutcomeCanonicalInput, AbandonmentCanonicalInput,
                  ResolvesAtTime / ResolvesAtBlock, PledgeBond /
                  Resolution / Dispute, OutcomeEvidence).

  envelopes.py    create_pledge / verify_pledge with the §3.5
                  hex-id-as-sign-target rule and the §7.3
                  agent-address-as-verify-key override; create/verify
                  for outcome and abandonment envelopes; PledgeError
                  carrying SPEC §10 codes; the Bip322Signer Protocol
                  and VerifyBip322 Callable typing for caller adapters.
                  The §4.3 `expired_unresolved` nuance (test vector v16)
                  is honoured: outcomeRequiresSignature() keys off
                  resolved_by, not mechanism.

  state.py        classify_state — pure-function §4.4 transition table.
                  Pure Python ISO-8601-UTC parsing (regex + civil-from-
                  days arithmetic) avoids datetime quirks across CPython
                  versions and is stable on Python 3.9+.

  bond.py         verify_bond — the §8 algorithm with a sync-callable
                  attestation lookup. Caller pre-resolves an
                  AttestationLookupResult and hands it in; mirrors the
                  TS SDK's verifyBond shape minus the Promise.

  resolution.py   validate_resolution_query — regex-level grammar gates
                  for the seven §3.4 mechanisms. Refuses self_proof per
                  §3.4.8.

Conformance harness (tests/pledge/test_vectors.py):
  * Loads vectors via OC_PLEDGE_VECTORS_DIR env, sibling-clone, or a
    user-home fallback (same locator pattern as vote-core / agent-core).
  * Parameterizes pytest over the 28 committed vectors; fails the named
    vector if any of canonical_message / id / state / bond code / error
    code drifts.
  * As of this commit, all 28 pass:
      v01-v10  pledge envelopes (all 7 mechanisms + agent-delegated +
                edge cases)
      v11-v16  outcome envelopes (kept / broken / disputed /
                expired_unresolved across deterministic and
                counterparty-signed paths)
      v17      abandonment envelope
      v18-v20  bond verification (valid / insufficient sats /
                bond-draining UTXO spend)
      v21-v22  bilateral consistency / contradiction → kept / disputed
      v23-v27  state-machine transitions (pending / resolvable / kept /
                broken-via-abandonment / expired_unresolved)
      v28      empty-nonce rejection → E_PLEDGE_MALFORMED

Test counts (full sdk-py suite):
  * Existing OC Attest tests: 52 passing (unchanged)
  * New pledge conformance: 28 passing
  * Total: 80 passing in 0.22s on Python 3.11

Package shape:
  * pyproject.toml: 0.1.3 → 0.2.0 (minor — additive submodule)
  * orangecheck/__init__.py: re-exports `from . import pledge as pledge`
    so consumers can write `from orangecheck import pledge` or use the
    nested attribute path.
  * No new runtime dependency. Optional `[verify]` extra (bip322 native
    binding) is reused; pledge's BIP-322 hook accepts any verifier
    callable matching `(msg, sig_b64, address) -> bool`, including
    orangecheck.verify_bip322_signature.

This unblocks Task #5 (extend the conformance CI job in
oc-packages/.github/workflows/packages.yml to clone oc-pledge-protocol
and run both SDKs against its 28 vectors). Closes Task #4.
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