Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -179,12 +179,12 @@ telemetry**, so nothing is ever collected automatically. You decide what to shar
the beta is, how to join, and how to send feedback — then skim the
[test charter](docs/beta/test-charter.md) for concrete things to try, all
centered on calling a real dance from **Perform mode**.
- **Filing something?** The **Bug report** and **Feature request** forms are
always on the
[new-issue chooser](https://github.com/ibanner56/CallersCompendium/issues/new/choose).
As the beta program rolls out, beta-specific forms join them: **General feedback**
for rough edges, **Beta check-in** to report how a session or gig went, and
**Import source problem** when a dance imports wrong. For open-ended ideas, start a
- **Filing something?** The
[new-issue chooser](https://github.com/ibanner56/CallersCompendium/issues/new/choose)
now carries the full set of forms: **Bug report** and **Feature request**,
the beta-specific **General feedback** (rough edges), **Beta check-in** (how a
session or gig went), and **Import source problem** (a dance imported wrong),
plus a **Join the beta** signup. For open-ended ideas, start a
[Discussion](https://github.com/ibanner56/CallersCompendium/discussions).
- **Curious what happens next?** Maintainers sort every report using the
[triage rubric](docs/beta/triage-rubric.md), which maps to the label taxonomy in
Expand Down
11 changes: 7 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -69,11 +69,14 @@ Start with [CONTRIBUTING.md](CONTRIBUTING.md) and the
Are you a caller? We're running a beta program and would love your feedback. The
[Beta guide](docs/beta/beta-guide.md) explains how to join, what to try, and how
to send feedback — all voluntary, all through GitHub, with no telemetry and
nothing collected automatically. File a report from the
nothing collected automatically. Ready to jump in? Use the
[**Join the beta**](https://github.com/ibanner56/CallersCompendium/issues/new?template=beta_signup.yml)
form, browse downloads on the
[project site](https://ibanner56.github.io/CallersCompendium/), or file a report
from the
[issue chooser](https://github.com/ibanner56/CallersCompendium/issues/new/choose) —
the **Bug report** and **Feature request** forms are always there, with the
**General feedback** and **Beta check-in** forms joining them as the beta program
rolls out — or start a conversation in
the **Bug report**, **Feature request**, **General feedback**, **Beta check-in**,
and **Import source problem** forms are all live there — or start a conversation in
Comment thread
ibanner56 marked this conversation as resolved.
[Discussions](https://github.com/ibanner56/CallersCompendium/discussions).

## Supporting
Expand Down
16 changes: 8 additions & 8 deletions docs/ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -578,7 +578,7 @@ taxonomy are unchanged.
## Phase 7 — Release

- [ ] 7.1 Packaging/signing for all platforms; update channel
- Architecture — [ADR-002](adr/002-distribution-and-update-channels.md); release runbook — [releasing.md](dev/releasing.md). Box stays open: **Android release APKs are now signed** (upload keystore + four CI secrets configured, validated end-to-end on a release run) and **macOS release builds are now signed with a Developer ID and notarized**, but **Windows and Linux** desktop builds still ship **unsigned** (deferred signing wave) and update-manifest hosting still awaits enabling GitHub Pages. The **first public beta is shipping** — `v0.1.0-beta.1` (desktop + Android) and `v0.1.0-beta.2` are published on the [Releases page](https://github.com/ibanner56/CallersCompendium/releases); beta.2 adds a **signed + notarized macOS** build, an **iOS build delivered to TestFlight testers**, wider imports, program sharing, and a large figure-text display-parity pass (see the CHANGELOG, including the one-time Android reinstall note for the unified application id).
- Architecture — [ADR-002](adr/002-distribution-and-update-channels.md); release runbook — [releasing.md](dev/releasing.md). Box stays open: **Android release APKs are now signed** (upload keystore + four CI secrets configured, validated end-to-end on a release run) and **macOS release builds are now signed with a Developer ID and notarized**, but **Windows and Linux** desktop builds still ship **unsigned** (deferred signing wave). GitHub Pages is now enabled, so the per-channel update manifests are hosted and served (and a public landing page ships from `site/`). The **first public beta is well underway** — `v0.1.0-beta.1` (desktop + Android), `v0.1.0-beta.2`, and the current `v0.1.0-beta.3` are published on the [Releases page](https://github.com/ibanner56/CallersCompendium/releases); each build ships signed + notarized macOS and signed Android artifacts alongside unsigned Windows/Linux, with iPhone/iPad delivered to TestFlight testers (see the CHANGELOG, including the one-time Android reinstall note for the unified application id).
- **Delivered**
- Reusable CI (`_checks.yml` via `workflow_call`) with a thin `ci.yml` caller (#228).
- Release pipeline `release.yml` (#230): a `v*` tag reuses the checks gate, then a build matrix produces a **draft** GitHub Release of **unsigned** desktop artifacts — Linux x64 (AppImage + tar.gz), macOS universal (dmg + zip), Windows x64 (installer + zip) — under deterministic `CallersCompendium-<ver>-<platform>-<arch>.<ext>` names, plus a `SHA256SUMS` manifest, keyless SLSA build-provenance + artifact attestation, and the per-channel `stable.json` / `beta.json` update manifests. Least-privilege (global `contents: read`; only the publish job elevates), canonical-repo + tag guards, SHA-pinned actions.
Expand All @@ -587,11 +587,11 @@ taxonomy are unchanged.
- In-app update client **Stage 1** (A11a, #245): pure-Dart manifest model + schema guard, SemVer compare, channel filter, a dedicated Settings **Updates** section (manual check + beta opt-in + auto-check; the last two default OFF), and a dismissible update banner linking the release page.
- **Stage 1.5** assisted download (A11b, #250): desktop-only, user-initiated download → mandatory sha256 verify → OS handoff (mobile stays link-only); fails loudly on every path.
- Update-manifest hosting (A11c, #249): the pipeline publishes each channel's manifest to a persistent `gh-pages` branch (cross-channel-preserving; [releasing.md](dev/releasing.md#publishing-the-update-manifest-github-pages)).
- **GitHub Pages enabled + public landing page** (#408): Pages is turned on (Deploy from a branch → `gh-pages` → `/ (root)`), so the hosted update manifests are live and a dependency-free landing page ships from `site/` at https://ibanner56.github.io/CallersCompendium/ (auto-aligning download links from `beta.json`, beta-signup CTA, and user-guide links).
- Android release signing **complete**: Gradle `release` `signingConfig` from `key.properties` with a debug fallback in `app/android/app/build.gradle.kts` (#244) + a `release.yml` build+sign+stage universal-APK leg (#251). The upload keystore and all four `ANDROID_*` CI secrets are now configured, and a release run built + signed `CallersCompendium-<ver>-android-universal.apk` end-to-end (the JDK-21 fix in #265 keeps release lint enabled). Users can sideload the signed APK from GitHub Releases — no Play Store required.
- iOS release signing + TestFlight leg **wired** (gated on the Apple API-key secrets, which are configured): a `release.yml` iOS leg (`macos-latest`) archives + signs an App Store `.ipa` using **automatic signing driven by an App Store Connect API key** (App Manager role — **no manual cert or provisioning profile**) and uploads it to **TestFlight** via `xcrun altool --upload-app`. The `CFBundleVersion` is a monotonic `GITHUB_RUN_NUMBER` (TestFlight rejects duplicates; `pubspec.yaml` untouched), and the upload is gated to **real `v*` tags** (a `workflow_dispatch` builds + signs for validation but never uploads). iOS is **store-delivered** — the `.ipa` is not a GitHub Release asset / `SHA256SUMS` / manifest entry. Targets **iPhone + iPad**; first channel is internal TestFlight (no Beta App Review). **Now live:** beta.2 was archived, signed, and uploaded to TestFlight, and invited testers are running the iOS/iPadOS build (bug reports have come in against `0.1.0` on iOS). See [releasing.md](dev/releasing.md#ios-testflight-via-app-store-connect-api).
- **macOS Developer ID signing + notarization delivered** (#311, notarization wait bounded in #329): the `release.yml` macOS leg signs the universal build with an Apple Developer ID and notarizes it (gated on the configured Apple secrets), so the macOS `.dmg`/`.zip` now open without the Gatekeeper right-click workaround. Shipped in beta.2.
- **Remaining (maintainer — one-time, $0)**
- Enable GitHub Pages (Deploy from a branch → `gh-pages` → `/ (root)`); the in-app update client 404s gracefully until then.
- Document Android upload-keystore custody (owner, secure backup, rotation policy) — the key is generated and wired into CI, so this is governance, not a build blocker (see [ADR-002](adr/002-distribution-and-update-channels.md) §6).
- **Deferred** (later signing wave — needs paid developer accounts / a decision; see [ADR-002](adr/002-distribution-and-update-channels.md) §6)
- Windows Authenticode/Store (MSIX) signing — Windows and Linux desktop currently ship UNSIGNED, so users bypass OS trust prompts manually. (macOS is now signed + notarized and iOS is distributed via TestFlight — see **Delivered** above.)
Expand All @@ -600,19 +600,19 @@ taxonomy are unchanged.
- [ ] 7.2 User documentation
- **Delivered** — the [user-guide hub](user/README.md) + [style guide](user/style-guide.md), and the guides: Getting Started, Dialect (flagship), Imports & migration, Backup & portability, Collection & search, Programs & matrix, Perform mode, Accessibility, Settings, FAQ & troubleshooting, and Glossary; plus an offline **in-app User Guide** (#233). (#219/#222/#223/#224/#229/#233/#239/#240/#243)
- **Remaining (blocked on other work)**
- Per-platform install page — unblocked now that 7.1 produces download links; still to draft.
- Per-platform install page — the public landing page ([site/](../site/), #408) now surfaces per-platform downloads, and the [Installation guide](user/installation.md) covers first-launch steps; a dedicated install page is optional.
- Screenshots pass — needs a runnable branded build.
- Beta-program page — tracked under 7.3.
- Optional hosted docs site — needs GitHub Pages enabled (see 7.1).
- Optional hosted docs site — Pages is enabled; rendering the user guides as a browsable site (beyond the landing page) is still optional.
- [ ] 7.3 Beta program with real callers; feedback triage
- **Delivered**
- Triage label taxonomy (`.github/labels.yml` + `label-sync.yml`) and structured issue forms — general feedback, import-source problem, beta check-in, plus revised bug/feature reports — with a Discussions + private-email contact config (#221).
- Triage label taxonomy (`.github/labels.yml` + `label-sync.yml`) and structured issue forms — general feedback, import-source problem, beta check-in, a **beta signup / "Join the beta"** form (#413), plus revised bug/feature reports — with a Discussions + private-email contact config (#221).
- Beta docs: [beta guide](beta/beta-guide.md), [test charter](beta/test-charter.md), [triage rubric](beta/triage-rubric.md) (#227); a [beta-recruitment plan](product/beta-recruitment.md); and CONTRIBUTING/README feedback hooks.
- **GitHub Discussions is enabled** (with categories), so the contact/community links resolve.
- **Remaining (maintainer ops)**
- Enable GitHub Discussions + categories (the contact link 404s until then).
- Confirm the feedback email/alias (config currently routes to the maintainer's address).
- **Deferred / blocked**
- Beta execution — recruit → run → interview → GA — waits on 7.1 builds, 7.2 Getting Started, and real callers.
- **In progress**
- Beta execution — recruit → run → interview → GA. Underway: builds ship for every platform (macOS signed + notarized and Android signed; Windows and Linux still unsigned; iPhone/iPad via TestFlight), the Getting Started guide is live, and invited callers are filing beta feedback against `v0.1.0-beta.x`. Remaining is the run → interview → GA arc with more real callers.

## Later milestones

Expand Down
41 changes: 22 additions & 19 deletions docs/beta/beta-guide.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,14 +44,14 @@ These parts of the app are built and ready for you to lean on:

Being honest about the state of things saves everyone time:

- **Installation is not packaged yet.** Signed, one-click installers for each
platform are the main remaining pre-release work (roadmap **Phase 7.1**). Until
those land, joining the beta means running a development build — see
[How to install](#how-to-install).
- **Some polish is unfinished.** A named-dialect library manager and a couple of
import sources (a hosted Caller's Box snapshot and the Caller's Companion binary
`.USR` migration) are still in progress. Everything else in the list above is
ready to use.
- **Signing and first-run steps vary by platform.** The **macOS** build is signed
with an Apple Developer ID and notarized, so it opens normally. The **Android**
APK is signed, but because it isn't on the Play Store you'll still grant a
one-time **"install unknown apps"** permission to sideload it. **Windows** isn't
code-signed yet, so **SmartScreen** shows a caution the first time you run it.
**Linux** has no signing prompt at all — you just mark the AppImage as runnable.
[How to install](#how-to-install) walks through each; code-signing for Windows is
planned for a later release.
- **You may hit bugs.** That is the point — when you do, tell us (see
[How to give feedback](#how-to-give-feedback)).

Expand Down Expand Up @@ -80,10 +80,15 @@ in more depth.

1. Read this guide and skim the [test charter](./test-charter.md) so you know the
kinds of things we are hoping you will try.
2. Say hello in
2. Fill out the **[Join the beta](https://github.com/ibanner56/CallersCompendium/issues/new?template=beta_signup.yml)**
form to tell us which platforms you call on. A free GitHub account is all you
need. **Heads-up: the signup issue is public**, so keep personal contact details
out of it — if you want an iPhone/iPad **TestFlight** invite, email the Apple ID
address it should go to privately to
[isaac@banner.is](mailto:isaac@banner.is) rather than posting it in the issue.
You can also just say hello in
[GitHub Discussions](https://github.com/ibanner56/CallersCompendium/discussions)
— introduce yourself, tell us where you call and on what devices, and we will
help you get set up. A free GitHub account is all you need.
if you would rather start with a conversation.
3. Install the app (below) and start using it for your real dances.

You can step back at any time, and you never have to share anything you would
Expand Down Expand Up @@ -130,14 +135,12 @@ Pick the channel that fits:
we can chat before anything becomes a formal request.

All of the issue forms live on the
[new-issue chooser](https://github.com/ibanner56/CallersCompendium/issues/new/choose).
The **Bug report** and **Feature request** forms are always available there; the
beta-specific forms above (**General feedback**, **Beta check-in**, and **Import
source problem**) join them as the beta program rolls out. If a form you are
looking for is not on the chooser yet, a **Bug report** or a
[Discussion](https://github.com/ibanner56/CallersCompendium/discussions) always
works in the meantime. Not sure which to pick? Start a Discussion — we will sort it
out together. Once you file something, a maintainer sorts it using the
[new-issue chooser](https://github.com/ibanner56/CallersCompendium/issues/new/choose):
**Bug report**, **Feature request**, **General feedback**, **Beta check-in**,
**Import source problem**, and **Join the beta** are all available there now. Not
sure which to pick? Start a
[Discussion](https://github.com/ibanner56/CallersCompendium/discussions) — we will
sort it out together. Once you file something, a maintainer sorts it using the
[triage rubric](./triage-rubric.md), so you can see how reports move from "just
arrived" to "fixed."

Expand Down
6 changes: 3 additions & 3 deletions docs/dev/releasing.md
Original file line number Diff line number Diff line change
Expand Up @@ -359,9 +359,9 @@ refresh anything the release changed:
- **Screenshots** — replace or add captures for changed UI (see
[`site/README.md`](../../site/README.md#adding-real-screenshots) for the capture
procedure).
- **Version fallbacks** — the static `v0.1.0-beta.2` strings in `index.html` are
only shown before the manifest fetch resolves; bump them at a major beta so the
pre-hydration flash matches.
- **Version fallbacks** — the static `v0.1.0-beta.<n>` string in `index.html`'s
version pill is only shown before the manifest fetch resolves; bump it at a major
beta so the pre-hydration flash matches the current release.

Commit those edits to `main` in the release prep PR; merging triggers
`pages-site.yml` and the page redeploys. To refresh the page **without** a code
Expand Down
13 changes: 6 additions & 7 deletions docs/product/beta-recruitment.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ A good beta cohort is small (roughly 10–25 active testers) and varied along th
axes that stress the app differently:

- **Experience** — from newer callers to veterans with big repertoires.
- **Platforms** — Linux, macOS, Windows, Android, and iOS/iPadOS, so packaging and
- **Platforms** — Linux, macOS, Windows, Android, and iOS/iPadOS, so installs and
Perform mode get exercised everywhere.
- **Calling context** — regular series callers, weekend/festival callers, and folks
who call occasionally, since they build programs and use Perform mode differently.
Expand Down Expand Up @@ -107,8 +107,8 @@ Fill in the bracketed bits. Keep links intact. Trim to fit each venue's norms.
>
> What I'm asking: use it for your own dances — ideally call at least one real gig
> with it — and tell me how it went. All feedback is voluntary and goes through
> GitHub. Installers are still being packaged, so early testers run a development
> build; I'll happily walk you through it.
> GitHub. Downloadable builds are ready for Linux, macOS, Windows, and Android
> (iPhone/iPad go out through TestFlight); I'll happily walk you through install.
>
> Interested? Start here: https://github.com/ibanner56/CallersCompendium/blob/main/docs/beta/beta-guide.md
> and say hello in Discussions: https://github.com/ibanner56/CallersCompendium/discussions
Expand Down Expand Up @@ -164,9 +164,8 @@ Fill in the bracketed bits. Keep links intact. Trim to fit each venue's norms.
> in.
>
> Since many of us call the same series, this is a great chance to try it at a real
> [region] dance and tell me what works on your device. Installers are still being
> packaged, so early testers run a development build — I'm glad to help you get set
> up.
> [region] dance and tell me what works on your device. Ready-to-install builds are
> available for every platform — I'm glad to help you get set up.
>
> Interested? Details are here:
> https://github.com/ibanner56/CallersCompendium/blob/main/docs/beta/beta-guide.md
Expand All @@ -179,7 +178,7 @@ Fill in the bracketed bits. Keep links intact. Trim to fit each venue's norms.

Every template says the same true things: the app is free, local-first, and
collects nothing; testers keep control of their data; and this is pre-release
software that still needs packaging. We do not oversell. Callers are a
software with rough edges we want reported. We do not oversell. Callers are a
tight-knit, generous community — the fastest way to earn their help is to be
straight with them.

Expand Down
2 changes: 1 addition & 1 deletion site/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ <h1>The caller's notebook, reimagined.</h1>
<a class="btn btn-ghost" href="#beta">Join the beta program</a>
</div>
<p class="hero-meta">
<span class="pill" id="hero-version">v0.1.0-beta.2</span>
<span class="pill" id="hero-version">v0.1.0-beta.3</span>
Comment thread
ibanner56 marked this conversation as resolved.
<span>Local-first</span><span aria-hidden="true">·</span>
<span>No telemetry</span><span aria-hidden="true">·</span>
<span>Works fully offline</span><span aria-hidden="true">·</span>
Expand Down