Skip to content

Stream F: verify Action go-to-market hardening#14

Merged
bordumb merged 9 commits into
mainfrom
fn-152-b1
Jun 9, 2026
Merged

Stream F: verify Action go-to-market hardening#14
bordumb merged 9 commits into
mainfrom
fn-152-b1

Conversation

@bordumb

@bordumb bordumb commented Jun 8, 2026

Copy link
Copy Markdown
Contributor

Stream F — verify Action go-to-market hardening

Pre-launch polish so the action is correct, consistent, and credible for its first public Marketplace release. Tracked as Flow epic fn-2 (roadmap Stream F).

What landed

Roadmap Change
G3.4 Renamed the misleading input tokenidentity-bundle (it carries public identity data, not a secret). Updated action.yml, main.ts (live read + doc strings), all README usage/table/prose, and Jest mocks; rebuilt dist/. github-token and the "CI token" format strings are untouched.
G3.3 Fixed the license mismatch — package.json (+ lockfile root) now Apache-2.0, matching LICENSE and the README.
G3.5 Pinned auths-version in all 11 README examples (the action fails closed without it on a clean runner).
G3.6 Added CHANGELOG.md (Keep a Changelog; documents the breaking rename) and a .github-template/workflows/verify.yml starter template (least-privilege permissions, fetch-depth: 0, pinned version) that sync-to-dedicated-repo.sh now ships.
G3.7 Replaced the hardcoded static badge with a shields.io endpoint badge backed by a committed endpoint.json (now also synced to the dedicated repo).
Baseline: enforced auths-version pinning + fail-closed SHA256 checksum verification of the downloaded CLI (never resolves latest).
sync-to-dedicated-repo.sh now also ships LICENSE and CHANGELOG.md to the public/marketplace repo (it shipped neither before).

