Date: Wed, 29 Jul 2026 16:23:00 +0000
Subject: [PATCH 3/4] license: Waykin is proprietary property of Zero State
Replace Apache-2.0 with proprietary LICENSE owned by Zero State.
Update README, legal docs, CONTRIBUTING, skill manifests, and
in-app Notices copy.
---
.grok/skills/waykin-release/SKILL.md | 2 +-
App/Onboarding/OnboardingFlowView.swift | 4 +-
CONTRIBUTING.md | 3 +
LICENSE | 270 ++++++------------------
README.md | 9 +-
docs/README.md | 4 +-
docs/design/TESTFLIGHT_RC_CHECKLIST.md | 2 +-
docs/legal/NOTICES.md | 21 +-
docs/legal/PRIVACY.md | 2 +-
docs/legal/README.md | 4 +-
docs/legal/TERMS.md | 18 +-
skills/MANIFEST.toml | 4 +-
skills/waykin-release/SKILL.md | 2 +-
13 files changed, 109 insertions(+), 236 deletions(-)
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/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/CONTRIBUTING.md b/CONTRIBUTING.md
index 20c9d13..955c4fd 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.
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/README.md b/README.md
index 4aad879..61c5350 100644
--- a/README.md
+++ b/README.md
@@ -23,7 +23,7 @@
-
+
@@ -168,7 +168,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.
@@ -264,4 +264,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/docs/README.md b/docs/README.md
index 7ac41f0..447b06b 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -91,8 +91,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/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 5e90640..a9e7079 100644
--- a/docs/legal/TERMS.md
+++ b/docs/legal/TERMS.md
@@ -9,12 +9,12 @@ 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
@@ -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/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/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)
From aba53aa7889fb73ff0decda30acf0bd4c07fddf8 Mon Sep 17 00:00:00 2001
From: Daniel
Date: Fri, 7 Aug 2026 11:29:18 -0700
Subject: [PATCH 4/4] =?UTF-8?q?docs:=20app-product=20suite=20=E2=80=94=20S?=
=?UTF-8?q?emVer=20tooling,=20ship=20docs,=20org=20README?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Add VERSION/BUILD and Tools/version.py with Info.plist/project.yml parity
(enforced in make validate). Add CHANGELOG, VERSIONING, TESTING, SHIP_CHECKLIST,
SECURITY, and CODE_OF_CONDUCT. Point README clone/badges at Zero-State-LLC.
---
BUILD | 1 +
CHANGELOG.md | 40 ++++++
CODE_OF_CONDUCT.md | 27 ++++
CONTRIBUTING.md | 3 +
Makefile | 5 +-
README.md | 28 +++-
SECURITY.md | 43 ++++++
Tools/version.py | 296 +++++++++++++++++++++++++++++++++++++++++
VERSION | 1 +
docs/README.md | 6 +
docs/SHIP_CHECKLIST.md | 103 ++++++++++++++
docs/TESTING.md | 80 +++++++++++
docs/VERSIONING.md | 77 +++++++++++
scripts/validate.sh | 9 ++
14 files changed, 714 insertions(+), 5 deletions(-)
create mode 100644 BUILD
create mode 100644 CHANGELOG.md
create mode 100644 CODE_OF_CONDUCT.md
create mode 100644 SECURITY.md
create mode 100755 Tools/version.py
create mode 100644 VERSION
create mode 100644 docs/SHIP_CHECKLIST.md
create mode 100644 docs/TESTING.md
create mode 100644 docs/VERSIONING.md
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 955c4fd..e5de4bf 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -48,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/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 61c5350..c0fc0af 100644
--- a/README.md
+++ b/README.md
@@ -19,8 +19,9 @@
-
-
+
+
+
@@ -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:
@@ -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
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/docs/README.md b/docs/README.md
index 447b06b..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
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/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/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