diff --git a/.grok/skills/waykin-ar-debug/references/REPO_CONTEXT.md b/.grok/skills/waykin-ar-debug/references/REPO_CONTEXT.md
index cd82f23..9d3cf1d 100644
--- a/.grok/skills/waykin-ar-debug/references/REPO_CONTEXT.md
+++ b/.grok/skills/waykin-ar-debug/references/REPO_CONTEXT.md
@@ -4,7 +4,7 @@ Read this once at skill start. Prefer absolute repo paths from `git rev-parse --
## Product
-- Audio-first **walking** companion app (Lira). Solo MVP.
+- AR-designed **walking** companion app (Lira). Solo MVP. Movement is gameplay authority; AR is the primary designed session surface when capable; audio is a required supporting channel.
- Binding scope: `docs/SOLO_MVP_SCOPE.md`, `WAYKIN_SPEC.md`, `ARCHITECTURE.md`, `AGENTS.md`, `docs/governance/DOCUMENT_AUTHORITY.md`.
- One activity: walking. Not run/cycle expansion without scope promotion.
diff --git a/.grok/skills/waykin-audio/SKILL.md b/.grok/skills/waykin-audio/SKILL.md
index f8f59e6..8e6c1fe 100644
--- a/.grok/skills/waykin-audio/SKILL.md
+++ b/.grok/skills/waykin-audio/SKILL.md
@@ -12,7 +12,7 @@ metadata:
# waykin-audio
-Waykin is **audio-first**. Semantic cues are Core; filenames and AVAudioSession are App.
+Waykin is **AR-designed**, with audio as a required supporting channel for presence, accessibility, safety, and pocket use. Semantic cues are Core; filenames and AVAudioSession are App.
## 0. Ownership
diff --git a/.grok/skills/waykin-audio/references/REPO_CONTEXT.md b/.grok/skills/waykin-audio/references/REPO_CONTEXT.md
index cd82f23..9d3cf1d 100644
--- a/.grok/skills/waykin-audio/references/REPO_CONTEXT.md
+++ b/.grok/skills/waykin-audio/references/REPO_CONTEXT.md
@@ -4,7 +4,7 @@ Read this once at skill start. Prefer absolute repo paths from `git rev-parse --
## Product
-- Audio-first **walking** companion app (Lira). Solo MVP.
+- AR-designed **walking** companion app (Lira). Solo MVP. Movement is gameplay authority; AR is the primary designed session surface when capable; audio is a required supporting channel.
- Binding scope: `docs/SOLO_MVP_SCOPE.md`, `WAYKIN_SPEC.md`, `ARCHITECTURE.md`, `AGENTS.md`, `docs/governance/DOCUMENT_AUTHORITY.md`.
- One activity: walking. Not run/cycle expansion without scope promotion.
diff --git a/.grok/skills/waykin-build/references/REPO_CONTEXT.md b/.grok/skills/waykin-build/references/REPO_CONTEXT.md
index cd82f23..9d3cf1d 100644
--- a/.grok/skills/waykin-build/references/REPO_CONTEXT.md
+++ b/.grok/skills/waykin-build/references/REPO_CONTEXT.md
@@ -4,7 +4,7 @@ Read this once at skill start. Prefer absolute repo paths from `git rev-parse --
## Product
-- Audio-first **walking** companion app (Lira). Solo MVP.
+- AR-designed **walking** companion app (Lira). Solo MVP. Movement is gameplay authority; AR is the primary designed session surface when capable; audio is a required supporting channel.
- Binding scope: `docs/SOLO_MVP_SCOPE.md`, `WAYKIN_SPEC.md`, `ARCHITECTURE.md`, `AGENTS.md`, `docs/governance/DOCUMENT_AUTHORITY.md`.
- One activity: walking. Not run/cycle expansion without scope promotion.
diff --git a/.grok/skills/waykin-device-testing/references/REPO_CONTEXT.md b/.grok/skills/waykin-device-testing/references/REPO_CONTEXT.md
index cd82f23..9d3cf1d 100644
--- a/.grok/skills/waykin-device-testing/references/REPO_CONTEXT.md
+++ b/.grok/skills/waykin-device-testing/references/REPO_CONTEXT.md
@@ -4,7 +4,7 @@ Read this once at skill start. Prefer absolute repo paths from `git rev-parse --
## Product
-- Audio-first **walking** companion app (Lira). Solo MVP.
+- AR-designed **walking** companion app (Lira). Solo MVP. Movement is gameplay authority; AR is the primary designed session surface when capable; audio is a required supporting channel.
- Binding scope: `docs/SOLO_MVP_SCOPE.md`, `WAYKIN_SPEC.md`, `ARCHITECTURE.md`, `AGENTS.md`, `docs/governance/DOCUMENT_AUTHORITY.md`.
- One activity: walking. Not run/cycle expansion without scope promotion.
diff --git a/.grok/skills/waykin-healthkit/references/REPO_CONTEXT.md b/.grok/skills/waykin-healthkit/references/REPO_CONTEXT.md
index cd82f23..9d3cf1d 100644
--- a/.grok/skills/waykin-healthkit/references/REPO_CONTEXT.md
+++ b/.grok/skills/waykin-healthkit/references/REPO_CONTEXT.md
@@ -4,7 +4,7 @@ Read this once at skill start. Prefer absolute repo paths from `git rev-parse --
## Product
-- Audio-first **walking** companion app (Lira). Solo MVP.
+- AR-designed **walking** companion app (Lira). Solo MVP. Movement is gameplay authority; AR is the primary designed session surface when capable; audio is a required supporting channel.
- Binding scope: `docs/SOLO_MVP_SCOPE.md`, `WAYKIN_SPEC.md`, `ARCHITECTURE.md`, `AGENTS.md`, `docs/governance/DOCUMENT_AUTHORITY.md`.
- One activity: walking. Not run/cycle expansion without scope promotion.
diff --git a/.grok/skills/waykin-performance/references/REPO_CONTEXT.md b/.grok/skills/waykin-performance/references/REPO_CONTEXT.md
index cd82f23..9d3cf1d 100644
--- a/.grok/skills/waykin-performance/references/REPO_CONTEXT.md
+++ b/.grok/skills/waykin-performance/references/REPO_CONTEXT.md
@@ -4,7 +4,7 @@ Read this once at skill start. Prefer absolute repo paths from `git rev-parse --
## Product
-- Audio-first **walking** companion app (Lira). Solo MVP.
+- AR-designed **walking** companion app (Lira). Solo MVP. Movement is gameplay authority; AR is the primary designed session surface when capable; audio is a required supporting channel.
- Binding scope: `docs/SOLO_MVP_SCOPE.md`, `WAYKIN_SPEC.md`, `ARCHITECTURE.md`, `AGENTS.md`, `docs/governance/DOCUMENT_AUTHORITY.md`.
- One activity: walking. Not run/cycle expansion without scope promotion.
diff --git a/.grok/skills/waykin-pr-review/references/REPO_CONTEXT.md b/.grok/skills/waykin-pr-review/references/REPO_CONTEXT.md
index cd82f23..9d3cf1d 100644
--- a/.grok/skills/waykin-pr-review/references/REPO_CONTEXT.md
+++ b/.grok/skills/waykin-pr-review/references/REPO_CONTEXT.md
@@ -4,7 +4,7 @@ Read this once at skill start. Prefer absolute repo paths from `git rev-parse --
## Product
-- Audio-first **walking** companion app (Lira). Solo MVP.
+- AR-designed **walking** companion app (Lira). Solo MVP. Movement is gameplay authority; AR is the primary designed session surface when capable; audio is a required supporting channel.
- Binding scope: `docs/SOLO_MVP_SCOPE.md`, `WAYKIN_SPEC.md`, `ARCHITECTURE.md`, `AGENTS.md`, `docs/governance/DOCUMENT_AUTHORITY.md`.
- One activity: walking. Not run/cycle expansion without scope promotion.
diff --git a/.grok/skills/waykin-release/SKILL.md b/.grok/skills/waykin-release/SKILL.md
index dc8996e..b24f188 100644
--- a/.grok/skills/waykin-release/SKILL.md
+++ b/.grok/skills/waykin-release/SKILL.md
@@ -51,7 +51,7 @@ make check-lira-usdz
Read and confirm present:
- `docs/legal/PRIVACY.md`, `TERMS.md`, `SAFETY.md`, `NOTICES.md`
-- `LICENSE` Apache-2.0
+- `LICENSE` Proprietary (Zero State)
- Usage descriptions: Location When-In-Use, Camera, Health share
- No background location entitlement unless product explicitly adds it (MVP: foreground walk only)
diff --git a/.grok/skills/waykin-release/references/REPO_CONTEXT.md b/.grok/skills/waykin-release/references/REPO_CONTEXT.md
index cd82f23..9d3cf1d 100644
--- a/.grok/skills/waykin-release/references/REPO_CONTEXT.md
+++ b/.grok/skills/waykin-release/references/REPO_CONTEXT.md
@@ -4,7 +4,7 @@ Read this once at skill start. Prefer absolute repo paths from `git rev-parse --
## Product
-- Audio-first **walking** companion app (Lira). Solo MVP.
+- AR-designed **walking** companion app (Lira). Solo MVP. Movement is gameplay authority; AR is the primary designed session surface when capable; audio is a required supporting channel.
- Binding scope: `docs/SOLO_MVP_SCOPE.md`, `WAYKIN_SPEC.md`, `ARCHITECTURE.md`, `AGENTS.md`, `docs/governance/DOCUMENT_AUTHORITY.md`.
- One activity: walking. Not run/cycle expansion without scope promotion.
diff --git a/.grok/skills/waykin-ui-review/references/REPO_CONTEXT.md b/.grok/skills/waykin-ui-review/references/REPO_CONTEXT.md
index cd82f23..9d3cf1d 100644
--- a/.grok/skills/waykin-ui-review/references/REPO_CONTEXT.md
+++ b/.grok/skills/waykin-ui-review/references/REPO_CONTEXT.md
@@ -4,7 +4,7 @@ Read this once at skill start. Prefer absolute repo paths from `git rev-parse --
## Product
-- Audio-first **walking** companion app (Lira). Solo MVP.
+- AR-designed **walking** companion app (Lira). Solo MVP. Movement is gameplay authority; AR is the primary designed session surface when capable; audio is a required supporting channel.
- Binding scope: `docs/SOLO_MVP_SCOPE.md`, `WAYKIN_SPEC.md`, `ARCHITECTURE.md`, `AGENTS.md`, `docs/governance/DOCUMENT_AUTHORITY.md`.
- One activity: walking. Not run/cycle expansion without scope promotion.
diff --git a/.grok/skills/waykin-validate/references/REPO_CONTEXT.md b/.grok/skills/waykin-validate/references/REPO_CONTEXT.md
index cd82f23..9d3cf1d 100644
--- a/.grok/skills/waykin-validate/references/REPO_CONTEXT.md
+++ b/.grok/skills/waykin-validate/references/REPO_CONTEXT.md
@@ -4,7 +4,7 @@ Read this once at skill start. Prefer absolute repo paths from `git rev-parse --
## Product
-- Audio-first **walking** companion app (Lira). Solo MVP.
+- AR-designed **walking** companion app (Lira). Solo MVP. Movement is gameplay authority; AR is the primary designed session surface when capable; audio is a required supporting channel.
- Binding scope: `docs/SOLO_MVP_SCOPE.md`, `WAYKIN_SPEC.md`, `ARCHITECTURE.md`, `AGENTS.md`, `docs/governance/DOCUMENT_AUTHORITY.md`.
- One activity: walking. Not run/cycle expansion without scope promotion.
diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md
index a254d34..9c0c0c0 100644
--- a/ARCHITECTURE.md
+++ b/ARCHITECTURE.md
@@ -1,6 +1,6 @@
# Waykin Architecture
-Waykin is currently a solo-developer MVP vertical slice, not a platform. The architecture is bounded around one walking loop and five primary runtime systems.
+Waykin is an AR-designed solo-developer MVP vertical slice, not a platform. Movement remains gameplay authority. AR is the primary designed session surface when capability allows, while audio, 2D presence, map, and HUD are supporting presentation channels over the same semantic state.
## Runtime Flow
@@ -36,10 +36,11 @@ SessionMemory + Bond
- Movement Engine: owns session transitions, elapsed and active time, distance, speed, route points, simulation, and accepted real walking samples.
- World State: derives serializable session context from local movement signals, Bond, time context, familiarity, energy, and pressure.
- Event Generator: emits zero or one deterministic semantic event per tick using a seeded, weighted, cooldown-aware configuration.
-- Companion presentation matrix: single source for behavior + relative distance + AR presentation string mapping (`CompanionPresentationMatrix`).
+- Companion presentation matrix: single source for behavior + relative distance + shared presentation mapping (`CompanionPresentationMatrix`).
- Companion Runtime: applies experience commands (and event overlays) into Lira’s small behavior vocabulary.
- Audio Experience Layer: maps world events and companion behavior transitions onto the seven semantic cue kinds (priority + cooldown); path soft cues use the same kinds via `PathAudioCoupling` when event/behavior audio is silent.
-- App Audio Adapter: maps cue kinds to bundled produced WAVs, enforces a two-channel playback bound, and owns Apple audio-session lifecycle behavior.
+- AR Presentation Adapter: maps semantic state through `ARWorldCommand` into the primary designed session surface on capable devices without owning gameplay truth.
+- App Audio Adapter: maps cue kinds to bundled produced WAVs, enforces a two-channel playback bound, and owns pocket-safe Apple audio-session lifecycle behavior.
- Path progress: semantic on-path / strained / offPath presentation (not navigation).
Persistence supports Bond and concise memories. It is not a generalized backend or content platform.
diff --git a/App/AppAudioCuePlayer.swift b/App/AppAudioCuePlayer.swift
index 948a481..16845fb 100644
--- a/App/AppAudioCuePlayer.swift
+++ b/App/AppAudioCuePlayer.swift
@@ -148,7 +148,7 @@ extension AVAudioSession: AudioSessionControlling {
}
func configureAmbientMixing() throws {
- // `.playback`, not `.ambient`. Waykin is an audio-first walking experience:
+ // `.playback`, not `.ambient`. Audio is a required pocket-safe supporting channel:
// - `.ambient` is silenced by the hardware ring/silent switch (cues inaudible).
// - `.ambient` stops on backgrounding, so audio died whenever the screen locked
// or the phone went in a pocket — i.e. during the actual walk.
diff --git a/App/Info.plist b/App/Info.plist
index d0d9b9b..0dbfec6 100644
--- a/App/Info.plist
+++ b/App/Info.plist
@@ -34,7 +34,7 @@
UIApplicationSupportsIndirectInputEvents
-
UIBackgroundModes
diff --git a/App/Onboarding/OnboardingFlowView.swift b/App/Onboarding/OnboardingFlowView.swift
index 5d69222..a0e9218 100644
--- a/App/Onboarding/OnboardingFlowView.swift
+++ b/App/Onboarding/OnboardingFlowView.swift
@@ -253,7 +253,7 @@ enum LegalContent {
static let terms = """
Waykin Terms (summary)
- Software is Apache 2.0 licensed (see Notices). This is an experiential walking app, not medical advice and not certified turn-by-turn navigation.
+ Software is proprietary property of Zero State (see Notices / LICENSE). This is an experiential walking app, not medical advice and not certified turn-by-turn navigation.
You are responsible for outdoor safety. You may stop anytime.
@@ -275,7 +275,7 @@ enum LegalContent {
static let notices = """
Notices
- Waykin source is licensed under Apache License 2.0 (LICENSE file).
+ Waykin is proprietary property of Zero State (LICENSE file).
Apple frameworks (SwiftUI, CoreLocation, MapKit, ARKit, RealityKit, HealthKit, AVFoundation) are subject to Apple’s agreements.
diff --git a/BUILD b/BUILD
new file mode 100644
index 0000000..0cfbf08
--- /dev/null
+++ b/BUILD
@@ -0,0 +1 @@
+2
diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 0000000..3f6590d
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,40 @@
+# Changelog
+
+All notable changes to **Waykin** are documented in this file.
+
+The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
+and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+
+Version artifacts: `VERSION`, `BUILD`, `App/Info.plist`, `project.yml` — see [docs/VERSIONING.md](docs/VERSIONING.md).
+
+## [Unreleased]
+
+### Added
+
+- Semantic versioning scaffolding (`VERSION`, `BUILD`, `Tools/version.py`) with parity checks across Info.plist and `project.yml`.
+- App-product process docs: `CHANGELOG.md`, `docs/VERSIONING.md`, `docs/TESTING.md`, `docs/SHIP_CHECKLIST.md`, `SECURITY.md`, `CODE_OF_CONDUCT.md`.
+
+### Changed
+
+- LICENSE is **proprietary** (Zero State / Zero State LLC); Apache-2.0 no longer applies to the current tree.
+- README clone/badge paths point at the Zero-State-LLC org remote where applicable.
+- Phase 0 product identity: AR-designed primary surface with movement as gameplay authority (see `WAYKIN_SPEC.md`, `docs/SOLO_MVP_SCOPE.md`).
+
+## [0.9.0] - 2026-07-25
+
+### Added
+
+- Internal TestFlight cut baseline (marketing `0.9.0`, build `2`).
+- Ember Fox companion packaging and AR placement path (#246).
+- HealthKit read enrichment hardening (#104).
+- Evidence-gated roadmap, capability matrix, and AR redesign reference docs.
+
+### Notes
+
+- Physical outdoor GPS/AR evidence for #41 remains open.
+- Demo Mode and package tests remain the CI-authoritative loop.
+
+---
+
+[Unreleased]: https://github.com/Zero-State-LLC/Waykin/compare/v0.9.0...HEAD
+[0.9.0]: https://github.com/Zero-State-LLC/Waykin/releases/tag/v0.9.0
diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
new file mode 100644
index 0000000..d0ee69b
--- /dev/null
+++ b/CODE_OF_CONDUCT.md
@@ -0,0 +1,27 @@
+# Code of Conduct (Zero State)
+
+Internal and collaborator standard for the Waykin repository.
+
+## Expected behavior
+
+- Be respectful and professional in reviews, issues, and chat.
+- Criticize code and ideas, not people.
+- Prefer actionable alternatives over vague disapproval.
+- Represent test and device-evidence results honestly.
+- Respect proprietary ownership — do not redistribute product IP outside authorized channels.
+
+## Not acceptable
+
+- Harassment, exclusionary language, or threats.
+- Dismissing safety, privacy, or architecture isolation concerns without review.
+- Deliberate misrepresentation of tests, outdoor evidence, or ship readiness.
+- Intentionally regressing `WaykinCore` isolation for convenience.
+- Committing secrets or private field data.
+
+## Reporting
+
+Report violations to the repository owner / Zero State leadership.
+
+## Enforcement
+
+The owner may remove access, revert changes, or take other action proportionate to the violation.
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 20c9d13..e5de4bf 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -1,5 +1,8 @@
# Contributing to Waykin
+> **Ownership:** Waykin is the **property of Zero State**. This repository is **proprietary** ([LICENSE](LICENSE)). Contributions are accepted only under assignment / exclusive license to Zero State. Do not submit third-party open-source code under conflicting terms.
+
+
## Workflow
1. Start from an approved GitHub issue.
@@ -45,9 +48,12 @@ Every PR must state:
make build
make test
make validate
+python3 Tools/version.py check
git diff --check
```
+For release cuts, bump with `python3 Tools/version.py …`, update [`CHANGELOG.md`](CHANGELOG.md), and follow [`docs/VERSIONING.md`](docs/VERSIONING.md) / [`docs/SHIP_CHECKLIST.md`](docs/SHIP_CHECKLIST.md).
+
`make validate` includes the WaykinCore framework-isolation guard
(`make check-core-isolation`): platform frameworks (ARKit, RealityKit,
SwiftUI, MapKit, SwiftData, AVFoundation, CoreLocation, UIKit, AppKit)
diff --git a/Demo/main.swift b/Demo/main.swift
index ba44fa0..30970e3 100644
--- a/Demo/main.swift
+++ b/Demo/main.swift
@@ -2,7 +2,7 @@ import Foundation
import WaykinCore
print("=== WAYKIN SOLO MVP DEMO ===")
-print("Deterministic audio-first walking loop; no GPS or permissions required.\n")
+print("Deterministic AR-designed walking loop with semantic presentation output; no GPS, camera, or permissions required.\n")
let movement = MovementEngine()
let companion = Companion(id: UUID(), name: "Lira", archetype: "explorer", bondLevel: 12, lastSessionID: nil, memories: [])
diff --git a/LICENSE b/LICENSE
index 261eeb9..5ef56f0 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,201 +1,69 @@
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "[]"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright [yyyy] [name of copyright owner]
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
+PROPRIETARY SOFTWARE LICENSE
+
+Copyright (c) 2024–2026 Zero State.
+All rights reserved.
+
+Waykin and all software, documentation, designs, models, assets, skills,
+schemas, data, and other materials in this repository (the "Software") are
+the exclusive proprietary property of **Zero State**.
+
+NO LICENSE IS GRANTED
+
+Except as expressly agreed in a separate written license or commercial
+agreement signed by an authorized representative of Zero State, you may not:
+
+ - use, copy, modify, merge, publish, distribute, sublicense, sell, rent,
+ lease, or loan the Software;
+ - reverse engineer, decompile, or disassemble the Software, except to the
+ limited extent that applicable law expressly prohibits such restriction;
+ - remove or alter any proprietary notices, labels, or marks;
+ - use the Software to train, fine-tune, or evaluate competing systems in a
+ way that extracts proprietary methods, companion IP, or corpora for
+ redistribution;
+ - exercise any rights under open-source licenses (including Apache-2.0,
+ MIT, BSD, GPL, or similar) with respect to this Software.
+
+PRIOR OPEN-SOURCE NOTICE
+
+Earlier versions of this repository may have been distributed under the
+Apache License 2.0. Effective with this LICENSE file, those terms no longer
+apply to the current tree. Rights that may have already vested in third
+parties from prior published Apache-2.0 versions remain only as required by
+those prior licenses for the specific historical copies they received — not
+for this version or later.
+
+VIEWING ON GITHUB
+
+Public visibility of this repository does not constitute a license grant,
+dedication to the public domain, or waiver of any right. Access for personal
+inspection does not include rights to use, fork for production, redistribute,
+or ship App Store builds.
+
+CONTRIBUTIONS
+
+Unless a separate contributor agreement states otherwise, any contribution
+submitted to this repository is assigned to / licensed exclusively to
+Zero State under these proprietary terms. Do not contribute code you cannot
+so assign.
+
+THIRD-PARTY COMPONENTS
+
+Apple frameworks and any third-party fonts or libraries remain subject to
+their own licenses (see docs/legal/NOTICES.md). This proprietary notice
+governs Zero State’s Waykin work product only.
+
+NO WARRANTY
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT. IN NO EVENT SHALL
+ZERO STATE OR OTHER COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES, OR
+OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT, OR OTHERWISE,
+ARISING FROM, OUT OF, OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+
+CONTACT
+
+For licensing inquiries: contact Zero State via the repository owner
+@scrimshawlife-ctrl on GitHub, or the commercial contact listed by the
+project maintainers.
diff --git a/Makefile b/Makefile
index 5a3793d..ae6c50d 100644
--- a/Makefile
+++ b/Makefile
@@ -1,7 +1,7 @@
# Waykin Validation Makefile
# Canonical targets for build, test, and validation.
-.PHONY: generate build test demo validate validate-collaboration validate-simulator clean-generated check-core-isolation test-core-isolation check-lira-usdz install-skills check-skills
+.PHONY: generate build test demo validate validate-collaboration validate-simulator clean-generated check-core-isolation test-core-isolation check-lira-usdz install-skills check-skills version-check
generate:
@rm -rf Waykin.xcodeproj
@@ -44,3 +44,6 @@ install-skills:
check-skills:
@./skills/install.sh --check
+
+version-check:
+ @python3 Tools/version.py check
diff --git a/README.md b/README.md
index 5b42402..c0fc0af 100644
--- a/README.md
+++ b/README.md
@@ -19,15 +19,16 @@
-
-
+
+
+
-
+
- An audio-first adaptive walking experience.
+ An AR-designed adaptive walking experience.
You move. Lira moves with you. The world responds. Bond grows.
@@ -48,9 +49,9 @@ The launch product remains intentionally small enough for one developer to under
| | Pillar | Current contract |
|---|---|---|
| 🚶 | **Real movement** | Walking is the launch activity and primary gameplay input. |
-| ✨ | **Persistent companion** | Lira is the single companion and responds through a bounded behavior vocabulary. |
+| ✨ | **AR companion presence** | Lira is the single companion and AR is her primary designed session surface when capability allows. |
| 🌎 | **Adaptive world** | Seeded events emerge from movement, context, familiarity, energy, and pressure. |
-| 🎧 | **Semantic audio** | Audio communicates presence, discovery, pressure, transition, and Bond. |
+| 🎧 | **Supporting semantic audio** | Audio preserves presence, discovery, pressure, transition, accessibility, and pocket-safe continuity. |
| 🏃 | **Bounded pursuit** | Tension exists without punishment, coercion, or an enemy-platform expansion. |
| ❤️ | **Bond** | One persistent progression measure represents the relationship with Lira. |
@@ -100,13 +101,14 @@ See the complete [`Current Capability Matrix`](docs/canonical/CURRENT_CAPABILITY
### Build and Validate
```bash
-git clone https://github.com/scrimshawlife-ctrl/Waykin.git
+git clone https://github.com/Zero-State-LLC/Waykin.git
cd Waykin
make build
make test
make validate
make validate-simulator
+python3 Tools/version.py check
```
`make validate-simulator` targets `iPhone 17 Pro` by default. Override it with:
@@ -168,7 +170,7 @@ Future-state specifications are reference material until promoted through an acc
## Safety and Privacy
-Legal and safety documents live under [`docs/legal/`](docs/legal/README.md) (Privacy, Terms, Safety brief, Notices). Source code is [Apache 2.0](LICENSE).
+Legal and safety documents live under [`docs/legal/`](docs/legal/README.md) (Privacy, Terms, Safety brief, Notices). Source code is **proprietary — property of Zero State** ([LICENSE](LICENSE)).
- Waykin is not safety equipment or medical advice.
- Location is requested only during an active real walk.
@@ -199,6 +201,24 @@ make test # Swift package tests (count changes over time)
Do not claim GPS, outdoor audio loudness, battery, thermal, outdoor usability, interruption recovery, or outdoor AR quality without direct device evidence on a named build.
+## Versioning and release
+
+Waykin uses semantic versioning. Current cut: **`0.9.0`** (build from `BUILD`).
+
+| Artifact | Role |
+|---|---|
+| `VERSION` / `BUILD` | Single source of truth |
+| `App/Info.plist` + `project.yml` | iOS marketing version + build |
+| [`CHANGELOG.md`](CHANGELOG.md) | Release history |
+| [`docs/VERSIONING.md`](docs/VERSIONING.md) | Bump policy and commands |
+| [`docs/SHIP_CHECKLIST.md`](docs/SHIP_CHECKLIST.md) | TestFlight / App Store gates |
+
+```bash
+python3 Tools/version.py show
+python3 Tools/version.py check
+python3 Tools/version.py bump patch
+```
+
## Roadmap
Waykin progresses by proving one bounded layer before promoting the next:
@@ -208,7 +228,7 @@ Waykin progresses by proving one bounded layer before promoting the next:
3. **Experience tuning** — outdoor balance of produced cues and event weights from device receipts (engineering tones already replaced).
4. **Future systems** — Watch / AI Directors only through explicit promotion after MVP evidence gates.
-See [`ROADMAP.md`](ROADMAP.md) for milestones, status labels, and promotion gates.
+See [`ROADMAP.md`](ROADMAP.md) for milestones, status labels, and promotion gates. Ship readiness: [`docs/SHIP_CHECKLIST.md`](docs/SHIP_CHECKLIST.md).
## Repository Guide
@@ -264,4 +284,7 @@ Start with [`CONTRIBUTING.md`](CONTRIBUTING.md). Coding agents must also read [`
## License
-Licensed under the [Apache License 2.0](LICENSE).
+**Proprietary** — Copyright (c) 2024–2026 **Zero State** / **Zero State LLC**.
+All rights reserved. Waykin is the property of Zero State. No open-source license is granted.
+
+See [`LICENSE`](LICENSE) and [`docs/legal/`](docs/legal/README.md). Contact Zero State for commercial licensing.
diff --git a/SECURITY.md b/SECURITY.md
new file mode 100644
index 0000000..4f8e3c9
--- /dev/null
+++ b/SECURITY.md
@@ -0,0 +1,43 @@
+# Security Policy
+
+Waykin is a **proprietary** product owned by **Zero State / Zero State LLC**.
+
+## Scope
+
+- Local session state, Bond, and concise session memories (on-device)
+- Optional HealthKit enrichment (read)
+- Location **only** during an active real walk (When-In-Use)
+- Camera for AR session presentation when enabled
+- Privacy-filtered local field-test receipts (no automatic upload)
+- No accounts / backend in the current MVP
+
+## Reporting a vulnerability
+
+**Do not** open a public GitHub issue for security-sensitive findings.
+
+Report privately to the **repository owner / Zero State** with:
+
+- clear reproduction steps
+- device and OS version (or CI context)
+- impacted path, dependency, or entitlement
+- severity assessment
+
+Do not disclose publicly until a fix ships or the owner approves disclosure.
+
+## Engineering rules
+
+- No credentials, API keys, or provisioning profiles in source control.
+- Field receipts must remain privacy-filtered (no coordinates / personal memory text in retained artifacts per product rules).
+- `WaykinCore` must not become a network client without an explicit architecture promotion.
+- Third-party SDK introductions require privacy-label and threat-model updates in `docs/legal/`.
+
+## Data handling
+
+- No login required for core play.
+- Demo Mode requires no location or Health access.
+- See [docs/legal/PRIVACY.md](docs/legal/PRIVACY.md) and [docs/legal/SAFETY.md](docs/legal/SAFETY.md).
+
+## Related
+
+- [LICENSE](LICENSE) — proprietary ownership
+- [CONTRIBUTING.md](CONTRIBUTING.md)
diff --git a/Tools/version.py b/Tools/version.py
new file mode 100755
index 0000000..58e0e47
--- /dev/null
+++ b/Tools/version.py
@@ -0,0 +1,296 @@
+#!/usr/bin/env python3
+"""Version helper for Waykin.
+
+Single source of truth:
+- VERSION (x.y.z marketing version)
+- BUILD (integer, CFBundleVersion)
+Synced into:
+- App/Info.plist (CFBundleShortVersionString, CFBundleVersion)
+- project.yml (MARKETING_VERSION, CURRENT_PROJECT_VERSION, CFBundle* strings)
+
+Commands:
+ python3 Tools/version.py show
+ python3 Tools/version.py check
+ python3 Tools/version.py bump [major|minor|patch]
+ python3 Tools/version.py build []
+ python3 Tools/version.py set [--build ]
+ python3 Tools/version.py sync
+"""
+
+from __future__ import annotations
+
+import re
+import sys
+from pathlib import Path
+from typing import Tuple
+
+ROOT = Path(__file__).resolve().parent.parent
+VERSION_FILE = ROOT / "VERSION"
+BUILD_FILE = ROOT / "BUILD"
+INFOPLIST = ROOT / "App" / "Info.plist"
+PROJECT_YML = ROOT / "project.yml"
+
+SEMVER_RE = re.compile(r"^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)$")
+BUILD_RE = re.compile(r"^(0|[1-9]\d*)$")
+
+
+def _usage() -> None:
+ print(__doc__.strip())
+
+
+def _read_text(file: Path) -> str:
+ if not file.exists():
+ raise SystemExit(f"Missing required file: {file}")
+ return file.read_text(encoding="utf-8").strip()
+
+
+def _write_text(file: Path, value: str) -> None:
+ file.write_text(value.rstrip() + "\n", encoding="utf-8")
+
+
+def _parse_version(raw: str) -> Tuple[int, int, int]:
+ m = SEMVER_RE.fullmatch(raw.strip())
+ if not m:
+ raise ValueError(f"Invalid semantic version: {raw!r}")
+ return int(m.group(1)), int(m.group(2)), int(m.group(3))
+
+
+def _validate_version(v: Tuple[int, int, int]) -> str:
+ return f"{v[0]}.{v[1]}.{v[2]}"
+
+
+def _load_version() -> Tuple[int, int, int]:
+ return _parse_version(_read_text(VERSION_FILE))
+
+
+def _load_build() -> int:
+ raw = _read_text(BUILD_FILE)
+ if not BUILD_RE.fullmatch(raw):
+ raise ValueError(f"Invalid build number in {BUILD_FILE}: {raw!r}")
+ return int(raw)
+
+
+def _write_version_metadata(version: Tuple[int, int, int], build: int) -> None:
+ _write_text(VERSION_FILE, _validate_version(version))
+ _write_text(BUILD_FILE, str(build))
+
+
+def _replace_plist_value(plist: str, key: str, value: str) -> str:
+ marker = f"{key}"
+ key_pos = plist.find(marker)
+ if key_pos == -1:
+ raise RuntimeError(f"Could not find key {key} in Info.plist")
+ string_open = plist.find("", key_pos)
+ if string_open == -1:
+ raise RuntimeError(f"Could not find for key {key} in Info.plist")
+ value_start = string_open + len("")
+ value_end = plist.find("", value_start)
+ if value_end == -1:
+ raise RuntimeError(f"Could not find for key {key} in Info.plist")
+ return plist[:value_start] + value + plist[value_end:]
+
+
+def _sync_plist(version: str, build: int) -> bool:
+ plist = INFOPLIST.read_text(encoding="utf-8")
+ updated = _replace_plist_value(plist, "CFBundleShortVersionString", version)
+ updated = _replace_plist_value(updated, "CFBundleVersion", str(build))
+ changed = updated != plist
+ if changed:
+ INFOPLIST.write_text(updated, encoding="utf-8")
+ return changed
+
+
+def _sync_project_yml(version: str, build: int) -> bool:
+ text = PROJECT_YML.read_text(encoding="utf-8")
+ original = text
+ text = re.sub(
+ r'(MARKETING_VERSION:\s*")[^"]*(")',
+ rf"\g<1>{version}\2",
+ text,
+ count=1,
+ )
+ text = re.sub(
+ r'(CURRENT_PROJECT_VERSION:\s*")[^"]*(")',
+ rf"\g<1>{build}\2",
+ text,
+ count=1,
+ )
+ text = re.sub(
+ r'(CFBundleShortVersionString:\s*")[^"]*(")',
+ rf"\g<1>{version}\2",
+ text,
+ count=1,
+ )
+ text = re.sub(
+ r'(CFBundleVersion:\s*")[^"]*(")',
+ rf"\g<1>{build}\2",
+ text,
+ count=1,
+ )
+ changed = text != original
+ if changed:
+ PROJECT_YML.write_text(text, encoding="utf-8")
+ return changed
+
+
+def _sync_all(version: str, build: int) -> list[str]:
+ touched: list[str] = []
+ if _sync_plist(version, build):
+ touched.append("App/Info.plist")
+ if _sync_project_yml(version, build):
+ touched.append("project.yml")
+ return touched
+
+
+def _plist_values() -> tuple[str, str]:
+ plist = INFOPLIST.read_text(encoding="utf-8")
+ ver = re.search(
+ r"CFBundleShortVersionString\s*\n\s*([^<]+)",
+ plist,
+ )
+ bld = re.search(
+ r"CFBundleVersion\s*\n\s*([^<]+)",
+ plist,
+ )
+ if not ver or not bld:
+ raise SystemExit("Could not parse App/Info.plist version fields")
+ return ver.group(1), bld.group(1)
+
+
+def _yml_values() -> tuple[str | None, str | None, str | None, str | None]:
+ text = PROJECT_YML.read_text(encoding="utf-8")
+ def g(pat: str) -> str | None:
+ m = re.search(pat, text)
+ return m.group(1) if m else None
+ return (
+ g(r'MARKETING_VERSION:\s*"([^"]+)"'),
+ g(r'CURRENT_PROJECT_VERSION:\s*"([^"]+)"'),
+ g(r'CFBundleShortVersionString:\s*"([^"]+)"'),
+ g(r'CFBundleVersion:\s*"([^"]+)"'),
+ )
+
+
+def _check_parity(version: Tuple[int, int, int], build: int) -> None:
+ expected_version = _validate_version(version)
+ expected_build = str(build)
+ pv, pb = _plist_values()
+ if pv != expected_version:
+ raise SystemExit(
+ f"Version parity failed: VERSION {expected_version} but App/Info.plist has {pv}"
+ )
+ if pb != expected_build:
+ raise SystemExit(
+ f"Build parity failed: BUILD {expected_build} but App/Info.plist has {pb}"
+ )
+ mv, cpv, sv, bv = _yml_values()
+ mismatches = []
+ if mv and mv != expected_version:
+ mismatches.append(f"project.yml MARKETING_VERSION={mv}")
+ if cpv and cpv != expected_build:
+ mismatches.append(f"project.yml CURRENT_PROJECT_VERSION={cpv}")
+ if sv and sv != expected_version:
+ mismatches.append(f"project.yml CFBundleShortVersionString={sv}")
+ if bv and bv != expected_build:
+ mismatches.append(f"project.yml CFBundleVersion={bv}")
+ if mismatches:
+ raise SystemExit(
+ "project.yml parity failed vs VERSION/BUILD:\n - " + "\n - ".join(mismatches)
+ )
+
+
+def cmd_show() -> None:
+ print(f"VERSION={_validate_version(_load_version())}")
+ print(f"BUILD={_load_build()}")
+
+
+def cmd_bump(part: str) -> None:
+ if part not in {"major", "minor", "patch"}:
+ raise SystemExit("bump requires major|minor|patch")
+ version = _load_version()
+ if part == "major":
+ version = (version[0] + 1, 0, 0)
+ elif part == "minor":
+ version = (version[0], version[1] + 1, 0)
+ else:
+ version = (version[0], version[1], version[2] + 1)
+ build = 1
+ _write_version_metadata(version, build)
+ touched = _sync_all(_validate_version(version), build)
+ print(f"Bumped to {_validate_version(version)} build {build}")
+ if touched:
+ print("Synced: " + ", ".join(touched))
+
+
+def cmd_build(value: str | None) -> None:
+ build = _load_build()
+ new_build = build + 1 if value is None else int(value)
+ version = _validate_version(_load_version())
+ _write_text(BUILD_FILE, str(new_build))
+ touched = _sync_all(version, new_build)
+ print(f"BUILD={new_build}")
+ if touched:
+ print("Synced: " + ", ".join(touched))
+
+
+def cmd_set(version_raw: str, build_raw: str | None = None) -> None:
+ new_version = _parse_version(version_raw)
+ new_build = int(build_raw) if build_raw is not None else _load_build()
+ _write_version_metadata(new_version, new_build)
+ touched = _sync_all(_validate_version(new_version), new_build)
+ print(f"Set {_validate_version(new_version)} build {new_build}")
+ if touched:
+ print("Synced: " + ", ".join(touched))
+
+
+def cmd_check() -> None:
+ _check_parity(_load_version(), _load_build())
+ print("Version parity check passed")
+
+
+def cmd_sync() -> None:
+ version = _validate_version(_load_version())
+ build = _load_build()
+ touched = _sync_all(version, build)
+ print("Synced: " + (", ".join(touched) if touched else "already in sync"))
+
+
+def main(argv: list[str]) -> None:
+ if len(argv) < 2:
+ _usage()
+ raise SystemExit(1)
+ cmd = argv[1]
+ args = argv[2:]
+ if cmd == "show":
+ cmd_show()
+ elif cmd == "check":
+ cmd_check()
+ elif cmd == "bump":
+ if len(args) != 1:
+ raise SystemExit("bump requires exactly one argument: major|minor|patch")
+ cmd_bump(args[0])
+ elif cmd == "build":
+ if len(args) > 1:
+ raise SystemExit("build takes zero or one argument")
+ cmd_build(args[0] if args else None)
+ elif cmd == "set":
+ if len(args) not in {1, 3}:
+ raise SystemExit("set takes version and optional --build ")
+ build = None
+ if len(args) == 3:
+ if args[1] != "--build":
+ raise SystemExit("Expected: set --build ")
+ build = args[2]
+ if not BUILD_RE.fullmatch(build):
+ raise SystemExit("Build value must be a positive integer")
+ cmd_set(args[0], build)
+ elif cmd == "sync":
+ cmd_sync()
+ else:
+ raise SystemExit(f"Unknown command: {cmd}")
+
+
+if __name__ == "__main__":
+ try:
+ main(sys.argv)
+ except ValueError as exc:
+ raise SystemExit(str(exc))
diff --git a/VERSION b/VERSION
new file mode 100644
index 0000000..ac39a10
--- /dev/null
+++ b/VERSION
@@ -0,0 +1 @@
+0.9.0
diff --git a/WAYKIN_SPEC.md b/WAYKIN_SPEC.md
index e94d37b..69cf2dc 100644
--- a/WAYKIN_SPEC.md
+++ b/WAYKIN_SPEC.md
@@ -9,7 +9,7 @@
## Product Contract
-Waykin is an audio-first adaptive walking experience in which one persistent companion, Lira, and one bounded pursuit-pressure state respond to how the user moves.
+Waykin is an AR-designed adaptive walking experience in which one persistent companion, Lira, and one bounded pursuit-pressure state respond to how the user moves. Movement is gameplay authority; AR is the primary designed session surface when capability allows, with audio, 2D presence, map, and HUD as supporting presentation channels.
The current product is a solo-developer MVP vertical slice. Complexity belongs in deterministic data and configuration, not in additional platforms or generalized systems.
@@ -19,10 +19,10 @@ The current product is a solo-developer MVP vertical slice. Complexity belongs i
2. World State and deterministic Event Generator
3. Lira Companion Runtime
4. Bounded Pursuit State
-5. Semantic Audio Experience
-6. Local Bond and concise Session Memory persistence
-7. Privacy-filtered local field-test receipts
-8. Platform-neutral AR presentation contracts and milestone-scoped app adapters
+5. AR Presentation Contracts and milestone-scoped app adapters
+6. Semantic Audio Experience
+7. Local Bond and concise Session Memory persistence
+8. Privacy-filtered local field-test receipts
## Binding Invariants
@@ -32,7 +32,9 @@ The current product is a solo-developer MVP vertical slice. Complexity belongs i
- Pursuit is bounded pressure, not a generalized enemy framework.
- Seeded behavior must remain reproducible.
- `WaykinCore` must not gain **new** dependencies on ARKit, RealityKit, SwiftUI, MapKit, or audio filenames. Existing isolation baseline exceptions (today: SwiftData persistence + CoreLocation sample adapter seams checked by `scripts/check_core_framework_isolation.sh`) are grandfathered only; do not expand them without an explicit issue.
-- Presentation adapters may realize semantic state but may not become alternate gameplay authorities.
+- AR, audio, 2D, map, and HUD adapters may realize semantic state but may not become alternate gameplay authorities.
+- AR is the primary designed session surface on capable devices; a walk must remain safe and completable when AR is denied, unavailable, or degraded.
+- Semantic audio remains required supporting presentation for presence, pocket use, accessibility, and safety.
- Physical-device behavior is not validated without direct device evidence.
- Safety, pause, and stop behavior take precedence over dramatic pressure.
diff --git a/docs/README.md b/docs/README.md
index 7ac41f0..6a501eb 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -42,9 +42,15 @@ Waykin documentation is organized by **authority**, **maturity**, and **evidence
| Document | Purpose |
|---|---|
| [`../ARCHITECTURE.md`](../ARCHITECTURE.md) | High-level engine boundaries and data flow |
+| [`TESTING.md`](TESTING.md) | Test layers, CI map, smoke matrix, definition of done |
+| [`VERSIONING.md`](VERSIONING.md) | Semantic versioning + App Store build numbers |
+| [`SHIP_CHECKLIST.md`](SHIP_CHECKLIST.md) | TestFlight / App Store ship gates |
| [`AUDIO_ASSET_CONTRACT.md`](AUDIO_ASSET_CONTRACT.md) | Semantic audio cue ownership and app-target asset mapping |
| [`../DEMO_SCRIPT.md`](../DEMO_SCRIPT.md) | Terminal demo and iOS simulator flows |
| [`assets/runtime-architecture.svg`](assets/runtime-architecture.svg) | Reusable runtime architecture diagram |
+| [`../CHANGELOG.md`](../CHANGELOG.md) | Keep a Changelog release history |
+| [`../SECURITY.md`](../SECURITY.md) | Vulnerability reporting and security posture |
+| [`../CODE_OF_CONDUCT.md`](../CODE_OF_CONDUCT.md) | Collaborator conduct |
## Design and UI presentation
@@ -91,8 +97,8 @@ A green build does not validate GPS, device audio, battery, thermal behavior, ou
| [`legal/PRIVACY.md`](legal/PRIVACY.md) | Privacy notice (draft for product review) |
| [`legal/TERMS.md`](legal/TERMS.md) | Terms of use (draft for product review) |
| [`legal/SAFETY.md`](legal/SAFETY.md) | Outdoor movement safety brief (in-app) |
-| [`legal/NOTICES.md`](legal/NOTICES.md) | Apache 2.0 and third-party notices |
-| [`../LICENSE`](../LICENSE) | Apache License 2.0 source license |
+| [`legal/NOTICES.md`](legal/NOTICES.md) | Proprietary (Zero State) and third-party notices |
+| [`../LICENSE`](../LICENSE) | Proprietary — property of Zero State |
## Collaboration
diff --git a/docs/SHIP_CHECKLIST.md b/docs/SHIP_CHECKLIST.md
new file mode 100644
index 0000000..472ff84
--- /dev/null
+++ b/docs/SHIP_CHECKLIST.md
@@ -0,0 +1,103 @@
+# Ship Checklist
+
+Pre–TestFlight / App Store checklist for **Waykin** (Zero State / Zero State LLC).
+
+Detailed RC engineering checklist: [design/TESTFLIGHT_RC_CHECKLIST.md](design/TESTFLIGHT_RC_CHECKLIST.md).
+Version policy: [VERSIONING.md](VERSIONING.md). Validation: [TESTING.md](TESTING.md).
+
+Owner actions that need Apple Developer / vendor accounts are marked **(owner)**.
+
+---
+
+## 0. Version and repo hygiene
+
+- [ ] `python3 Tools/version.py show` matches intended cut
+- [ ] `python3 Tools/version.py check` passes
+- [ ] `CHANGELOG.md` has a dated section for this version
+- [ ] Git tag `vMAJOR.MINOR.PATCH` after merge to `main`
+- [ ] CI green on release commit (validate + package + native-ios)
+- [ ] No secrets, signing certs, or private field receipts in the tree
+- [ ] LICENSE remains proprietary Zero State terms
+
+**1.0.0** = first public soft-launch / App Store candidate. `0.9.x` = internal TestFlight evidence cuts.
+
+---
+
+## 1. Product completeness (MVP)
+
+- [ ] Walking session loop: home → real/demo walk → summary → memory
+- [ ] Lira companion runtime + Bond progression local persistence
+- [ ] Semantic audio path with safe silence
+- [ ] AR presentation path frozen MVP (or explicitly documented exceptions)
+- [ ] Walk remains safe/completable when AR denied, unavailable, or degraded
+- [ ] Demo Mode parity with canonical loop (no location required)
+- [ ] Pause / stop always available; pursuit never coerces through distress
+
+---
+
+## 2. App Store Connect **(owner)**
+
+- [ ] App record + bundle id reserved
+- [ ] Display name **Waykin**
+- [ ] Age rating questionnaire complete
+- [ ] Privacy Nutrition Labels match real HealthKit / Location / Camera usage
+- [ ] Privacy policy URL live ([docs/legal/PRIVACY.md](legal/PRIVACY.md) source)
+- [ ] Support / marketing URLs as needed
+- [ ] Encryption export compliance (`ITSAppUsesNonExemptEncryption` = false if still accurate)
+- [ ] Pricing / availability for soft-launch geos agreed
+
+---
+
+## 3. Entitlements and permissions
+
+- [ ] Location When-In-Use usage string accurate
+- [ ] Camera usage string accurate (AR)
+- [ ] HealthKit share usage string accurate; Demo never requires Health
+- [ ] Background audio mode only as required for pocket-safe cues
+- [ ] Privacy manifest (`PrivacyInfo.xcprivacy`) present and reviewed
+
+---
+
+## 4. Store listing assets
+
+- [ ] App icon final
+- [ ] Screenshots (iPhone; iPad if offered)
+- [ ] Optional preview video
+- [ ] Description, keywords, what’s new
+- [ ] Marketing claims do **not** overstate outdoor AR/GPS evidence
+
+---
+
+## 5. Evidence gates (do not skip)
+
+- [ ] Indoor smoke on named build SHA
+- [ ] Outdoor walk receipts per [PHYSICAL_DEVICE_WALK_VALIDATION.md](PHYSICAL_DEVICE_WALK_VALIDATION.md) for any GPS/AR outdoor claim
+- [ ] Audio interruption / route-change smoke on device
+- [ ] #41 (or successor) status recorded honestly (`PARTIAL` / open / closed)
+
+---
+
+## 6. TestFlight
+
+- [ ] Internal TF build installed on owner device
+- [ ] Crash-free Demo + short real walk
+- [ ] Legal/onboarding acknowledgment path works
+- [ ] External group only after indoor+basic outdoor smoke
+
+---
+
+## 7. Release day
+
+- [ ] Version bumped; changelog finalized
+- [ ] Submit with complete review notes (no login if none)
+- [ ] Monitor crashes 48h; rollback plan known
+- [ ] Tag release; update ROADMAP status if milestone crossed
+
+---
+
+## Related
+
+- [ROADMAP.md](../ROADMAP.md)
+- [KNOWN_LIMITATIONS.md](../KNOWN_LIMITATIONS.md)
+- [SECURITY.md](../SECURITY.md)
+- [waykin-release skill](../skills/waykin-release/SKILL.md)
diff --git a/docs/SOLO_MVP_SCOPE.md b/docs/SOLO_MVP_SCOPE.md
index d4408f8..d784d6c 100644
--- a/docs/SOLO_MVP_SCOPE.md
+++ b/docs/SOLO_MVP_SCOPE.md
@@ -2,7 +2,7 @@
## Product Promise
-Waykin is an audio-first adaptive walking experience where the real world quietly appears to notice, remember, and respond through Lira, Bond, bounded phenomena, and concise session memories.
+Waykin is an AR-designed adaptive walking experience where Lira meets the user in the world as they walk. Movement remains gameplay authority; AR is the primary designed session surface when capability allows, while audio, 2D presence, map, and HUD preserve continuity, accessibility, and safety.
The first release should make a user finish a walk and want to go out again tomorrow to see what happens.
@@ -12,7 +12,7 @@ The first release should make a user finish a walk and want to go out again tomo
2. World State
3. Event Generator
4. Companion Runtime
-5. Audio Experience Layer
+5. Audio Experience Layer (required) with AR presentation adapter as the primary designed session surface when capability allows; 2D presence, map, and HUD remain distinct supporting presentation owners — not a generalized multi-channel platform
Persistence may support these systems by storing Bond, companion identity, and concise memories. It must not become a generalized platform.
@@ -26,7 +26,7 @@ Local field-test receipts may observe existing runtime signals for bounded engin
- One coherent world interpretation: the world quietly responds to movement.
- One persistent progression measure: Bond.
- One deterministic event-generation mechanism.
-- One audio-first semantic presentation path.
+- One semantic presentation path with AR as the primary designed surface when capability allows; Audio Experience Layer remains required; 2D presence, map, and HUD stay supporting channels under their existing owners.
- One deterministic Demo Mode.
- One physical-device walk path.
- Minimal session, summary, and memory UI.
@@ -59,7 +59,7 @@ Presentation quality must communicate current metrics and pressure through natur
## Expansion Gate
-No major system may be added until repeated physical-device sessions demonstrate that the existing loop creates return intent and the current limitation cannot be solved through configuration, audio, tuning, or simplification.
+No major system may be added until repeated physical-device sessions demonstrate that the existing loop creates return intent and the current limitation cannot be solved through configuration, presentation, tuning, or simplification.
Legacy Orc Pursuit and Future Self compatibility models may be deleted only after no repository references remain outside their declarations, no persisted production data depends on their Codable representation, and migration or versioning behavior is explicitly tested. Until then, they remain inert compatibility state.
diff --git a/docs/TESTING.md b/docs/TESTING.md
new file mode 100644
index 0000000..465fff2
--- /dev/null
+++ b/docs/TESTING.md
@@ -0,0 +1,80 @@
+# Testing
+
+How Waykin is verified before merge and before ship.
+Product evidence language (`OBSERVED` / `INFERRED` / `NOT_COMPUTABLE`) lives in [WAYKIN_SPEC.md](../WAYKIN_SPEC.md).
+
+## Test layers
+
+| Layer | Location / command | Simulator | Purpose |
+|---|---|---|---|
+| WaykinCore unit | `make test` (`Tests/WaykinCoreTests`) | No | Rules, events, companion, persistence math |
+| Framework isolation | `make check-core-isolation` | No | Core must not grow forbidden platform imports |
+| Canonical harness | `make validate` | No* | Generation + package + native app build + guards |
+| Simulator UI | `make validate-simulator` | Yes | App shell / UITests |
+| Physical outdoor | [PHYSICAL_DEVICE_WALK_VALIDATION.md](PHYSICAL_DEVICE_WALK_VALIDATION.md) | Device | GPS, audio, AR outdoor, interruptions |
+| Version parity | `python3 Tools/version.py check` | No | VERSION/BUILD ↔ plist ↔ project.yml |
+
+\* `make validate` builds the native iOS app; it does not require a booted simulator for the default path.
+
+## Local commands
+
+```bash
+make build
+make test
+make validate
+python3 Tools/version.py check
+git diff --check
+```
+
+Simulator:
+
+```bash
+make validate-simulator
+# or
+WAYKIN_SIMULATOR_NAME="iPhone 17 Pro" make validate-simulator
+```
+
+## What must stay true
+
+1. **`WaykinCore` isolation** — no new ARKit/RealityKit/SwiftUI/MapKit/AVFoundation/CoreLocation/UIKit imports without explicit architecture review and baseline update.
+2. **Determinism** — Demo Mode and seeded events remain reproducible in package tests.
+3. **No false outdoor claims** — GPS, outdoor AR quality, battery, thermal, and interruption recovery require **device receipts**, not CI green alone.
+4. **Version parity** — do not ship a binary whose Info.plist disagrees with `VERSION`/`BUILD`.
+
+## CI map
+
+Hosted workflows (see README badges):
+
+| Workflow | Signal |
+|---|---|
+| Canonical validation (`validate.yml`) | `make validate` class gates |
+| Waykin CI (`waykin-ci.yml`) | Swift package + native iOS jobs |
+
+Treat **main** badge status as the public truth for the default branch.
+
+## Smoke matrix (pre-ship)
+
+| Check | Target | Pass |
+|---|---|---|
+| Demo walk end-to-end | Simulator | Completes; summary + memory write |
+| Real walk permission deny | Device | Session remains safe / completable without AR or location as designed |
+| AR unavailable / denied | Device | Supporting channels still complete a walk |
+| Audio background / pocket | Device | Cues continue under background mode policy |
+| HealthKit deny | Device | Demo and walk still work; enrichment soft-fails |
+| Settings → Legal | Any | Notices open; no crash |
+
+## Definition of done (PR)
+
+- [ ] Issue-scoped; non-goals respected
+- [ ] `make validate` (or documented equivalent CI green)
+- [ ] Tests added/updated when Core behavior changes
+- [ ] Docs updated when contracts change
+- [ ] Device-evidence status stated when outdoor/AR/audio/HK claimed
+- [ ] `python3 Tools/version.py check` if version files touched
+
+## Related
+
+- [ARCHITECTURE.md](../ARCHITECTURE.md)
+- [FIELD_TEST_PROTOCOL.md](FIELD_TEST_PROTOCOL.md)
+- [SHIP_CHECKLIST.md](SHIP_CHECKLIST.md)
+- [CONTRIBUTING.md](../CONTRIBUTING.md)
diff --git a/docs/VERSIONING.md b/docs/VERSIONING.md
new file mode 100644
index 0000000..be81923
--- /dev/null
+++ b/docs/VERSIONING.md
@@ -0,0 +1,77 @@
+# Versioning and Release Procedure
+
+Waykin follows [Semantic Versioning 2.0.0](https://semver.org/).
+
+This is a **proprietary** iOS product owned by **Zero State / Zero State LLC**. Marketing version and build numbers must stay consistent across git, Info.plist, XcodeGen, and App Store Connect uploads.
+
+## Single source of truth
+
+| Artifact | Purpose |
+|---|---|
+| `VERSION` | `MAJOR.MINOR.PATCH` marketing version |
+| `BUILD` | Monotonic integer (`CFBundleVersion`) |
+| `App/Info.plist` | `CFBundleShortVersionString`, `CFBundleVersion` |
+| `project.yml` | `MARKETING_VERSION`, `CURRENT_PROJECT_VERSION`, Info.plist properties |
+| `CHANGELOG.md` | Human-readable history |
+| Git tag | `vMAJOR.MINOR.PATCH` on the release commit |
+
+**Parity rule** (enforced by `python3 Tools/version.py check`):
+
+```text
+VERSION == App/Info.plist CFBundleShortVersionString
+ == project.yml MARKETING_VERSION / CFBundleShortVersionString
+BUILD == App/Info.plist CFBundleVersion
+ == project.yml CURRENT_PROJECT_VERSION / CFBundleVersion
+```
+
+Prefer the helper over hand-editing version fields.
+
+## What the numbers mean
+
+| Bump | When |
+|---|---|
+| **MAJOR** | Breaking player/save contract, forced migration, or landmark product line change. **`1.0.0` = first public App Store / broad soft launch.** |
+| **MINOR** | New feature or content set with backward-compatible saves |
+| **PATCH** | Bug fix, polish, docs-only product notes, balance tuning without new systems |
+
+### Current pre-1.0 track
+
+| Series | Intent |
+|---|---|
+| `0.9.x` | Internal TestFlight / device evidence cuts |
+| `1.0.0` | Soft launch / App Store candidate after [SHIP_CHECKLIST.md](SHIP_CHECKLIST.md) |
+
+### Build number
+
+- **Must increase** for every TestFlight / App Store upload, even if marketing version is unchanged.
+- Never reuse a build number for a different binary on the same bundle id.
+
+## Commands
+
+```bash
+python3 Tools/version.py show
+python3 Tools/version.py check
+python3 Tools/version.py bump patch # or minor | major
+python3 Tools/version.py set 1.0.0 --build 10
+python3 Tools/version.py build # +1
+python3 Tools/version.py sync # push VERSION/BUILD into plist + project.yml
+```
+
+After changing source/resource files, still run `make generate` / `xcodegen generate` as usual.
+
+## Release checklist (summary)
+
+1. Decide bump type.
+2. Bump with `Tools/version.py`.
+3. Move `[Unreleased]` notes in `CHANGELOG.md` into a dated `## [X.Y.Z]` section.
+4. Run `make validate` (and simulator / device protocols as needed).
+5. `python3 Tools/version.py check`
+6. Complete [SHIP_CHECKLIST.md](SHIP_CHECKLIST.md) / [design/TESTFLIGHT_RC_CHECKLIST.md](design/TESTFLIGHT_RC_CHECKLIST.md).
+7. Tag `vX.Y.Z`, upload archive to App Store Connect.
+8. Update [ROADMAP.md](../ROADMAP.md) if a milestone gate moved.
+
+## Related
+
+- [CHANGELOG.md](../CHANGELOG.md)
+- [SHIP_CHECKLIST.md](SHIP_CHECKLIST.md)
+- [waykin-release skill](../skills/waykin-release/SKILL.md)
diff --git a/docs/decisions/ADR-0003-local-first-swiftdata-persistence.md b/docs/decisions/ADR-0003-local-first-swiftdata-persistence.md
index e98e992..1788b63 100644
--- a/docs/decisions/ADR-0003-local-first-swiftdata-persistence.md
+++ b/docs/decisions/ADR-0003-local-first-swiftdata-persistence.md
@@ -7,7 +7,7 @@
## Context
-Waykin is a solo-developer, audio-first adaptive movement application. Its MVP must complete walks without a network dependency and currently persists a small amount of durable state: Lira, Bond, and concise session memories. Preferences and field-test evidence already use separate storage mechanisms appropriate to their semantics.
+At the time of this persistence decision, Waykin was described as a solo-developer, audio-first adaptive movement application. The current product identity is AR-designed; the local-first persistence decision is unchanged. Its MVP must complete walks without a network dependency and currently persists a small amount of durable state: Lira, Bond, and concise session memories. Preferences and field-test evidence already use separate storage mechanisms appropriate to their semantics.
The current SwiftData implementation proves file-backed reopen behavior, but the persistent schema is not explicitly versioned, production initialization can fall back without adequately exposing degraded durability, companion retrieval is based on unspecified fetch order, and the one-memory-per-session invariant is enforced primarily in application code.
diff --git a/docs/design/ART_DIRECTION_SIGN_OFF.md b/docs/design/ART_DIRECTION_SIGN_OFF.md
index 7f02c7e..86abc7d 100644
--- a/docs/design/ART_DIRECTION_SIGN_OFF.md
+++ b/docs/design/ART_DIRECTION_SIGN_OFF.md
@@ -28,7 +28,7 @@ The **spectral Living Familiar** generated pack is accepted as the locked visual
## Locked constraints
- Product name **Lira**; one companion; no marketplace multi-companion.
-- Audio-first; stills support presence, not gameplay expansion.
+- AR-designed; stills and audio support presence without gameplay expansion.
- Night climate is indigo-earth Echo, not inverted day mist.
- AR mid-LOD may remain procedural until sculpted USDZ lands; stills direction is binding for materials and silhouette.
diff --git a/docs/design/AR_MVP_FREEZE.md b/docs/design/AR_MVP_FREEZE.md
index 9cc9a0e..558efa1 100644
--- a/docs/design/AR_MVP_FREEZE.md
+++ b/docs/design/AR_MVP_FREEZE.md
@@ -84,7 +84,7 @@ When this freeze is accepted:
## Related
- [CONTINUATION_PLAN.md](CONTINUATION_PLAN.md) v5.0
-- [AR_PRODUCT_REDESIGN_MAP.md](AR_PRODUCT_REDESIGN_MAP.md) — SUPPORTING redesign planning (does not lift freeze)
+- [AR_PRODUCT_REDESIGN_MAP.md](AR_PRODUCT_REDESIGN_MAP.md) and [AR_APP_REDESIGN_PLAN.md](../plans/AR_APP_REDESIGN_PLAN.md) — Phase 0 promotes AR-designed identity without lifting frozen production paths
- [LIRA_AR_PRODUCTION_RIG.md](LIRA_AR_PRODUCTION_RIG.md)
- [AR_REPLAY_VALIDATION.md](../AR_REPLAY_VALIDATION.md)
- [ACTIVE_WORK.md](../collaboration/ACTIVE_WORK.md)
diff --git a/docs/design/AR_PRODUCT_REDESIGN_MAP.md b/docs/design/AR_PRODUCT_REDESIGN_MAP.md
index f0f8326..2a1726c 100644
--- a/docs/design/AR_PRODUCT_REDESIGN_MAP.md
+++ b/docs/design/AR_PRODUCT_REDESIGN_MAP.md
@@ -76,7 +76,7 @@ Precedence (from `docs/governance/DOCUMENT_AUTHORITY.md`):
5. ADRs
6. … lower tiers …
-This map and `docs/plans/AR_APP_REDESIGN_PLAN.md` are **SUPPORTING / NEAR_TERM**. They cannot silently override binding audio-first language until Phase 0 lands.
+This map and `docs/plans/AR_APP_REDESIGN_PLAN.md` remain **SUPPORTING / NEAR_TERM**. Phase 0 product-law reconciliation is complete via issue #252; later UX and runtime phases still require their own evidence gates and scoped issues.
## 4. Whole-product map
@@ -255,16 +255,16 @@ Session Summary → Memory → Home
| Conflict | Severity | Resolution owner |
| -------- | -------- | ---------------- |
-| Binding **audio-first** vs AR design intent | High | Phase 0 binding docs |
+| Prior binding audio-first identity vs AR design intent | **Resolved in Phase 0** | Issue #252 binding docs |
| **AR MVP freeze** vs redesign work | High | Ring A vs issue-scoped Ring B |
| UIUX “presence OR AR not both animating” | Med | Keep; AR cover replaces active 2D animation |
| Outdoor PARTIAL vs AR marketing | High | #41 before PASS claims |
-| Skills `REPO_CONTEXT` audio-first | Med | Phase 0 agent pack |
+| Prior skill-pack audio-first identity | **Resolved in Phase 0** | Issue #252 agent pack |
| Continuous follow expectation vs world-plant | Med | Product education + optional later ADR |
-## 11. Binding doc delta map (Phase 0)
+## 11. Binding doc delta map (Phase 0 complete, issue #252)
-| Document | Today | Target edit |
+| Document | Prior state | Phase 0 result |
| -------- | ----- | ----------- |
| `docs/SOLO_MVP_SCOPE.md` | audio-first promise; audio-only presentation path | AR-designed promise; multi-channel presentation with AR primary design target |
| `WAYKIN_SPEC.md` | audio-first contract; AR as #8 | AR-designed contract; AR presentation elevated; audio remains MVP system |
@@ -324,8 +324,8 @@ Active Session today is **2D-rooted** with AR as optional cover. AR-designed pro
| Label | Claim |
| ----- | ----- |
-| OBSERVED | AR command spine, freeze, optional fullScreenCover entry, audio-first binding language |
-| INFERRED | Product feels multi-modal; audio-first under-describes ship |
+| OBSERVED | AR command spine, freeze, optional fullScreenCover entry, and Phase 0 AR-designed binding language |
+| INFERRED | AR-designed identity now describes the intended channel order; shipped session IA remains 2D-rooted pending later gated work |
| NOT_COMPUTABLE | Whether session-default AR will increase return intent (needs outdoor/device product evidence; not inventable) |
| NOT_COMPUTABLE | Outdoor AR quality PASS until #41 re-walk |
diff --git a/docs/design/AR_SESSION_IA_CONFLICTS.md b/docs/design/AR_SESSION_IA_CONFLICTS.md
index 29ffcad..f46d027 100644
--- a/docs/design/AR_SESSION_IA_CONFLICTS.md
+++ b/docs/design/AR_SESSION_IA_CONFLICTS.md
@@ -66,14 +66,14 @@ Session Summary
| Source | Says |
| ------ | ---- |
-| Binding law (`SOLO_MVP_SCOPE`, `WAYKIN_SPEC`) | Audio-first product |
+| Binding law (`SOLO_MVP_SCOPE`, `WAYKIN_SPEC`) | **AR-designed**; movement authority; AR primary when capable; audio supporting |
| UIUX B1 | “Audio is the primary channel; the screen confirms” |
| UIUX B2 + shipped | Screen-first session; AR optional |
| Operator + redesign map | AR-designed; AR primary session surface |
-**Conflict:** Three competing “primaries” (audio / 2D screen / AR) without one ordered channel stack.
+**Phase 0 status:** Binding law now defines the ordered channel stack. The remaining conflict is implementation/UIUX alignment: shipped 2D root and legacy UIUX wording have not yet been promoted to AR-default UX.
-**Resolution direction:** Phase 0 law + UIUX B1 rewrite: AR primary **designed** surface when capable; audio required **support**; 2D fallback/HUD.
+**Resolution direction:** Phase 0 law is complete via issue #252. Phase 2 must amend UIUX B1 and the session tree: AR primary **designed** surface when capable; audio required **support**; 2D fallback/HUD.
---
@@ -266,18 +266,18 @@ Glance adapter publishes from `activePresencePresentation` when enabled, indepen
| Doc class | Session stance |
| ---------- | -------------- |
-| BINDING scope/spec | Audio-first |
+| BINDING scope/spec | **AR-designed**; Phase 0 complete |
| DESIGN_REFERENCE UIUX | 2D root; AR cover; “don’t redesign session” |
| SUPPORTING redesign map + this file | AR root when capable |
| AR MVP freeze | No silent `App/AR/**` feature expansion |
-Agents and PRs will follow UIUX/binding until Phase 0 + UIUX B1–B4 amendment.
+Agents and PRs now follow AR-designed binding law. Production UX remains frozen until Phase 1 evidence and a scoped Phase 2 issue authorize UIUX B1–B4 and session-shell changes.
## 4. Conflict graph
```text
┌──────────────┐
- │ Product law │ audio-first
+ │ Product law │ AR-designed
└──────┬───────┘
│ C1
┌────────────┼────────────┐
diff --git a/docs/design/CONTINUATION_PLAN.md b/docs/design/CONTINUATION_PLAN.md
index 0ba30a2..a0a9021 100644
--- a/docs/design/CONTINUATION_PLAN.md
+++ b/docs/design/CONTINUATION_PLAN.md
@@ -76,7 +76,7 @@ DEVICE LANE (on frozen lineage only)
BUILD-ON-TOP LANE (only after freeze + device honesty)
9. Recover PR #245 docs onto freeze tip (SUPPORTING; never merge stale branch)
-10. Phase 0 binding product-law reconciliation
+10. Phase 0 binding product-law reconciliation — issue #252
11. AR session shell in bounded PRs
12. State animations incrementally (preserve base mesh)
```
diff --git a/docs/design/LIRA_ANIMATION_PLAN.md b/docs/design/LIRA_ANIMATION_PLAN.md
index 3c03f43..40a1d25 100644
--- a/docs/design/LIRA_ANIMATION_PLAN.md
+++ b/docs/design/LIRA_ANIMATION_PLAN.md
@@ -27,7 +27,7 @@ procedural_mesh_mid_lod: SHIPPED
## Purpose
-Define how Lira **moves** across session UI and AR without expanding product scope (one companion, audio-first, no multiplayer/marketplace).
+Define how Lira **moves** across session UI and AR without expanding product scope (one companion, AR-designed presentation, no multiplayer/marketplace).
This plan binds animation to existing state machines:
diff --git a/docs/design/LIRA_PRODUCTION_ART_PIPELINE.md b/docs/design/LIRA_PRODUCTION_ART_PIPELINE.md
index d513306..d2f6cc1 100644
--- a/docs/design/LIRA_PRODUCTION_ART_PIPELINE.md
+++ b/docs/design/LIRA_PRODUCTION_ART_PIPELINE.md
@@ -16,7 +16,7 @@ direction_lock: Echo + Lira spectral Living Familiar (DIRECTION_ACCEPTED)
Move Lira from **procedural Echo placeholder** (session silhouette + AR sphere-rig) to **production-quality art** without expanding product scope.
-Authoritative product rules: one companion, audio-first, no multi-companion, no marketplace-driven skins, hunter without gore.
+Authoritative product rules: one companion, AR-designed presentation, no multi-companion, no marketplace-driven skins, hunter without gore.
## Current state (OBSERVED in app)
diff --git a/docs/design/README.md b/docs/design/README.md
index c5d1e33..3188d0a 100644
--- a/docs/design/README.md
+++ b/docs/design/README.md
@@ -15,7 +15,7 @@ Visual system imports and production follow-ons for the app repository.
**Authority:** these docs **do not** override binding product law or AR MVP freeze. Phase 0 binding edits are a separate PR. Implementation waits for freeze + device honesty (see CONTINUATION_PLAN).
-**Operator direction (intent):** design for **AR** as primary session surface when capable; movement remains gameplay authority; audio is supporting/fallback. Binding docs may still say audio-first until Phase 0.
+**Operator direction (intent):** design for **AR** as primary session surface when capable; movement remains gameplay authority; audio is supporting/fallback. Phase 0 promotes this identity into binding docs.
## UI product vs engineering practice
diff --git a/docs/design/TESTFLIGHT_RC_CHECKLIST.md b/docs/design/TESTFLIGHT_RC_CHECKLIST.md
index 8c11945..2ec5bd0 100644
--- a/docs/design/TESTFLIGHT_RC_CHECKLIST.md
+++ b/docs/design/TESTFLIGHT_RC_CHECKLIST.md
@@ -117,7 +117,7 @@ git diff --check
| `docs/legal/TERMS.md` | Present | Same review gate for public store |
| `docs/legal/SAFETY.md` | Present | Walking safety expectations |
| `docs/legal/NOTICES.md` | Present | Third-party / Apple frameworks |
-| `LICENSE` | Apache-2.0 | OSS; App Store listing is separate |
+| `LICENSE` | Proprietary (Zero State) | App Store listing is separate |
| Location When-In-Use usage string | In Info.plist | Foreground walk only |
| Camera usage string | In Info.plist | AR session only |
| Health share usage string | In Info.plist | Optional enrichment; Demo never requires |
diff --git a/docs/legal/NOTICES.md b/docs/legal/NOTICES.md
index ab045a7..b23d4fa 100644
--- a/docs/legal/NOTICES.md
+++ b/docs/legal/NOTICES.md
@@ -1,19 +1,18 @@
-# Notices and open-source attribution
+# Notices and attribution
```yaml
document_id: WAYKIN-LEGAL-NOTICES
-version: 1.0
-date: 2026-07-20
+version: 2.0
+date: 2026-07-29
```
-## Waykin source
+## Waykin source (Zero State)
-Copyright contributors to the Waykin project.
-Licensed under the **Apache License, Version 2.0** — full text: [LICENSE](../../LICENSE).
+Copyright (c) 2024–2026 **Zero State**.
+All rights reserved.
-```
-http://www.apache.org/licenses/LICENSE-2.0
-```
+Waykin is **proprietary software**. Full terms: [LICENSE](../../LICENSE).
+No Proprietary, MIT, or other open-source license is granted for the current tree.
## Platform frameworks (runtime)
@@ -36,8 +35,8 @@ Current app typography uses **system fonts** unless otherwise noted.
## Generated and artist assets
-- Procedural / generated mid-LOD assets are project work product.
-- Artist blend sources under `ArtSource/` retain provenance receipts; redistribution follows the project Apache license unless a file states otherwise.
+- Procedural / generated mid-LOD assets are Zero State work product.
+- Artist blend sources under `ArtSource/` retain provenance receipts; redistribution is governed by the project proprietary LICENSE unless a file states a separate third-party license.
## No endorsement
diff --git a/docs/legal/PRIVACY.md b/docs/legal/PRIVACY.md
index abdb054..4576308 100644
--- a/docs/legal/PRIVACY.md
+++ b/docs/legal/PRIVACY.md
@@ -9,7 +9,7 @@ status: DRAFT_FOR_PRODUCT_REVIEW
**Last updated:** 2026-07-20
-This notice describes how the **Waykin** iOS application handles information in its current solo-MVP form. It applies to the open-source project and local builds of the app. A commercial publisher may replace this with a jurisdiction-specific privacy policy before App Store release.
+This notice describes how the **Waykin** iOS application handles information in its current solo-MVP form. It applies to Zero State’s Waykin product and local builds of the app. A commercial publisher may replace this with a jurisdiction-specific privacy policy before App Store release.
## Summary
diff --git a/docs/legal/README.md b/docs/legal/README.md
index b6ef42a..1979cfa 100644
--- a/docs/legal/README.md
+++ b/docs/legal/README.md
@@ -16,8 +16,8 @@ They are not a substitute for counsel. Product owners should review before store
| [PRIVACY.md](PRIVACY.md) | What data Waykin uses, stores, and does **not** sell |
| [TERMS.md](TERMS.md) | Terms of use for the software and walking experience |
| [SAFETY.md](SAFETY.md) | Outdoor movement safety brief (also shown in-app) |
-| [NOTICES.md](NOTICES.md) | Open-source license and third-party notices |
-| [../LICENSE](../../LICENSE) | Apache License 2.0 (repository source code) |
+| [NOTICES.md](NOTICES.md) | Proprietary ownership (Zero State) and third-party notices |
+| [../LICENSE](../../LICENSE) | Proprietary license — property of Zero State |
## In-app
diff --git a/docs/legal/TERMS.md b/docs/legal/TERMS.md
index ece65dc..a9e7079 100644
--- a/docs/legal/TERMS.md
+++ b/docs/legal/TERMS.md
@@ -9,16 +9,16 @@ status: DRAFT_FOR_PRODUCT_REVIEW
**Last updated:** 2026-07-20
-These terms govern use of the **Waykin** software as provided by this open-source project. If you redistribute or ship a branded build, replace or extend these terms as required by your counsel and store policies.
+These terms govern use of the **Waykin** software, which is **proprietary property of Zero State**. If Zero State redistributes or ships a branded build, replace or extend these terms as required by counsel and store policies.
-## 1. License to the code
+## 1. Ownership and license to the code
-Source code is licensed under the **Apache License 2.0** — see [LICENSE](../../LICENSE) and [NOTICES.md](NOTICES.md).
-That license governs **copyright in the software**, not your walking activity or any local data you generate.
+Waykin is the **property of Zero State**. Source code and related materials are **proprietary** — see [LICENSE](../../LICENSE) and [NOTICES.md](NOTICES.md).
+No open-source license is granted. Ownership of the software does not include ownership of your walking activity or any local data you generate on your device.
## 2. The experience
-Waykin is an **audio-first adaptive walking experience** with a companion (Lira). It is entertainment / experiential software.
+Waykin is an **AR-designed adaptive walking experience** with a companion (Lira). AR is a presentation surface, not navigation or safety authority, and the experience remains entertainment / experiential software.
**Not medical advice.** Waykin is not a medical device, not a diagnostic tool, and not a substitute for professional advice. Do not rely on it for health, navigation safety, or emergency response.
@@ -34,7 +34,7 @@ You may pause or end a session at any time; stopping is never framed as failure.
You agree not to:
- use the software to harass, harm, or endanger others;
-- reverse-engineer proprietary platform SDKs beyond what the open-source license and applicable law allow;
+- reverse-engineer Waykin or proprietary platform SDKs beyond what applicable law expressly allows;
- misrepresent experimental AR or outdoor quality as certified without evidence;
- use the software where prohibited by law.
@@ -44,11 +44,11 @@ MVP local builds may operate **without** a Waykin account. Future online feature
## 6. Disclaimer of warranties
-THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, express or implied, including but not limited to warranties of merchantability, fitness for a particular purpose, and noninfringement, to the maximum extent permitted by law. See also Apache License 2.0 §7–8.
+THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, express or implied, including but not limited to warranties of merchantability, fitness for a particular purpose, and noninfringement, to the maximum extent permitted by law. See also [LICENSE](../../LICENSE).
## 7. Limitation of liability
-To the maximum extent permitted by law, contributors and copyright holders are not liable for any damages arising from walking outdoors, AR use, location inaccuracy, audio distraction, or reliance on the software. You assume the risks of outdoor movement.
+To the maximum extent permitted by law, Zero State and other copyright holders are not liable for any damages arising from walking outdoors, AR use, location inaccuracy, audio distraction, or reliance on the software. You assume the risks of outdoor movement.
## 8. Third-party platforms
@@ -60,5 +60,5 @@ Terms may be updated in-repo. Continued use after a published update constitutes
## 10. Contact
-Project issues: GitHub repository for Waykin.
-Commercial operators must provide a support contact before public distribution.
+Project issues: GitHub repository for Waykin (owner: Zero State).
+Licensing and commercial inquiries: Zero State via the repository maintainers.
diff --git a/docs/plans/AR_APP_REDESIGN_PLAN.md b/docs/plans/AR_APP_REDESIGN_PLAN.md
index 61cb1b7..62b6d8e 100644
--- a/docs/plans/AR_APP_REDESIGN_PLAN.md
+++ b/docs/plans/AR_APP_REDESIGN_PLAN.md
@@ -46,9 +46,9 @@ Redesign Waykin as an **AR-designed walking companion app** while **preserving**
---
-## Phase 0 — Product law (docs / agents only)
+## Phase 0 — Product law (docs / agents only) — COMPLETE via issue #252
-**Objective:** Make “AR-designed” the written product contract so humans and agents stop optimizing for audio-first identity.
+**Objective:** Make “AR-designed” the written product contract so humans and agents stop optimizing for the prior audio-first identity. **Status:** complete via issue #252; no production paths were unfrozen.
### Work items
diff --git a/project.yml b/project.yml
index a2e86e7..746e03e 100644
--- a/project.yml
+++ b/project.yml
@@ -79,7 +79,7 @@ targets:
UIColorName: LaunchBackground
UIImageName: Lira_Glyph_Dawn
UIImageRespectsSafeAreaInsets: true
- # Audio-first: cues must survive screen lock / phone-in-pocket during a walk.
+ # Pocket-safe supporting audio: cues must survive screen lock / phone-in-pocket during a walk.
UIBackgroundModes: [audio]
dependencies:
- package: Waykin
diff --git a/scripts/validate.sh b/scripts/validate.sh
index c80e4fa..2e185ab 100755
--- a/scripts/validate.sh
+++ b/scripts/validate.sh
@@ -41,6 +41,15 @@ git status --short || true
EXIT_CODE=0
+echo ""
+echo "--- Version parity (VERSION / BUILD / Info.plist / project.yml) ---"
+if python3 "${REPO_ROOT}/Tools/version.py" check; then
+ echo "version parity: PASS"
+else
+ echo "version parity: FAIL"
+ EXIT_CODE=1
+fi
+
echo ""
echo "--- Structural guard: WaykinCore framework isolation ---"
if "${SCRIPT_DIR}/check_core_framework_isolation.sh"; then
diff --git a/skills/MANIFEST.toml b/skills/MANIFEST.toml
index 3387faa..b83b9c1 100644
--- a/skills/MANIFEST.toml
+++ b/skills/MANIFEST.toml
@@ -5,8 +5,8 @@ name = "waykin-skill-pack"
version = "1.0.0"
repo = "scrimshawlife-ctrl/Waykin"
baseline_main = "60afcef"
-license = "Apache-2.0"
-author = "Waykin engineering"
+license = "Proprietary"
+author = "Zero State"
[install]
# Relative skill directories under skills/
diff --git a/skills/_shared/references/REPO_CONTEXT.md b/skills/_shared/references/REPO_CONTEXT.md
index cd82f23..9d3cf1d 100644
--- a/skills/_shared/references/REPO_CONTEXT.md
+++ b/skills/_shared/references/REPO_CONTEXT.md
@@ -4,7 +4,7 @@ Read this once at skill start. Prefer absolute repo paths from `git rev-parse --
## Product
-- Audio-first **walking** companion app (Lira). Solo MVP.
+- AR-designed **walking** companion app (Lira). Solo MVP. Movement is gameplay authority; AR is the primary designed session surface when capable; audio is a required supporting channel.
- Binding scope: `docs/SOLO_MVP_SCOPE.md`, `WAYKIN_SPEC.md`, `ARCHITECTURE.md`, `AGENTS.md`, `docs/governance/DOCUMENT_AUTHORITY.md`.
- One activity: walking. Not run/cycle expansion without scope promotion.
diff --git a/skills/waykin-audio/SKILL.md b/skills/waykin-audio/SKILL.md
index f8f59e6..8e6c1fe 100644
--- a/skills/waykin-audio/SKILL.md
+++ b/skills/waykin-audio/SKILL.md
@@ -12,7 +12,7 @@ metadata:
# waykin-audio
-Waykin is **audio-first**. Semantic cues are Core; filenames and AVAudioSession are App.
+Waykin is **AR-designed**, with audio as a required supporting channel for presence, accessibility, safety, and pocket use. Semantic cues are Core; filenames and AVAudioSession are App.
## 0. Ownership
diff --git a/skills/waykin-release/SKILL.md b/skills/waykin-release/SKILL.md
index dc8996e..b24f188 100644
--- a/skills/waykin-release/SKILL.md
+++ b/skills/waykin-release/SKILL.md
@@ -51,7 +51,7 @@ make check-lira-usdz
Read and confirm present:
- `docs/legal/PRIVACY.md`, `TERMS.md`, `SAFETY.md`, `NOTICES.md`
-- `LICENSE` Apache-2.0
+- `LICENSE` Proprietary (Zero State)
- Usage descriptions: Location When-In-Use, Camera, Health share
- No background location entitlement unless product explicitly adds it (MVP: foreground walk only)