Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,14 @@ project uses version-gated milestones (see ROADMAP.md), not dates.

## [Unreleased]

## [0.2.0-alpha.3] - 2026-07-27

### Fixed
- The Windows installer now unwraps GitHub's release-array response before it
chooses the first published tag. Release discovery therefore remains correct
when more than one prerelease exists. The installer self-test covers multiple
releases, a leading draft, and newest-published selection.

## [0.2.0-alpha.2] - 2026-07-27

### Fixed
Expand Down
14 changes: 7 additions & 7 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 5 additions & 5 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ resolver = "3"
members = ["crates/audio", "crates/broadcast", "crates/core", "crates/gpu", "faces/app", "faces/cli", "faces/mcp"]

[workspace.package]
version = "0.2.0-alpha.2"
version = "0.2.0-alpha.3"
edition = "2024"
# Public repository license, matched by LICENSE and the README.
license = "Apache-2.0"
Expand All @@ -15,10 +15,10 @@ repository = "https://github.com/blisspixel/numinous"

[workspace.dependencies]
# Internal crates.
numinous-core = { version = "0.2.0-alpha.2", path = "crates/core" }
numinous-audio = { version = "0.2.0-alpha.2", path = "crates/audio" }
numinous-broadcast = { version = "0.2.0-alpha.2", path = "crates/broadcast" }
numinous-gpu = { version = "0.2.0-alpha.2", path = "crates/gpu" }
numinous-core = { version = "0.2.0-alpha.3", path = "crates/core" }
numinous-audio = { version = "0.2.0-alpha.3", path = "crates/audio" }
numinous-broadcast = { version = "0.2.0-alpha.3", path = "crates/broadcast" }
numinous-gpu = { version = "0.2.0-alpha.3", path = "crates/gpu" }
# Shared third-party versions; Cargo.lock pins the resolved public baseline.
clap = { version = "4", features = ["derive"] }
getrandom = "0.4"
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ is in [`docs/MUSIC.md`](docs/MUSIC.md) and [`docs/STUDIO.md`](docs/STUDIO.md).

## Release status

Numinous **0.2.0-alpha.2** is playable today. The native App, full-color CLI,
Numinous **0.2.0-alpha.3** is playable today. The native App, full-color CLI,
and MCP server all use the same deterministic mathematical core. The current
build includes 354 catalog rooms plus hidden content, 11+ games, six
lever-driven simulations, Journey progression, Formula Jam, local music and
Expand Down Expand Up @@ -197,7 +197,7 @@ changes are in [`CHANGELOG.md`](CHANGELOG.md).
<summary>Detailed engineering evidence for this alpha</summary>


Numinous is **version 0.2.0-alpha.2**. Its 0.2 Flagship Proof and 0.3 Tactile
Numinous is **version 0.2.0-alpha.3**. Its 0.2 Flagship Proof and 0.3 Tactile
Alpha agent-and-machine exits are met. It is not on the old 0.1 line: the 0.1
Public Foundation is complete.
Numinous already has a headless core, a
Expand Down
2 changes: 1 addition & 1 deletion docs/DESIGN.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
How Numinous feels, moment to moment, and the rules that keep it feeling that way.

**Implementation boundary, 2026-07-13:** this is the experience specification,
not a claim that every element below ships in 0.2.0-alpha.2. The native app,
not a claim that every element below ships in 0.2.0-alpha.3. The native app,
CLI, MCP face, catalog, Show, deterministic room voices, four Visual Eras,
Studio expression surface, and PNG postcard export are built. The full theme
system, loop export, native deep-link reopening, creator platform, and complete
Expand Down
2 changes: 1 addition & 1 deletion docs/DIGITAL_DEVELOPMENT.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ below evaluates Numinous, never whether a player is conscious or worthy.

Status: **Continuity designed, local agency foundation built.** Research
reviewed 2026-07-11; implementation boundary reviewed 2026-07-18. Numinous
0.2.0-alpha.2 speaks MCP but holds no per-mind episodic or temporal state
0.2.0-alpha.3 speaks MCP but holds no per-mind episodic or temporal state
between calls. Its existing shared local Journey, scores, Cairn drafts, radio
cache, and crash diagnostic are inspectable and explicitly erasable. The
journal, reflection, retrieval, per-mind continuity, and portable-memory design
Expand Down
4 changes: 2 additions & 2 deletions docs/DIGITAL_MINDS.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ That changes the product in five ways:
or performance can show how a mind has made the mathematics its own without
reducing that growth to a quiz score.

