Releases: ConnectivityChris/harbormaster
Releases · ConnectivityChris/harbormaster
v0.5.1 — 2026-05-01
Documentation
scripts/preflight.shfailure-path guidance hardened. Every Android warning (adbmissing,ANDROID_HOMEunset,emulatormissing, no AVDs configured) now prints a concreteFix:command plus aSee: references/android-setup.mdpointer;ANDROID_HOMEpreviously had noFix:line at all. iOS warnings gainedSee: references/ios-setup.md. Xcode warning now includes the App Store URL inline. Maestro install branch now references the official install docs URL alongside the existing curl + brew commands. No behaviour change to exit codes or success path — purely additive guidance on the failure paths.README.mdPrerequisites section now links its own setup docs and inlines the Maestro install commands (curl + brew), so users hitting an install gap don't have to run preflight first to discover the fix. Each prerequisite now links to its source (Xcode App Store, Maestro docs, Android Studio download) and to the relevantreferences/*-setup.md.references/ios-setup.mdandreferences/android-setup.md— linked "Mac App Store" and "Android Studio" inline to their official download pages.
v0.5.0 — 2026-05-01
Added
- Android-only setups now supported.
scripts/preflight.shpreviously hard-required iOS (Xcode + simulator); it now succeeds if at least one of iOS or Android is fully usable. The script's final line readsPlatforms usable: iOS + Android,iOS only, orAndroid onlyso downstream steps can constrain themselves. Maestro is the only universally required tool. - Cross-platform-safe state reset in flow templates.
references/flow-examples/login.yaml,references/writing-flows.md, andreferences/authoring-flows.mdnow gateclearKeychainbehindrunFlow: when: platform: iOSso Android runs are warning-free;launchApp clearState: truehandles Android session reset (clears SharedPreferences / Room / SQLite / EncryptedSharedPreferences — where RN credential libraries land tokens on Android). Documents the rare edge case (raw Android Keystore aliases that surviveclearState).
Changed
scripts/boot-sims.shaligned withscripts/run-flows.shfor--platform both. Previouslyboot_ios && boot_androidshort-circuited the Android boot if iOS failed; now both attempt independently and the script exits with the union of failures, matchingrun-flows.sh's design. Switchedset -eu→set -uso failures surface via explicit return-code checks.scripts/boot-sims.shAndroid boot loop now bounded. A 180-second timeout plus emulator-process liveness check replaces the previous unboundedwhile sys.boot_completed != 1loop — a crashed AVD can no longer hang the script indefinitely.skills/harbormaster/SKILL.mdpreflight contract + platform defaults updated. Step 1 documents thePlatforms usable: …line and the new exit-0-on-either-platform contract. Step 2 platform default rules now key off the preflight verdict (iOS + Android→both,iOS only→ios,Android only→android) so the skill doesn't silently default to a platform that will fail at boot.skills/harbormaster/SKILL.md--platform bothorchestration tightened. Step 3 (device picker) now explicitly handles "one of each" selection when both platforms are requested. Step 5 (install) documents the per-platform invocation loop required for--platform bothand warns that Expo Go's per-platform bundle ID divergence (host.exp.Exponentvshost.exp.exponent) makes it incompatible with a single--env APP_ID=…value — recommends dev builds forbothruns.
Fixed
scripts/run-flows.shno longer crashes withTAG_ARGS[@]: unbound variablewhen invoked without--include-tagsor--envflags. The${arr[@]}syntax errors under/bin/bash3.2 (macOS system bash) +set -ufor empty arrays; replaced with the${arr[@]+"${arr[@]}"}idiom at all four call sites in themaestro testinvocation. Bug surfaced during dogfooding.
Repository hygiene
.gitignorenow excludes/*.pngat repo root — guards against Maestro'stakeScreenshot:step accidentally depositing screenshots in the repo when bench-running flows from this directory.SPIKES.mdparallel-sharding entry replaced with a parked summary preserving the bench numbers (176 s sequential → 104 s sharded, 40 % improvement) and Q1/Q2/Q4 findings. Sequential implementation remains; the spike documents why parking is justified at current usage and what would need to change if it's revived.
v0.4.0 — 2026-04-30
Changed
- Plugin renamed from
mobile-flow-runnertoharbormaster. New install handle:/plugin install harbormaster@connectivity. The plugin's responsibilities, slash commands (/initflow,/buildsuite,/authorflow,/stabiliseflow), scripts, and references are unchanged — this is purely a name migration. - Marketplace renamed from
connectivity-christoconnectivityin the same release; the-chrissuffix was redundant once theownerfield already credits the maintainer. Both renames land together so users only have to migrate once. - GitHub repository moved to
ConnectivityChris/harbormaster. The oldmobile-flow-runnerURL redirects via GitHub for cloned-repo discovery, but pinned marketplace installs againstConnectivityChris/mobile-flow-runner@vX.Y.Zshould be updated. skills/mobile-flow-runner/→skills/harbormaster/(withgit mvso history follows).plugin.jsonname,repository, andskillspaths updated to reflect the new identity.marketplace.jsonplugin entry renamed.- README, CLAUDE.md, command files, scripts, and the project README template updated to use the new name. Historical CHANGELOG entries (v0.3.0 and earlier) intentionally retain the old name — they describe what shipped at the time.
- JUnit
--test-suite-nameprefix inscripts/run-flows.shupdated frommobile-flow-runner-…toharbormaster-….
Migration notes
For existing users with the plugin pinned to a mobile-flow-runner version: remove the old install (/plugin uninstall mobile-flow-runner@connectivity-chris) and re-add via the new handle (/plugin marketplace add ConnectivityChris/harbormaster && /plugin install harbormaster@connectivity). Project-level .maestro/ directories created by /initflow are unaffected — they don't reference the plugin name.
v0.3.0 — 2026-04-30
Added
/buildsuiteslash command — fourth lifecycle command for building a core suite of flows in a single session. Walks the running app once with the user (a guided tour), builds a shared selector + screen plan persisted to<project>/.maestro/.tour-plan.json, then loops over each planned flow with a per-flow[yes / skip / stop]checkpoint to compose, run, and commit. Reuses/initflow's project-discovery logic and/authorflow's Phase D-F conventions. Full design indocs/superpowers/specs/2026-04-30-buildsuite-design.md; depth doc inreferences/building-suites.md.references/building-suites.md— depth doc for/buildsuite(five phases, plan schema, coverage-checklist UX, edge cases).
Changed
references/authoring-flows.md— extracted a shared "Project discovery (shared)" section, now reused by both/initflowand/buildsuite(refactor; meaning preserved)./initflownow writes.maestro/.tour-plan.jsonand.maestro/.tour-plan.archive.jsonto the project's.gitignorealongside the existingartifacts/andauthoring-evidence/entries.references/maestro-readme-template.md— project READMEs scaffolded by/initflownow reference/buildsuiteand the.tour-plan.jsonartefact.README.mdandskills/mobile-flow-runner/SKILL.md— refreshed lifecycle docs to describe four slash commands instead of three.
v0.2.2 — 2026-04-30
Fixed
scripts/run-flows.shnow passes--debug-outputand--flatten-debug-outputso screenshots, video, and therun.logactually land in<project>/.maestro/artifacts/<run-id>/<platform>/— previously onlyreport.xmlwas written there while screenshots/recordings went to Maestro's default location, contradicting the docs.--format junitupgraded to canonical--format JUNIT(uppercase) per Maestro CLI help.- Selector priority in
references/writing-flows.mdcorrected totestID > accessibilityLabel > text > coords. Previous wording inverted the order, contradictingSKILL.mdand Maestro's own guidance. references/flow-examples/app-launch.yamldefaults tolaunchApp: { clearState: true }(the regression-suite path) rather thanopenLink: ${PROJECT_URL}(the Expo Go path). Users on native dev builds no longer need to mutate the starter flow.references/flow-examples/view-list.yamlnow starts withlaunchAppso it can run standalone, and tagsnavigationin addition tosmoke.scripts/install-app.shaccepts--source installedas a documented no-op, matching the SKILL.md decision tree.scripts/boot-sims.shemits a[warn]line when falling back to a default UDID/AVD because no--ios-udid/--avdwas passed.jqfilter formaestro hierarchynow includesaccessibility-label. Previous filter dropped iOS-only labels, hiding selector-priority #2 elements.- README status bumped from v0.1.0 to v0.2.1; versioning section now documents both HEAD and tag-pinned install paths to match
CLAUDE.md.
Added
scripts/run-flows.shaccepts--include-tagsand--exclude-tags, surfacing Maestro's tag-filtering through the skill (flows already tagsmoke/auth/navigation).scripts/run-flows.shpasses--test-suite-nameso JUnit consumers see a meaningful suite identifier per platform per run.references/flow-examples/config.yaml— Maestro workspace config template./initflowscaffolds it alongside the existingconfig.json(the skill's config). Two files with overlapping names but different owners; both belong under<project>/.maestro/.SPIKES.md— parked future-work that needs a real bench test (currently: parallel iOS+Android execution viamaestro --device a,b --shard-split 2).
Removed
- Stray references to CI / Maestro Cloud as recommended fallbacks. The plugin is local-only and shouldn't pretend otherwise.
v0.2.1 — 2026-04-29
Fixed
- Plugin install error
Path escapes plugin directory: ./ (skills)—SKILL.mdmoved from plugin root toskills/mobile-flow-runner/SKILL.md, matching the current Claude Code plugin loader's expected layout.plugin.jsonskillsfield now points at the subdirectory rather than./.
v0.2.0 — 2026-04-29
Added
- Three slash commands wrapping the flow lifecycle:
/initflow— one-time project bootstrap; discovers screens, grep-detects auth, scaffolds.maestro/{config.json, README.md, app-launch.yaml, login.yaml?}with project values substituted/authorflow [flow-name]— phased loop (Discover → Interview → Walk-the-screens → Compose → Run once → Commit + index README); captures one screenshot +maestro hierarchyper step; one-run stability bar/stabiliseflow <flow> [N]— runs an existing flow N times consecutively (default 3) to detect flakiness; diagnoses non-deterministic failures rather than blindly rerunning
references/authoring-flows.md— process guide for the phased authoring loop (separate fromwriting-flows.mdwhich remains the syntax reference)references/maestro-readme-template.md— fixed onboarding-doc template for<project>/.maestro/README.md<project>/.maestro/authoring-evidence/<flow>/— gitignored directory for Phase C screenshots, persisted as future debugging evidence
Changed
SKILL.md"Authoring flows" section rewritten to point at the three slash commands and the new authoring reference; the four-step ad-hoc pattern is removed in favour of the phased loop- Token-efficient debug tiering documented in
SKILL.mdstep 8 andreferences/troubleshooting.md: Tier 0 logs → Tier 1maestro hierarchy→ Tier 2 screenshot → Tier 3 video, in that order maestro studiorepositioned as user-only (interactive browser inspector); Claude defaults tomaestro hierarchyfor selector inspection