Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Resolve Happier's private release authority from the public repository contract.
.claude/skills/happier-dev-happier-release/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 8% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 22% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 20% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 0% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 31% | 0% |
Keep release policy simple: test source once, admit the operation cheaply, build each immutable candidate once, verify once per trust boundary, promote independent products in parallel where the workflow permits, and recover without rebuilding valid work.
When the same approved dev source must ship to both public channels, select the conductor's preview-and-production target. It reuses one exact-SHA CI and approval packet, and it executes the union of source-only MySQL, platform, and trust-root checks once before the canonical channel workflow runs preview and production concurrently. Each channel still performs its own admission against that shared exact-source evidence. Do not try to reuse preview artifact bytes for production: channel-specific binaries embed different feature-policy environments. The fast path removes duplicate orchestration and operator wait, not required channel-specific builds or artifact verification.
Channel combination does not combine product targets. website and docs are independent entries in the target-owned release target set: either may be selected without the other, and each retains its own plan, job, status surface, and recovery evidence in both single-channel and combined operations.
Inspect the public machine-readable contract with:
bashnode scripts/pipeline/run.mjs release-contract
Then resolve the private release authority for the absolute checkout:
bashhmaint release bootstrap --repo <absolute checkout> --json
Use the returned private skill and its instructions as authoritative. The public contract defines targets, profiles, and compatibility intent; private operating procedure stays outside this repository.
Do not publish from a dirty or protocol-incompatible maintainer-tools checkout. Bootstrap/preflight must bind the maintainer-tools commit and return structured admission failures before any release mutation. Do not modify or clean that checkout as an implicit part of releasing.
First establish the actual execution host (uname -s, pwd -P) and the absolute source checkout. A path under a mounted VM workspace does not by itself mean the agent process is running inside Linux.
/Users/leeroy/Documents/Development/happier/maintainers-tools/bin/hmaint directly so it can use the Mac Keychain and native signing/release prerequisites. Prove that exact wrapper with /Users/leeroy/Documents/Development/happier/maintainers-tools/bin/hmaint --help (there is no required hmaint --version command). Do not scan unrelated home directories, resolve a different copy from PATH, invoke the maintainer CLI's internal JavaScript entry point, install another copy, or guess a checkout.apps/stack/bin/hstack-exec --target=mac-host -- <command> ... from the intended repository-relative working directory. The current launcher projects that invocation directory remotely and has no launcher-level --cwd option. If the 0.3 launcher, configured mac-host target, Mac wrapper, or Mac-visible target checkout cannot be proved, fail closed. Never copy Keychain secrets into the VM or substitute a VM-local conductor.yarn ghops auth status is the safe credential-path probe. In a managed Linux workspace it should report the Mac-host credential broker; it must not print the token. Failure of direct Keychain access from one process does not authorize falling back to a personal gh login.Before porting or releasing, resolve and compare real paths, repository roots, branch/commit bases, and dirty state. Host checkouts and VM-mounted siblings with similar names may be distinct repositories; never assume that changes written to one are visible in the other.
Before expensive candidate work, run the repository's cheap, non-mutating release preflight. It validates operation-specific inputs such as source/channel identity, version and notes projection, maintainer protocol compatibility, tools, credentials, external configuration, and selected runner/platform prerequisites. It must call canonical owners and must not repeat unit, typecheck, integration, or E2E work from source CI.
Consume an explicit successful exact-SHA CI run/attestation whenever available. Pass its numeric ci_run_id; the release verifier must bind repository, canonical workflow, event, branch, completion, success, and exact head SHA. Nightly release validation remains artifact-specific and risk-selected—it is not another full source-CI run. If source CI is absent, fail or defer quickly through the canonical fallback instead of keeping a release runner watching another workflow.
Source CI cannot prove behavior that requires an as-yet-unpublished signed candidate. Candidate identity, archive/signature checks, installer consumption of the candidate, CLI update continuity between real published versions, store submission, and promoted-reference checks therefore remain in the release graph after their required artifact exists. Run those independent candidate validations in parallel where their prerequisites allow, but never replace them with source mocks or waive artifact verification. A collector can expose every reachable error in one attempt; it cannot execute a consumer before the artifact or external state that consumer requires exists.
Keep fast, release, and deep profile ownership distinct as defined in CI cleanup. Do not turn a profile or runner backend into a copied workflow.
For a failing or slow run, apply skills/happier-ci-stabilize/SKILL.md. Its recovery table decides among:
Do not blindly retry an ambiguous publication mutation. Reconcile remote state through its canonical mutation owner first. Use one foreground monitor, bound to one run and attempt, with 5-20 minute polling for long operations. Close only from terminal release status, exact candidate identity, required validation, and promoted-reference evidence.
For a same-control transient failure, use GitHub's native gh run rerun <run-id> --repo happier-dev/happier --failed. For a control/test-only correction, wait for a terminal origin and run the exact hmaint release resume command and confirmation token returned by the private conductor. Select the richest valid origin—the completed run with the most individually verified candidates and downstream evidence—rather than assuming the newest run is best. Never replace the privileged conductor with a direct release workflow dispatch.
npm trusted publishing validates the top-level caller of the reusable npm workflow. The supported release-shared configurations therefore include both release.yml and release-preview-and-production.yml for every published npm package. An ENEEDAUTH cluster across otherwise-authorized publisher jobs is a configuration failure to verify at that boundary, not a reason to add a long-lived npm token.
TestFlight is a best-effort asynchronous projection. The native workflow owns building/submitting the exact candidate; it then hands the exact EAS build id or local IPA build identity to the existing retry_testflight_distribution action, which runs from the current trusted control checkout. Do not keep the parent release waiting for App Store processing, start a second iOS build to retry group attachment, or run a new control flag from an older candidate checkout. Inspect and rerun only the reconciliation action when Apple processing or group attachment fails.
Issue availability is a public release contract owned by docs/issue-triage.md. Snapshot only the earlier stage:* queues proved by the selected source topology before candidate binding, and advance that snapshot only after post-promotion verification:
dev nightly: source;dev -> preview: source/dev;preview -> main: preview;dev -> main: source/dev.dev -> preview + main: snapshot source/dev once and advance itdirectly to stable only after both channel releases succeed.
A reconciliation failure does not roll back published artifacts, but remains a visible release-workflow failure. Retry only the idempotent label owner or leave issues at their prior stage for the next matching release. Never compensate by closing issues or claiming availability without release evidence.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 24,523 | 14,953 | -39% | 1 | 1 | 0% | 4,077 | 4,393 | +8% | 0 | 0 | — |
case-02 | fail→fail | 19,848 | 13,747 | -31% | 1 | 1 | 0% | 3,016 | 4,106 | +36% | 0 | 0 | — |
case-03 | fail→pass | 24,599 | 19,069 | -22% | 1 | 1 | 0% | 3,899 | 4,762 | +22% | 0 | 0 | — |
case-04 | fail→pass | 16,977 | 8,163 | -52% | 1 | 1 | 0% | 2,613 | 3,134 | +20% | 0 | 0 | — |
case-05 | fail→pass | 19,000 | 18,120 | -5% | 1 | 1 | 0% | 3,117 | 3,114 | -0% | 0 | 0 | — |
case-06 | fail→fail | 39,828 | 7,429 | -81% | 1 | 1 | 0% | 1,309 | 2,982 | +128% | 0 | 0 | — |
case-07 | fail→pass | 18,496 | 9,760 | -47% | 1 | 1 | 0% | 2,668 | 3,484 | +31% | 0 | 0 | — |
case-08 | fail→pass | 11,596 | 6,119 | -47% | 1 | 1 | 0% | 1,826 | 2,677 | +47% | 0 | 0 | — |
case-09 | fail→pass | 16,963 | 13,933 | -18% | 1 | 1 | 0% | 2,704 | 3,717 | +37% | 0 | 0 | — |
case-10 | fail→pass | 14,532 | 9,153 | -37% | 1 | 1 | 0% | 2,337 | 3,250 | +39% | 0 | 0 | — |
case-11 | fail→pass | 42,616 | 10,914 | -74% | 1 | 1 | 0% | 1,235 | 3,143 | +154% | 0 | 0 | — |
case-12 | pass→pass | 16,937 | 6,982 | -59% | 1 | 1 | 0% | 2,209 | 2,837 | +28% | 0 | 0 | — |
case-13 | fail→pass | 23,110 | 9,893 | -57% | 1 | 1 | 0% | 3,335 | 2,854 | -14% | 0 | 0 | — |
case-14 | fail→pass | 21,833 | 6,306 | -71% | 1 | 1 | 0% | 2,838 | 2,871 | +1% | 0 | 0 | — |
case-15 | fail→pass | 30,186 | 7,440 | -75% | 1 | 1 | 0% | 1,023 | 2,810 | +175% | 0 | 0 | — |
case-16 | fail→pass | 15,297 | 9,177 | -40% | 1 | 1 | 0% | 2,443 | 3,206 | +31% | 0 | 0 | — |
case-17 | pass→pass | 13,563 | 6,179 | -54% | 1 | 1 | 0% | 1,865 | 2,874 | +54% | 0 | 0 | — |
case-18 | fail→pass | 39,206 | 8,241 | -79% | 1 | 1 | 0% | 1,377 | 3,159 | +129% | 0 | 0 | — |
case-19 | fail→pass | 18,235 | 9,435 | -48% | 1 | 1 | 0% | 2,724 | 3,153 | +16% | 0 | 0 | — |
case-20 | fail→pass | 18,115 | 7,999 | -56% | 1 | 1 | 0% | 2,209 | 3,083 | +40% | 0 | 0 | — |
case-21 | pass→pass | 10,339 | 7,190 | -30% | 1 | 1 | 0% | 1,699 | 2,951 | +74% | 0 | 0 | — |
case-22 | pass→pass | 16,764 | 13,191 | -21% | 1 | 1 | 0% | 2,806 | 3,986 | +42% | 0 | 0 | — |
case-23 | pass→pass | 15,988 | 12,872 | -19% | 1 | 1 | 0% | 2,751 | 3,853 | +40% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted, and 19 counted toward the lift figure. The other 4 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +70 percentage points is the difference between those two pass rates over the 19 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
| Model | Method | Date | Lift |
|---|---|---|---|
| gemini-3.6-flash | verified | 9/9/2026 | +52% |
| gemini-3.6-flash | verified | 9/1/2026 | +36% |
Other measured skills in the registry, with their headline benchmark lift.