v0.2.1
Changelog · previous…v0.2.1
Added
rw align— compare two native ports of the same product (e.g. iOS in Swift and Android in Kotlin), with no shared git history, and surface parity gaps. Builds a feature ledger for each side, runs a semantic matcher that classifies each pairing aspaired/equivalent/gap_on_a/gap_on_b/ambiguouswith a confidence score, drafts tracker-agnostic issues for confirmed gaps, and (with--matrix) renders a filterable HTML parity matrix you can open in your browser. Ships with a built-in Apple↔Google equivalence table (Apple Pay/Google Pay, StoreKit/Play Billing, Keychain/Keystore, HealthKit/Health Connect, APNs/FCM, iCloud/Drive, WidgetKit/Glance, SwiftUI/Compose, Core Data/Room, Combine/Flow, TestFlight/Play Internal Testing, Sign in with Apple/Google Sign-In). Per-product[[product.parity.equivalent]]entries extend the table;--confirm <match-id>writes back to it. Configure a port pair intestthese.toml([product.ports]) and runrw align --product <id>— or pass--with <path>/--a <path> --b <path>for ad-hoc runs.rw align --matrix— the filterable HTML parity matrix (FRD §9.1). Two-column layout with status chips, confidence pills, filter chips at the top, drafted issues with copy buttons at the bottom. Same PG-blog aesthetic as the rest ofrw's--htmlsurfaces.--matrix-out <path>overrides the default;--open-matrixlaunches the file in your default browser.--pageis an alias for--matrix.rw align --issues <format>— tracker-flavored wrappers around the canonical markdown issue body.markdown(default, the source),linear(h1 title +Labels:line),github(Title:/Labels:prefixes that pipe cleanly intogh issue create),jira(wiki markup:h2.,*bold*,{{code}},*bullets). Pure formatters — no API calls, no posting.rw align --confirm <match-id>— promote anequivalentorambiguousmatch into the curated parity map by appending a[[product.parity.equivalent]]block totestthese.toml. Idempotent on the(a, b)lowercase tuple. The matcher stops re-flagging confirmed pairs on the next run.rw align --ledger-only— skip the semantic matcher and emit only the per-port ledgers. Deterministic, offline, key-free — useful when you want to see what each side claims without spending a model call.- Built-in Apple↔Google equivalence table with 12 canonical pairs. Merges case-insensitively with per-product curated entries; the product's note wins on duplicates.
rw align --provider skill— key-free path.rwbuilds both ledgers, prints the matcher envelope; your host agent (Claude Code, Cowork) returns the match results..github/workflows/notify-novarch.yml— fires arepository_dispatchevent atyohannescodes/novarch.lolon everyv*tag push so the site can sync release links automatically. SetNOVARCH_DISPATCH_TOKENin repo secrets to activate; the workflow fails fast with a clear error if the secret isn't set.
Changed
- The release flow now also includes the workflow notification — once
NOVARCH_DISPATCH_TOKENis configured, tag pushes automatically trigger the site sync. Manualworkflow_dispatchlets you re-fire for an existing tag without re-tagging. rw align's HTML and JSON flag names use subcommand-unique spellings to avoid being shadowed by the root command's--html/--json:--matrix(with--pagealias) and--emit-jsonrespectively.rw help alignandGUIDE.mddocument the why.
Fixed
- Skill mode for
rw alignnow raises a clean validation error when combined with--matrixor--confirm(rwdoesn't see the agent's match results in skill mode, so neither flag can do meaningful work). Previously these would have silently produced empty/incorrect output; now the failure mode is loud and immediate.
Generated by recap-wins via rw notes --changelog.