Repository navigation
InnoRouter 7.0.0
·
8 commits
to main
since this release
Immutable
release. Only release title and notes can be modified.
InnoRouter 7.0.0 ships the validated package state from the tagged commit.
Documentation
Changes
7.0.0 was published on 2026-10-08 after exact-tag release validation. PR54 work is carried forward
without a separate 6.1.1 release. See the 7.0 migration guide
and release checklist.
Current native scene probes passed at the SHA recorded in the
Xcode 27 report; this does not establish
every historical environment cause of the vision-cancel K1 failure.
Added
- Library-owned Codex and Claude Code skill for planned stable 7.0.x, with
navigation guidance and an independently validated consumer pinned to an
unreleased main commit. This does not qualify a published 7.0.0 tag.
Breaking
- RouterState is externally read-only; construct validated values with RouterStateDraft.
- Restoring or replacing owned topology expires prior scope execution lifetimes.
- Authorization generation and catalog contracts are explicit; inspect the 7.0 guides.
- Input-bearing Store factories and tab/split host construction throw on invalid
state, resource settings, or renderer declarations. Configure an independent
host descriptor before mounting; it freezes root shape and root meaning.
Handle setup errors explicitly. Existing stackRouterHost(store:)and
UIKit/AppKit bridge factories remain nonthrowing. - Preserve retired tab branches explicitly with
.preserveDormantand apply
RouterTabRestorationTopologybefore admission when the catalog changes.
A preserved branch cannot become a selected renderer. Replace topology and
its declaration atomically through the owning Store'sreplaceHostoperation.
Fixed
- visionOS bound immersive declarations carry activation identity through native
appearance. Recovery adopts only a matching, still-valid activation after an
open failure; stale, foreign, cancelled, and replaced activations have no
recovery authority. Bound scene and Store identities must remain stable.
Regression probes validate attributed recovery, but do not reproduce a real
OS open error followed by a late physical appearance or establish its cause. - A queued immersive restoration failure revalidates its restoration ticket
before repairing canonical state. A matching appearance or a newer attempt
invalidates the old repair; a genuine open failure still removes the scene. - The performance smoke explicitly admits its existing 500-route snapshot
workload with a finite budget. Default limits, workload size, iteration counts,
and timing thresholds remain unchanged; admission self-tests reject overflow. - Native stack and recursive child hosts now render typed alerts and
confirmation dialogs through UIKit, AppKit, and WatchKit adapters. Captured
lifetime handles fence stale callbacks; rejection/deferral re-presents a fresh
attempt, explicit cancel returns its declared value, and iPad outside dismissal
remains distinct. See the Xcode 27 validation report for executed coverage. - Generated scenario tests call throwing Store factories correctly. The new
pending-link flag is namedisRevalidationRequired; its existing transport key
remainsrequiresRevalidation. - Deferred visionOS immersive-space closure restores through the surviving
scene driver, avoiding open requests from the disappearing scene's invalid
SwiftUI context. Driver replacement and stale-open compensation preserve
the existing canonical lifetime protections.
PR54 groundwork originally planned for 6.1.1 (not separately released)
Fixed
@TabItemno longer changes a backticked tab's persisted scope when a
sibling tab declaresid:. Without anyid:,routerScopeIDis
RouterScopeID(rawValue), which Swift spells without backticks. A sibling
id:switches every case to a string literal, and that literal kept the
author's backticks, socase `default`persisted as`default`
beside an explicit ID and asdefaultwithout one. Duplicate detection
(E009) compared the backticked spelling too and missed a sibling
id: "default". The default ID is now the unescaped case name in both
paths. Routers without a backticked tab case expand unchanged. A 6.1.0
snapshot that stored the backticked spelling restores that branch as an
orphan; keep the old identity with an explicitid:that spells it.- Tab link planning no longer reports an applied push into an invisible,
retired branch. In the final 7.0 contract, explicit restoration topology
resolves retired selections before admission and the frozen host declaration
rejects an incompatible renderer. Default links use the admitted selection. RouterTabHost(store:),RouterSplitHost(store:), and
RouterThreeColumnSplitHost(store:)no longer abort the process when the
Store's declaration or root is incompatible with the renderer. The final 7.0
constructors throw a typed validation error instead of adopting a fallback
catalog, root, or empty scope. Ordinary restoration retains the configured
host contract; an intentional topology/root-meaning change uses atomic
replaceHost. Hosts never register or rewrite the Store's declaration.RouterRestorationDriverapplies itsRouterSnapshotRecoveryPolicyto a
typed storage rejection.RouterFileSnapshotStorage(maximumByteCount:)
rejects an oversized file before the codec reads it, and activation failed
on every launch even with.use, although the codec's own limit error
reached the policy..usenow receives the storage's
RouterSnapshotErrorand submits the fallback as the restore request
through normal policies, so inspecttransitionas for any restore;
.failstill fails activation and preserves the file. An untyped storage error still fails
activation, and the partial-validation driver still applies no recovery.- The macro plugin no longer uses an exhaustive
switchover a swift-syntax
enum. Built with library evolution — a Release build with
BUILD_LIBRARY_FOR_DISTRIBUTION, as in the platform gates — swift-syntax
604's accessor enum is resilient, and the plugin failed to compile. An
accessor shape a later swift-syntax adds is rejected as not get-only.
Changed
Package.swiftadmitsswift-syntax"603.0.2"..<"605.0.0", adding the
604 line that Xcode 27 / Swift 6.4 pairs with, so an application whose
other macro packages require 604 resolves InnoRouter. The committed
resolution is 604.0.0 (050f1a346fbbac0ca2cfb15a95274f7bd1cf0ccf).
603.0.2 is the supported dependency floor, not the current lock pin.- A new
xcode-27CI job runs the package tests with Xcode 27, re-resolves
the newest admitted swift-syntax, runs both macro suites against it, and
builds the macro-first consumer with library evolution. It is a forward
lane on GitHub's preview image, not a release pin. - Simulator jobs boot through
scripts/boot-simulator.py, which shuts down,
erases, and retries a device whose boot never completes, up to three
attempts. A stuck boot failed the 6.1.0 release run's visionOS job. - Failed simulator test jobs print every assertion their result bundle
recorded;-quietoutput named the failing test only. The native scene
evidence upload runs only when its probe ran, so a missing log no longer
buries an earlier failure. - The Inspector UI localization test is split into three scenarios that each
launch a fresh probe, and one-time reads became predicate waits with the
same timeouts. No retry was added and no Inspector assertion was removed. RELEASING.mdclassifies adding a case to an existing public enum as
breaking. SwiftPM clients compile InnoRouter without library evolution, so
every public enum is exhaustive to them, whether or not it is@frozen.
Known issues
- 6.1.0 added
RouterSnapshotError.invalidByteLimit,.encodedDataTooLarge,
and.payloadTooLargeunder the previous release policy. A clientswitch
overRouterSnapshotErrorwithoutdefaultstops compiling when it moves
from 6.0 to 6.1. The cases remain, because removing them would break 6.1.0
clients again; handle them or add adefaultbranch.
What's Changed
- chore(ci): bump softprops/action-gh-release from 3.0.2 to 3.0.3 by @dependabot[bot] in #45
- chore(ci): bump actions/checkout from 7.0.0 to 7.0.1 by @dependabot[bot] in #44
- docs: strengthen maintainer verification rules by @Ethan-IS in #52
- ci: standardize selective validation and safe public operations by @Ethan-IS in #55
- fix: isolate metadata CI and restore deferred immersive scenes by @Ethan-IS in #57
- fix(ci): 메타데이터 검증과 aggregate 전환 절차 보강 by @Ethan-IS in #58
- Prepare InnoRouter 7.0 host candidate with Xcode 27 native validation by @Ethan-IS in #60
- fix: fence native restoration repairs and prepare 7.0.0 candidate by @Ethan-IS in #61
- Diagnose native immersive repair ordering for 7.0 by @Ethan-IS in #62
- Fix attributed visionOS immersive restoration by @Ethan-IS in #63
- docs: unify GitHub Sponsors and Patreon links by @Ethan-IS in #64
- docs: finalize 7.0.0 release date and recovery notes by @Ethan-IS in #65
- feat: InnoRouter 7.0.x 예정 API용 라이브러리 소유 AI 스킬 추가 by @Ethan-IS in #66
- docs: include merged skill notes in 7.0.0 release cut by @Ethan-IS in #67
Full Changelog: 6.1.0...7.0.0