Not in this PR (handed off)

  • G3.2 (release + move v1 tag) — deliberately not automated. It needs interactive Secure-Enclave signing (signed commit + signed tag) and an outward-facing publish, plus a decision: move v1 (if zero external @v1 consumers — the rename is breaking) or cut v2. Note: package.json is 1.0.2 but tags already reach v1.3.0, so bump above that. All prerequisites are ready (just ci green, dist/ committed, branding: present).
  • Live badge status — this PR ships the endpoint plumbing; wiring CI to publish real pass/fail is tracked as a follow-up (it needs a host/branch that doesn't collide with the signed-commit gate).

Corrections vs. the original brief

  • branding: already existed in action.yml — nothing to add for Marketplace.
  • sign/README.md:3 is a separate sibling repo, out of scope here.

⚠️ Commits need re-signing

These commits were authored without the Secure-Enclave signature, so the verify-commits check will fail until re-signed:

git rebase --gpg-sign -f 926ff87   # Touch ID; recreates + signs the 7 commits
git push --force-with-lease

Verification

just ci (test + build + check-dist) green · 59/59 tests pass · dist/ committed and in sync.

@github-actions

github-actions Bot commented Jun 9, 2026

Copy link
Copy Markdown

Auths Commit Verification

Commit Status Details
6e98d20d ✅ Verified Signed by did:keri:ECHoDk6bcHtZm3rngCXNpANJNh-U-3Bd5bSO1YVx6Fac
49b064cd ❌ Failed No signature found
92fc68c2 ❌ Failed No signature found
4b2fffbe ❌ Failed No signature found
40aee552 ❌ Failed No signature found
9d841bbe ❌ Failed No signature found
884615e6 ❌ Failed No signature found
d803d773 ❌ Failed No signature found
8eac0df0 ❌ Failed No signature found

Result: ❌ 1/9 commits verified


How to fix

Commit 49b064cd has no Auths signature (no Auths-Id/Auths-Device trailer).

1. Install auths

macOS: brew install auths
Linux: Download from releases

2. One-time setup (creates your identity and configures Git)

auths init

3. Sign this branch and push

auths sign origin/main..HEAD
git push --force-with-lease

For CI to verify the signer, commit an identity bundle:

auths id export-bundle --alias main --output .auths/ci-bundle.json --max-age-secs 31536000

Quickstart →

bordumb added 9 commits June 9, 2026 20:53
- require a pinned auths-version; never resolve releases/latest (throw if
  unset and auths not on PATH)
- fail closed when a release .sha256 is absent/unfetchable instead of warning
  and running an unverified binary
- treat checksum/integrity errors as fatal instead of masking them as
  'binary not found'
- document the pin requirement in action.yml input + README quickstart/inputs
- rebuild dist/

Auths-Id: did:keri:ECHoDk6bcHtZm3rngCXNpANJNh-U-3Bd5bSO1YVx6Fac
Auths-Device: did:keri:ECHoDk6bcHtZm3rngCXNpANJNh-U-3Bd5bSO1YVx6Fac
The input carries public identity-bundle data, not a secret; 'token'
collided with the GITHUB_TOKEN mental model. Renamed across action.yml,
main.ts (live read + doc strings), README usage/table/prose, and Jest
input mocks; left github-token and the 'CI token' format strings intact.
Rebuilt dist/.

Auths-Id: did:keri:ECHoDk6bcHtZm3rngCXNpANJNh-U-3Bd5bSO1YVx6Fac
Auths-Device: did:keri:ECHoDk6bcHtZm3rngCXNpANJNh-U-3Bd5bSO1YVx6Fac
LICENSE is Apache-2.0 and the README already states it; package.json
declared MIT. Sync package.json + the package-lock root self-entry.

Auths-Id: did:keri:ECHoDk6bcHtZm3rngCXNpANJNh-U-3Bd5bSO1YVx6Fac
Auths-Device: did:keri:ECHoDk6bcHtZm3rngCXNpANJNh-U-3Bd5bSO1YVx6Fac
The action fails closed when auths-version is empty and auths isn't on
PATH, so unpinned copy-paste examples would hard-fail on a clean runner.
Add the pin to every usage snippet (with a with: block where missing).

Auths-Id: did:keri:ECHoDk6bcHtZm3rngCXNpANJNh-U-3Bd5bSO1YVx6Fac
Auths-Device: did:keri:ECHoDk6bcHtZm3rngCXNpANJNh-U-3Bd5bSO1YVx6Fac
- CHANGELOG.md (Keep a Changelog) documenting the breaking token ->
  identity-bundle rename, KEL-native verification, supply-chain hardening,
  and the license fix under [Unreleased]
- .github-template/workflows/verify.yml starter template (least-privilege
  permissions, fetch-depth: 0, pinned auths-version) that
  sync-to-dedicated-repo.sh now ships to the public repo

Auths-Id: did:keri:ECHoDk6bcHtZm3rngCXNpANJNh-U-3Bd5bSO1YVx6Fac
Auths-Device: did:keri:ECHoDk6bcHtZm3rngCXNpANJNh-U-3Bd5bSO1YVx6Fac
Replace the hardcoded static badge with an endpoint badge backed by a
committed endpoint.json, and sync endpoint.json to the dedicated repo.
Live pass/fail wiring is tracked as a follow-up (needs hosting/branch
infra that conflicts with the signed-commit gate).

Auths-Id: did:keri:ECHoDk6bcHtZm3rngCXNpANJNh-U-3Bd5bSO1YVx6Fac
Auths-Device: did:keri:ECHoDk6bcHtZm3rngCXNpANJNh-U-3Bd5bSO1YVx6Fac
The marketplace/public repo needs LICENSE (Apache-2.0) and the CHANGELOG;
the sync script copied neither. Add them so a release ships a complete repo.

Auths-Id: did:keri:ECHoDk6bcHtZm3rngCXNpANJNh-U-3Bd5bSO1YVx6Fac
Auths-Device: did:keri:ECHoDk6bcHtZm3rngCXNpANJNh-U-3Bd5bSO1YVx6Fac
Prepare the release commit: bump package.json + lockfile to 1.4.0 and
promote CHANGELOG [Unreleased] -> [1.4.0]. The tag + floating-v1 move is
cut from main post-merge via 'just release 1.4.0' (needs signing).

Auths-Id: did:keri:ECHoDk6bcHtZm3rngCXNpANJNh-U-3Bd5bSO1YVx6Fac
Auths-Device: did:keri:ECHoDk6bcHtZm3rngCXNpANJNh-U-3Bd5bSO1YVx6Fac
…_signers + static badge

- pin auths-version 0.0.1-rc.12 in verify-commits/sign-commits/release workflows (fail-closed installer requires it)
- commit .auths/ci-bundle.json and pass it via identity-bundle (runners have no local identity store)
- drop .auths/allowed_signers (retired model) and the static endpoint.json badge
- README: document artifacts-verified/artifact-results outputs
- package.json: auths-dev org name/author, refresh keywords

Auths-Id: did:keri:ECHoDk6bcHtZm3rngCXNpANJNh-U-3Bd5bSO1YVx6Fac
Auths-Device: did:keri:ECHoDk6bcHtZm3rngCXNpANJNh-U-3Bd5bSO1YVx6Fac
@github-actions

github-actions Bot commented Jun 9, 2026

Copy link
Copy Markdown

Auths Commit Verification

Commit Status Details
fbdcc8fb ✅ Verified Signed by did:keri:ECHoDk6bcHtZm3rngCXNpANJNh-U-3Bd5bSO1YVx6Fac
3b288b99 ✅ Verified Signed by did:keri:ECHoDk6bcHtZm3rngCXNpANJNh-U-3Bd5bSO1YVx6Fac
1ac8dadb ✅ Verified Signed by did:keri:ECHoDk6bcHtZm3rngCXNpANJNh-U-3Bd5bSO1YVx6Fac
a982f0ed ✅ Verified Signed by did:keri:ECHoDk6bcHtZm3rngCXNpANJNh-U-3Bd5bSO1YVx6Fac
7dd79c61 ✅ Verified Signed by did:keri:ECHoDk6bcHtZm3rngCXNpANJNh-U-3Bd5bSO1YVx6Fac
df4bcb68 ✅ Verified Signed by did:keri:ECHoDk6bcHtZm3rngCXNpANJNh-U-3Bd5bSO1YVx6Fac
7c8e5fac ✅ Verified Signed by did:keri:ECHoDk6bcHtZm3rngCXNpANJNh-U-3Bd5bSO1YVx6Fac
b495f079 ✅ Verified Signed by did:keri:ECHoDk6bcHtZm3rngCXNpANJNh-U-3Bd5bSO1YVx6Fac
3d4722f6 ✅ Verified Signed by did:keri:ECHoDk6bcHtZm3rngCXNpANJNh-U-3Bd5bSO1YVx6Fac

Result: ✅ 9/9 commits verified

@bordumb bordumb merged commit 3dbdd6d into main Jun 9, 2026
2 checks passed
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