**Current evidence boundary:** version 0.2.0-alpha.2 does not provide cross-session
**Current evidence boundary:** version 0.2.0-alpha.3 does not provide cross-session
per-mind continuity through MCP. The server is stateless between calls, while
local Journey data and explicit erasure mechanisms provide only pieces of the
future design. Persistent, player-owned episodic and temporal memory is roadmap
Expand Down Expand Up @@ -144,7 +144,7 @@ For the person building this, the point is the *relationship*, giving their digi
- **Memory and continuity, so it can be a real friendship.** A friend remembers.
The planned design gives a digital mind **persistent, player-owned state**, its
own gallery, its own Codex, and its own journey across sessions. Full per-mind
continuity is not built in 0.2.0-alpha.2. The current alpha persists shared
continuity is not built in 0.2.0-alpha.3. The current alpha persists shared
local Journey and score state plus a small set of managed local artifacts and
an opt-in bounded experience journal with read, record, immutable correction,
versioned structured export, and confirmed residue-verified erase operations.
Expand Down
4 changes: 2 additions & 2 deletions docs/INTERFACES.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ The frame that makes the whole thing coherent: **one experience, three sensoria.
Each face has its own UX, deliberately designed for its user, not a lowest-common-denominator port. This doc specifies the UX we are going for in each.

**Implementation boundary, 2026-07-18:** all three faces are shipped from the
same headless core in 0.2.0-alpha.2. Descriptions below mix current behavior
same headless core in 0.2.0-alpha.3. Descriptions below mix current behavior
with the intended mature UX. `ROADMAP.md` and each section's explicit status
notes decide what is built.

Expand Down Expand Up @@ -520,7 +520,7 @@ scripts exercise the same surface in local validation.

## Roadmap position

- **Built by 0.2.0-alpha.2:** the headless core, full-color CLI, native app, and
- **Built by 0.2.0-alpha.3:** the headless core, full-color CLI, native app, and
bounded MCP server expose the shared catalog, play, creation, prediction,
challenge, learning, progression, and export foundations.
- **0.3 through 0.6:** deepen tactile behavior, understanding, sensory polish,
Expand Down
2 changes: 1 addition & 1 deletion docs/PLAYFUL.md
Original file line number Diff line number Diff line change
Expand Up @@ -324,7 +324,7 @@ compression-progress theory of fun). Sketches:

## Roadmap fit

- **Built by 0.2.0-alpha.2:** Guess the Shape across all three faces, daily
- **Built by 0.2.0-alpha.3:** Guess the Shape across all three faces, daily
seeds, shared scores, The Show, and the Studio expression slice with sound.
- **0.3 through 0.5:** deepen tactile game feel, understanding evidence, visual
identity, sound, performance, and accessibility.
Expand Down
2 changes: 1 addition & 1 deletion docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ The map of the blueprint. Use the reading paths to find your way in, and the
that owns it; every other doc links to that home rather than restating it. If
you find yourself duplicating a concept, stop and link instead.

Status: **0.2.0-alpha.2.** The 0.1 Public Foundation is complete, the 0.2
Status: **0.2.0-alpha.3.** The 0.1 Public Foundation is complete, the 0.2
Flagship Proof and 0.3 Tactile Alpha agent-and-machine exits are met, and 0.4
Understanding Alpha is active. The headless core, CLI, MCP server, windowed app,
GPU and audio adapters, 354 catalog rooms plus hidden content, 6 sims, 11+
Expand Down
12 changes: 6 additions & 6 deletions docs/ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ A version-gated plan from empty repo to a living world. Each milestone has a **g

## Progress (updated as we build; see CHANGELOG.md for detail)

**Current release state: 0.2.0-alpha.2, Flagship Proof exit met on the
**Current release state: 0.2.0-alpha.3, Flagship Proof exit met on the
agent-and-machine bar (2026-07-24).** The 0.1 Public Foundation remains
complete. Product 0.2 no longer waits on human stranger sessions: those sit
with 0.8 Closed Beta and 1.0 First Light. Independent macOS/Linux App execution
Expand Down Expand Up @@ -112,7 +112,7 @@ Detail below and in the version sections.
playhead. CLI render and sonify plus MCP play and listen accept the same
bounded input, and all three faces agree on action, goal, status, sound, and
earned reveal. The real stranger hallway and musician-led listening gates
remain open, so the package stays `0.2.0-alpha.2`.
remain open, so the package stays `0.2.0-alpha.3`.
- **Done (Cycle 100 audio-state truth):** the App now owns exactly one explicit
room-score, Studio, or radio program. Studio keeps formula audio through
focus returns and radio boundaries, selected radio rejoins live only after
Expand Down Expand Up @@ -240,7 +240,7 @@ Detail below and in the version sections.
invite tokens, Times Tables technical flagship path, Share still PNG and
short-loop APNG (App L and CLI loop), and local security gates are green on
this branch. Product 0.2 still requires the stranger hallway and other human
evidence listed above; the prerelease label remains `0.2.0-alpha.2`.
evidence listed above; the prerelease label remains `0.2.0-alpha.3`.
- **Done (mouse for every window game):** left-click hits Quiz choices, Munch
cells, Nim heaps and stones (commit move), Arcade cells (step toward or eat),
and Gauntlet munch/quiz stages. Keyboard routes remain. Subjective juice and
Expand Down Expand Up @@ -363,7 +363,7 @@ The full build design lives in `ARCADE.md` (the Muncher, the Vexations, the poke
Wave and classical cards into dynamics, number theory, probability,
topology, analysis, theory formation, and closing gems. MCP `list_rooms` count is 354; every
catalog room keeps motif, verb, poke, first-contact status, and reveal.
Version remains `0.2.0-alpha.2`; product 0.2 is not claimed complete. See
Version remains `0.2.0-alpha.3`; product 0.2 is not claimed complete. See
`CHANGELOG.md` Unreleased and `ROOMS.md` Built now.
- **Done (Conjecture Mill, cycle 122):** a deterministic blackboard enumerates
one complete finite grammar of primitive rational quadratic formulas. Every
Expand Down Expand Up @@ -591,7 +591,7 @@ without relying on the founder's machine or undocumented context?"
### 0.2 Flagship Proof ("does it slap?")

**Status:** exit met on the agent-and-machine bar (2026-07-24). Package label
remains `0.2.0-alpha.2` until a deliberate release cut. Human stranger hallway
remains `0.2.0-alpha.3` until a deliberate release cut. Human stranger hallway
is **not** part of this exit; it is deferred to 0.8 / 1.0.

**Goal:** Build **one** flagship room (and a second on the same pattern) to
Expand Down Expand Up @@ -1049,7 +1049,7 @@ where we stand (next), and the ordered path to 1.0.

## Where we stand (reviewed 2026-07-26)

The package is **0.2.0-alpha.2**. The 0.1 Public Foundation exit criterion is
The package is **0.2.0-alpha.3**. The 0.1 Public Foundation exit criterion is
complete. **0.2 Flagship Proof is exit-met on the agent-and-machine bar:** Times
Tables and Buffon engineered ahas, MCP wager path, agent hallway cohort PASS,
F9 capture, three faces, and green public CI. Human stranger hallway is
Expand Down
2 changes: 1 addition & 1 deletion docs/STUDIO.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ instrument and a shader toy. You type a little math, and it instantly *draws*
and *sings*. This is the "Create" posture (see `DESIGN.md`), and it is a core
part of the experience rather than a bonus feature.

**Implementation boundary, 2026-07-13:** 0.2.0-alpha.2 ships a bounded scalar
**Implementation boundary, 2026-07-13:** 0.2.0-alpha.3 ships a bounded scalar
expression parser and evaluator, animated plots, deterministic melody mapping,
an editable app panel, CLI and MCP operations, and first-version `.num` plus
link round trips in the CLI. Parse diagnostics use one-based source columns and
Expand Down
2 changes: 1 addition & 1 deletion docs/VISUALS.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ screenshot-worthy.** If you pause at a random instant and it is not beautiful,
that is a bug. This document owns both the current rendering boundary and the
target visual system.

**Implementation boundary, 2026-07-13:** 0.2.0-alpha.2 renders every room
**Implementation boundary, 2026-07-13:** 0.2.0-alpha.3 renders every room
deterministically through CPU `Surface` implementations and presents app frames
with `softbuffer`. Mandelbrot and Julia alone have targeted `wgpu` paths. Four
CPU-styled Eras ship: phosphor, 8-bit, vector, and modern. PNG room renders,
Expand Down
5 changes: 3 additions & 2 deletions docs/releases/v0.2.0-alpha.1.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
# Numinous 0.2.0 alpha 1

This prerelease is superseded by `v0.2.0-alpha.2`, which preserves the
installer's existing PATH choice during `numinous update`.
This prerelease is superseded by `v0.2.0-alpha.3`, which preserves the
installer's existing PATH choice and supports multiple published releases
during `numinous update`.

This first public prerelease makes Numinous practical to try without a Rust
toolchain. It packages the App, CLI, and MCP server for Windows x64, Linux x64,
Expand Down
14 changes: 9 additions & 5 deletions docs/releases/v0.2.0-alpha.2.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
# Numinous 0.2.0 alpha 2

This is the recommended Numinous prerelease. It includes the complete verified
binary and soundtrack distribution introduced in alpha 1, with one updater
correction: `numinous update` now preserves the installation's existing PATH
choice. A `-NoModifyPath` or `--no-modify-path` install stays out of PATH, while
an ordinary install retains the PATH entry it already owns.
This prerelease is superseded by `v0.2.0-alpha.3`, which keeps this version's
PATH-preserving update handoff and corrects Windows release discovery when
multiple published prereleases exist.

Alpha 2 includes the complete verified binary and soundtrack distribution
introduced in alpha 1, with one updater correction: `numinous update` preserves
the installation's existing PATH choice. A `-NoModifyPath` or
`--no-modify-path` install stays out of PATH, while an ordinary install retains
the PATH entry it already owns.

Install with the one-line command in
[`PLAY.md`](https://github.com/blisspixel/numinous/blob/main/PLAY.md). After that,
Expand Down
16 changes: 16 additions & 0 deletions docs/releases/v0.2.0-alpha.3.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# Numinous 0.2.0 alpha 3

This is the recommended Numinous prerelease. It includes the complete verified
binary and soundtrack distribution, preserves the installation's existing PATH
choice during `numinous update`, and correctly discovers the newest published
release when GitHub returns more than one prerelease.

Install with the one-line command in
[`PLAY.md`](https://github.com/blisspixel/numinous/blob/main/PLAY.md). After that,
`numinous update` checks GitHub for the latest published release and installs it
without deleting Journey, score, Cairn, journal, or verified soundtrack state.

This remains an alpha prerelease. It has strong automated, agent, renderer,
protocol, clean-package, and local Windows evidence, but it does not yet claim
broad physical clean-machine, accessibility, listening-panel, or human stranger
validation.
2 changes: 1 addition & 1 deletion faces/mcp/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ numinous-core = { workspace = true }
serde_json = { workspace = true }

[dev-dependencies]
numinous-app = { version = "0.2.0-alpha.2", path = "../app" }
numinous-app = { version = "0.2.0-alpha.3", path = "../app" }

[lints]
workspace = true
35 changes: 24 additions & 11 deletions scripts/install.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -140,16 +140,8 @@ function Get-ReleaseTarget {
return 'x86_64-pc-windows-msvc'
}

function Get-LatestReleaseTag {
Say "Checking the latest published release at $RepoUrl"
$headers = @{
Accept = 'application/vnd.github+json'
'User-Agent' = 'numinous-installer'
'X-GitHub-Api-Version' = '2022-11-28'
}
$releases = @(Invoke-RestMethod -UseBasicParsing -Headers $headers `
-Uri "$RepoApiUrl/releases?per_page=20")
$release = @($releases | Where-Object { -not $_.draft } | Select-Object -First 1)
function Select-LatestReleaseTag([object]$Response) {
$release = @($Response | Where-Object { -not $_.draft } | Select-Object -First 1)
if ($release.Count -ne 1) {
Fail "no published Numinous release is available yet; use -Source to build main."
}
Expand All @@ -160,6 +152,18 @@ function Get-LatestReleaseTag {
return $tag
}

function Get-LatestReleaseTag {
Say "Checking the latest published release at $RepoUrl"
$headers = @{
Accept = 'application/vnd.github+json'
'User-Agent' = 'numinous-installer'
'X-GitHub-Api-Version' = '2022-11-28'
}
$response = Invoke-RestMethod -UseBasicParsing -Headers $headers `
-Uri "$RepoApiUrl/releases?per_page=20"
return Select-LatestReleaseTag $response
}

function Read-ArchiveChecksum([string]$Path, [string]$ArchiveName) {
$item = Get-Item -LiteralPath $Path -Force -ErrorAction Stop
if ($item.PSIsContainer -or ($item.Attributes -band [IO.FileAttributes]::ReparsePoint) -or
Expand Down Expand Up @@ -779,7 +783,16 @@ function Test-PathPromotion {

function Test-InstallerSafety {
if (-not (Have 'tar')) { Fail 'installer safety self-test requires tar.exe.' }
$testBase = Join-Path $env:TEMP ('numinous-installer-test-' + [Guid]::NewGuid().ToString('N'))
$releaseFixture = @(
[pscustomobject]@{ draft = $true; tag_name = 'v9.9.9' },
[pscustomobject]@{ draft = $false; tag_name = 'v0.2.0-alpha.3' },
[pscustomobject]@{ draft = $false; tag_name = 'v0.2.0-alpha.2' }
)
if ((Select-LatestReleaseTag $releaseFixture) -cne 'v0.2.0-alpha.3') {
Fail 'release discovery self-test: the first published release was not selected.'
}

$testBase = Join-Path $env:TEMP ('numinous-installer-test-' + [Guid]::NewGuid().ToString('N'))
New-Item -ItemType Directory -Path $testBase | Out-Null
Protect-InstallDirectory $testBase
Protect-InstallDirectory $testBase
Expand Down