Repository navigation
Releases
Cognitum Seed v0.24.3
Cognitum Seed v0.24.3
Patch release reducing steady-state Mesh control-plane reads and hardening CSI accepted-packet state. It preserves the v0.24.2 on-device data, identity, pairing, and cog contracts.
Changes since v0.24.2
- Replace unconditional Mesh peer, CRL, and ACL polling with protocol-v1 versioned snapshots. The Seed persists the last applied scope, versions, and payloads atomically; unchanged heartbeats fetch no snapshots, while legacy server responses remain supported during fleet adoption.
- Apply CRL snapshots before peers, remove revoked peers and routes immediately, retain the last valid same-scope CRL across snapshot failures, and retry missing, malformed, stale, or mismatched snapshots without discarding valid cached control state.
- Persist authoritative CSI accepted-packet state in the dedicated relay data directory. Packet-specific validation, replay high-water reservations, bounded source/type cursors, compatibility preflight, and fail-closed state handling prevent rejected traffic from refreshing data-source availability.
- Reconcile the Seed inference evidence contract with the accepted-packet authority; synthetic and unauthenticated compatibility paths remain explicitly distinguished from verified real-source evidence.
Compatibility and rollout
- The Mesh server must remain in
MESH_LEGACY_HEARTBEAT_PAYLOAD=autowhile older Seeds are active. Setting it toneveris not part of this release. - OTA replaces only the agent binary. Device identity, TLS and pairing material, WiFi configuration, vector data, installed cogs, and the persisted Mesh control cache are preserved.
- The relay artifact and compatibility preflight are a separate Path-B OTA asset. A missing or incompatible relay update must not prevent the agent update, but ADR-108 relay claims require its signed artifact and hardware preflight to pass.
- Fleet rollout starts with one signed candidate OTA, advances through the supported percentage-gated Path-B channel, and promotes the public Path-A
latest.jsononly after staged health evidence. Path A itself is not cohort-aware.
Publication gates
- Required Seed CI and security checks pass on the exact release revision.
- The canonical
Dockerfile.armhfbuild usesmesh,sparse-llm; the extracted ARM ELF reports0.24.3, and its SHA-256 matches every published target. - The Ed25519 signature over the raw 32-byte SHA-256 digest verifies against the public key embedded in the agent before publication.
- A connected physical Seed performs the update through the OTA client—not a manual binary copy—and proves signature verification, atomic replacement, restart, exact hash, retained Mesh cache, protocol-v1 heartbeats, and an executable rollback artifact.
- The v0.24.2 manifests and immutable artifact hashes are preserved before any production pointer changes.
- Legacy Mesh payload retirement remains gated on seven consecutive days of full active-fleet protocol-v1 adoption and the remaining ADR-140 authentication and scope conditions.
Cognitum Seed Agent v0.24.1
Cognitum Seed v0.24.1
Release candidate for standalone Seed ownership and account-backed cloud inference. It includes the v0.24.0 feature candidate plus the final authorization and operational-truthfulness fixes merged before canary verification.
Changes since the v0.24.0 candidate
- Scope the USB-established
owner-browserbearer to owner OAuth routes. It cannot authorize controller/admin endpoints; V0 controller pairing remains independent. - Return
503 Service Unavailablewhen the live cog registry cannot be fetched or parsed instead of returning a success response containing an error object. - After applying cog configuration, verify that a restarted cog survives its initial startup window before reporting
restarted: true. - Log unsupported cog configuration types when their values are deliberately withheld from the command line.
- Report Cognitum account connection truthfully: account-backed Cloud AI additionally requires a compatible
cloud-inferencecog v0.1.1 or newer. - Reap cog children after ordinary exit and use the same zombie-aware liveness predicate for app listing and restart decisions (#298).
- Distinguish a reachable Seed whose hub/provider cog failed from a genuinely offline Seed in Tier-3 failure messages.
Verification required before publication
- All required CI lanes must pass on the exact release revision.
- Build the exact armhf artifact from that revision and record its SHA-256 digest.
- Retain and verify the v0.23.3 rollback artifact before canary installation.
- Install the exact candidate on the USB canary and verify reported version and executable digest.
- Verify USB owner claim, Cognitum sign-in state, account-dashboard link, logout, and absence of token material in browser-visible output.
- From LAN, verify the owner bearer can access owner OAuth status but cannot authorize a controller/admin endpoint.
- Verify V0 controller pairing remains independent.
- Verify cog-registry outage behavior and a representative cog configuration restart on the device.
- Do not publish account-backed Tier-3 capability until
cloud-inferencev0.1.1 or newer is production-published and verified separately.
Cognitum Seed Agent v0.23.0
Cognitum Seed v0.23.0
Cloud inference release. A seed can now answer with a full-size model instead of its on-device one, by forwarding to the metered Cognitum completions plane through the new cloud-inference provider cog. This is the first release where a seed reaches Tier-3, and the first where the seed carries an owner credential at all. Minor bump rather than a patch: this is new user-facing capability, not a fix. Lands under ADR-106 (seed side) and ADR-090 §e (provider-cog model).
Highlights
-
Tier-aware completion — the seed dispatches to Tier-3 (ADR-090 §e, PR #255, #268).
/api/v1/llm/route-completenow decides between local and cloud fromX-Cognitum-Min-Tier/X-Cognitum-Max-Tier, and forwards to thecloud-inferencecog when cloud is asked for and the device is online. Offline with cloud requested degrades to local and says so (downgraded: true) rather than failing silently. -
The dispatch actually ships now (ADR-106 §2b, PR #268).
tier_routerwas gated behind#![cfg(all(feature = "agents", feature = "local-llm"))], and the canonical armhf release builds--features mesh,sparse-llm— so the module compiled out of every shipped binary. The routing code existed, was tested, and was dead on the fleet. It is now ungated and in the release build. -
The local leg is honest (ADR-106 §2b, PR #268). On a build with no on-device model,
local_completepreviously implied a local answer was possible. It now returns a503that states plainly that the seed has no on-device model and points atX-Cognitum-Min-Tier: 3for cloud. We do not claim inference we cannot perform. -
Seed carries an owner
cog_key, scoped to one cog (ADR-106 §4, PR #269). NewPOST/GET /api/v1/llm/cloud-keyplus a Cloud AI step in/setup. The key is validated for shape (cog_+ 64 hex) at the boundary, stored0600via atomic tmp→rename, and surfaced only as a 12-char prefix — never echoed back. Least privilege is enforced by cog id:env_for_app_dirhandsCOG_CLOUD_INFERENCE_KEYtocloud-inferenceand to nothing else, because cogs are third-party code and no other cog has any business holding the owner's billing credential.The key is pasted, not signed-in for. A seed's primary surface is a network-isolated USB-gadget API, Firebase ID tokens live ~1h against a rotating JWKS, and someone standing at an offline seed cannot obtain one. Paste matches what the V0 wizard already does (ADR-258 §4).
Also in this release
app-registry.jsonreconciled with the live fleet catalog (PR #270). Both repo copies were pinned at v2.1.0 / 105 cogs while the catalog seeds actually read had moved on. The documented "bump it by hand and upload" path would have deletedpresence-fieldfrom the live store and regressedsha256for six cogs includinghealth-monitor. Now byte-identical to live v2.3.1.
Validation
- Host unit tests:
cargo test (foundation),cargo test (default-features),cargo llvm-covall green on each merged PR (#255, #268, #269, #270).cloud_key.rsships 7 tests covering shape validation,0600round-trip, rotation, absent/whitespace keys, prefix non-leakage, and the least-privilege matrix (onlycloud-inferencereceives the key). - armhf cross-compile: built via
Dockerfile.armhfwith the canonical--features mesh,sparse-llm. - On-hardware (cognitum-8b40, Pi Zero 2 W), 2026-07-17 — full flow end-to-end:
cloud-inferenceinstalled from the live store; downloaded binary sha256 matched the published artifact byte-for-byte (418b128f…).- Key pasted via the API; stored
0600 root:root;GETreturned{"configured":true,"prefix":"cog_b0610613"}with no key tail in any response. - Least privilege confirmed by reading
/proc/<pid>/environas root:cloud-inferenceheldCOG_CLOUD_INFERENCE_KEY; the concurrently-runninghealth-monitordid not. - Tier-3 completion originated on the seed → HTTP 200 → billed on the prod completions plane:
usage_ledgerrow085d4ccd-02d2-425f-a688-f9c9e3596788, tierlow,z-ai/glm-5.2, 63 tokens, $0.00012465, 1593 ms. - Malformed key rejected
400at the boundary with a message pointing the owner atcognitum.one/order.
Known issues / deferred
- Local fallback is not a real answer on a stock seed. The shipped build carries
sparse-llm, whoseweight_modeisstub; ADR-094 measures the gguf-tied path at 0.69–0.98 tok/s via a layer-0 attention + 29×FFN approximation, and full 30-layer inference does not fit the Pi Zero 2 W's 512 MB envelope. Tier-3 is therefore the only path to a genuine full-size answer today; offline degrade is honest about this rather than serving plausible garbage. - No CI check catches "module gated out of the shipped build" — the class of defect #268 fixed. Nothing would fail today if a feature-gated module silently left the release binary again.
- OAuth device onboarding (ADR-259) remains Proposed/BLOCKED and post-launch; paste is the launch mechanism.
- Promo/sponsored allowances are a cloud-side concern on the owner's account (ADR-258 §6), not a device header. No device change is involved.
Cognitum Seed Agent v0.22.22
Cognitum Seed v0.22.22
Fixes FAT corruption of the USB trust certificate file, which is very likely the actual root cause of the original "Not Secure" browser report — the trust installer was silently failing on macOS even when a customer ran it correctly.
Fixed — trust/cognitum-ca.pem corrupted by an unsafe gadget-image write
sync_ca_to_gadget() (auto-ca-cert.sh) loop-mounted gadget.img read-write while cognitum-gadget.service still had it bound as the active USB mass-storage backing file — the exact FAT corruption pattern seed#244 already identified and worked around in auto-first-boot.sh and update-gadget-docs.sh, but sync_ca_to_gadget() never got the same fix.
Confirmed on hardware: a device's trust/cognitum-ca.pem had 163 trailing NULL bytes appended after a valid PEM footer (785 bytes of real content in a 948-byte file). openssl silently ignores the trailing garbage and reports the certificate as fine — which is why every fingerprint check earlier in this investigation looked correct — but macOS's Security framework rejects the whole file outright (SecCertificateCreateFromData: Unknown format in import), so security add-trusted-cert fails with no visible error. This means the trust-install step could fail silently for any customer, independent of the onboarding-instructions fix shipped in v0.22.20.
sync_ca_to_gadget()now uses the same stop-service/mount/write/unmount/restart-service pattern as the other two gadget writers.update-gadget-docs.sh(doc-rev 2 → 3): while already safely mounted for the README/STATUS rewrite, comparestrust/cognitum-ca.pemagainst the source/var/lib/cognitum/tls/ca.pembyte-for-byte and repairs it if different — this is what actually fixes already-corrupted files on the fleet without waiting for a fresh cert issuance.- Migration sentinel bumped to v3 so devices already migrated to rev 2 (from v0.22.20/v0.22.21) get re-triggered for this repair too.
Validation
- Host:
cargo checkclean, all 1051 unit tests pass;bash -nclean on both modified scripts. - On-hardware: confirmed the corruption directly (948-byte file, 785 bytes of valid PEM, 163 trailing NULL bytes) on a fielded test seed, then verified the repaired
sync_ca_to_gadget()and the doc-rev 3 migration against it.
See also
- v0.22.20 (trust-install onboarding regression fix)
- v0.22.21 (force re-issue of old 1825-day-validity certs)
- platform-docs ADR-093
Cognitum Seed Agent v0.22.21
Cognitum Seed v0.22.21
Forces re-issuance of TLS leaf certificates signed under the pre-v0.22.20 5-year (1825-day) policy. Binary-compatible with paired clients and existing cog manifests.
Fixed — old 5-year certs never self-corrected, breaking Safari indefinitely
v0.22.20 reduced device leaf certificate validity to 825 days (Apple's browser-trusted TLS cap) and fixed the corresponding source in the cognitum-cert-signer Cloud Function. That fix was merged but the live Cloud Function was never actually redeployed until today — every cert issued between the merge and the redeploy (and every cert issued before it) was still a 5-year cert, confirmed live on a fielded test seed that connected to WiFi for the first time today and received a fresh 1825-day certificate from the not-yet-redeployed function.
Separately, and more durably: the existing renewal checks (auto-ca-cert.sh's -checkend skip-check, and the agent's periodic check_cert_renewal()) only look at time-to-expiry. A 5-year cert with 4+ years left on it would never trigger renewal on its own, so simply redeploying the Cloud Function does nothing for certs already issued — they'd sit there, still breaking Safari, for years.
Added an independent check: total validity span (notAfter - notBefore), not time-to-expiry. Any cloud-issued leaf with more than 825 days of span is force-reissued, the same way the seed#197 CA-migration guard forces a re-issue on a bad CA. Convergent: a cert issued under the now-fixed policy already has <=825 days of span, so this check becomes a no-op from then on.
Validation
- Host:
cargo checkclean, all 1051 unit tests pass;bash -nclean on the modified script. - On-hardware: deployed the updated script to a fielded test seed carrying a live 1825-day cert issued earlier the same day. Confirmed it logged the pre-ADR-093-policy detection, force-reissued through the redeployed cert-signer, and the resulting cert measured exactly 825 days. A follow-up run against the fresh cert correctly skipped (idempotent). Agent health confirmed via
/api/v1/statusafter restart.
See also
- v0.22.20 (original 825-day validity fix + trust-install onboarding fix)
- platform-docs ADR-093
Cognitum Seed Agent v0.22.20
Cognitum Seed v0.22.20
TLS trust-install onboarding fix + device leaf certificate validity reduction. Binary-compatible with paired clients and existing cog manifests.
Fixed — browser "Not Secure" warning surfaced by an external contributor
An external contributor reported their Seed's https:// link shows as "Not Secure" with no trust chain the browser recognizes. Investigation found the private CA architecture (ADR-061) works correctly, but two real defects were compounding the symptom — see platform-docs ADR-093 for the full writeup.
1. Trust-install onboarding regression
auto-first-boot.sh's USB gadget README.txt/STATUS.txt generator had regressed the ADR-075 trust-install step (trust/install-trust.*) — never mentioned, omitted from the file listing — and leaked internal provisioning language ("TLS Status: TEMPORARY (run sign-device-cert.sh)") to customers. Every seed that had already completed first-boot carried this permanently, with no trigger to ever refresh it.
Fixed by extracting the generator into a new, idempotent update-gadget-docs.sh (doc-rev gated) embedded in the agent binary, so this OTA delivers the corrected README/STATUS to already-provisioned seeds via a one-time migration sentinel — no new SD image required. guide.html/open.html onboarding now leads with the on-drive trust/ installer instead of a manual ssh + cat ca.pem workaround.
2. Leaf certificate validity exceeded Apple's browser cap
Device leaf certs were issued at 1825 days (5 years), exceeding Apple's 825-day maximum for browser-trusted TLS — Safari rejected the certificate even after a user correctly installed and trusted the Device CA. Reduced to 825 days across every issuance path (cloud cert-signer, local-CA fallback, legacy manual provisioning), with expiry-aware renewal (openssl -checkend) added to auto-ca-cert.sh and the agent's existing 6-hourly OTA-check loop, replacing the previous unconditional skip.
Validation
- Host:
cargo checkclean, all 1051 existing unit tests pass; all modified/new shell scripts passbash -n. - On-hardware (
cognitum-8b40): deployed the built binary, confirmedbootstrap_helpers()installed the new script + systemd unit and the migration fired —README.txt/STATUS.txtrewritten live, observed via the mounted USB drive;guide.htmlserves the corrected text;/api/v1/statushealthy; the checkend-gated skip/renew logic validated against both the live cert and a synthetic near-expiry cert; a forced OTA loop iteration (POST /api/v1/ota/check-now) exercised the new renewal-check code path with no regression.
See also
- platform-docs ADR-093 (full investigation + design rationale, including why a public-cert/ACME path was evaluated and rejected for the primary USB flow)
- cognitum-one/mesh#7 (matching
cognitum-cert-signervalidity fix)
Cognitum Seed Agent v0.22.19
Cognitum Seed v0.22.19
Setup-AP stability fix for BCM43430/1 seeds, found while onboarding cognitum-3ffe over WiFi (2026-06-29). Binary-compatible with paired clients and existing cog manifests.
Fixed — Setup AP flapping on BCM43430/1 (seed#250)
On Pi Zero 2 W units with the BCM43430/1 WiFi chip, the first-run Cognitum-Setup-XXXX AP flapped — present in the WiFi list one moment, gone the next, and "not started" in the UI when caught mid-cycle. The API was honest (setup_wifi.active toggled per cycle); the AP genuinely cycled. Stable on BCM43436b0 seeds. Two compounding causes, fixed together:
1. Chip-aware AP mode (cognitum-setup-wifi.sh)
BCM43430/1's only AP-capable interface combination is #{ managed } <= 1, #{ AP } <= 1, … #channels <= 1 — AP and station must share one channel. While wlan0 scans/channel-hops, the driver tears the virtual wlan0_ap down (unmanaged-link-not-init). The old logic chose VIRTUAL mode because iw dev wlan0 interface add wlan0_ap type __ap succeeds (but the interface isn't sustainable).
Now setup-wifi.sh inspects iw phy interface combinations: if AP is only offered at #channels <= 1, it uses the exclusive AP path (hostapd directly on wlan0). BCM43436b0 (AP combo with #channels >= 2) keeps the concurrent virtual AP.
2. auto-mesh no longer flaps the Setup AP (auto_mesh_loop)
The mesh auto-formation loop stopped cognitum-setup-wifi.service after 3 client-less minutes to rescan for peer seed APs — tearing down the human-onboarding AP even on a lone seed with no peer to join. It now only abandons the AP to join if a peer seed AP (Cognitum-Setup-* or the configured custom prefix) is actually present in the pre-AP scan cache; otherwise it keeps the Setup AP up.
Validation
- Host:
cargo checkclean. - On-hardware (
cognitum-3ffe/ BCM43430/1): AP comes up in EXCLUSIVE mode; auto-mesh logsno peer seed AP in scan cache — keeping setup AP up for onboarding; hostapd stays up (uptime 294s, no teardown);GET /api/v1/network/status→setup_wifi.active: true.
Cognitum Seed Agent v0.22.18
Cognitum Seed v0.22.18
V0 ↔ seed discovery + pairing fixes, found while testing seed adoption from V0 appliances on dev3 (2026-06-29). Binary-compatible with paired clients and existing cog manifests.
Fixed
mDNS discovery (seed#247, pairs with v0-appliance#250)
A live, reachable Wi-Fi seed (cognitum-c8ab @ 192.168.1.96) returned scanned:0 from a V0's "Discover seeds". Root cause: the seed advertised no mDNS service — /etc/avahi/services/ was empty. v0.22.18 bakes a _cognitum._tcp avahi service file into the image, so every seed is discoverable on the LAN (wlan0 + usb0) from first boot.
Adoptable after AP setup (seed#248)
A seed set up over its own Setup AP was discovered + reachable from a V0 but un-pairable — Pair returned 403 "pairing window can only be opened from localhost, USB, Setup WiFi AP, or with a valid Bearer token". Root cause: the setup wizard claimed the device with a throwaway setup-wizard pairing it never needed and never cleaned up, leaving an orphaned client that blocks V0 adoption. The wizard no longer creates that pairing, so the seed finishes setup unpaired and adoptable. (setup.html is bundled into the agent binary, so this ships in the v0.22.18 agent.)
Validation
- Host:
cargo test+ armhfcargo check(both PRs CI-green pre-merge). - On-hardware: golden image flashed — seed advertises
_cognitum._tcpand is adoptable by a V0 over WiFi without a manual unpair.
Cognitum Seed Agent v0.22.17
Cognitum Seed v0.22.17
Seed-side half of cognitum-one/v0-appliance#238: the proper RVF export contract endpoint so seed vectors reach the V0 aggregator store. Binary-compatible with paired clients and existing cog manifests.
Added — GET /api/v1/rvf/export (seed#241)
The V0 cognitum-rvf-aggregator pulls seed vectors via GET /api/v1/rvf/export?since=&limit=, expecting:
RvfExportPage { vectors: [{ id, embedding, meta }], next_epoch, total_remaining }
The seed never served that path → 404 every sync pass → seed vectors never reached the V0 store (confirmed live on a released-firmware seed over USB). The only existing surface, /api/v1/store/sync, was lossy — [u64,[f32]] tuples with no metadata.
This adds the contract endpoint with metadata + correct cursor paging:
rvf_bridge.rs—RvfExportRecord { id, embedding, metadata }+records_since_epoch(since, limit)filtering write-epoch >since, sorted by(epoch, id), returning(page, total_matching, next_epoch).api.rs—GET /api/v1/rvf/exportwired to the bridge, withsince/limitquery params.
Infrastructure — golden image now functional (seed#232)
Independent of the agent binary, the pi-gen CI golden-image build was repaired to match the live OTA fleet. Affects freshly-flashed images only; OTA-updated seeds are unchanged. Fixes:
- Trixie base — the agent is cross-compiled against glibc 2.39 (Debian Trixie); the image was being built on Bookworm (glibc 2.36), so the agent crash-looped with
GLIBC_2.39 not found. NowRELEASE=trixie. - Real agent binary — a
cp -rwas clobbering the cross-compiled agent with a Python reference stub. - USB composite gadget —
dwc2+libcompositemodules, first-bootgadget.imgbuild, and a first-boot reboot so the agent starts cleanly. - Setup AP — bundle
hostapd+dnsmasq(+ mask the stock services) so theCognitum-Setup-XXXXAP broadcasts. - SSH —
genesisuser is now/bin/bash+ working password (was locked +nologin). - Self-bootstrap — the
cognitum-agent --bootstrap-helpersdrop-in so the agent deploys its embedded helper units (gadget/usb-keepalive/usb-watchdog/auto-cert).
Validation
- Host:
cargo test+ armhfcargo check. - On-hardware: golden image flashed to a Pi Zero 2 W — agent runs (Trixie), USB gadget enumerates (COGNITUM drive +
169.254.42.1API), SSH works;GET /api/v1/rvf/exportreturns the paged contract.
v0.22.5 — Cognitum Seed Gold Image
Cognitum Seed v0.22.5 — Gold Image
Cross-platform onboarding stabilization release. Successor to the v0.22.4 gold image plus 4 code fixes uncovered during QE.
Downloads
| File | Size | SHA-256 |
|---|---|---|
cognitum-seed-v0.22.5.img.xz |
1136.8 MB | 2e74f5b041b7924842753194863d52b49a2b38a039a2387eeb4d3ff1c3f501f7 |
cognitum-seed-v0.22.5.img.xz.sha256 |
95 B | — |
RELEASE.txt |
manifest | — |
What's new vs v0.22.4
- PR #150 — ADR-098/099 cross-platform onboarding (USB gadget DHCP for Linux zero-touch; first-run setup-AP +
/setupwizard with captive portal; OTA-signing fix). - PR #154 + cogs#19 — Tailscale Mesh VPN cog (ADR-100). Userspace-mode
tailscaledruns asgenesis, installable on demand from the cog store's new Network category. - PR #162 (closes #161) —
/setupwizard now stops the setup-AP before station-connect. Pi Zero 2 W brcmfmac chip can't reliably keep AP+STA on different channels — pre-fix the WPA 4-way-handshake silently failed with a misleading "no secrets" error. Wizard now stops AP, waits for connect, restarts AP on failure. - PR #158 (closes #157) — Agent honors manifest
executable: truefor cog assets. Cogs shipping pre-fetched native binaries per ADR-095 §4 get +x at install time. - PR #156 — Cog-store filter pills derive from live registry (v0.22.4 shipped with hardcoded "All 66", no Network category, mutually-inconsistent counts). Now self-healing as the registry grows.
- PR #156 — Gold-image sanitize step rewrite. v0.22.4 image shipped with bundled state from the source Pi:
gadget-dhcp.leases(broke Mac DHCP for ~1h after every flash),mesh-config.json,measurements.json,update-log.json,ota-config.json. All wiped now. Post-sanitize assertion gate refuses to capture if state drifts. - PR #159 / #160 / #163 —
create-release-image.shbuild-script fixes (case-pattern parse bug, dd-truncate to last-partition end,--sanitize-onlyflag for workstation-side capture).
Bundled cognitum-agent: v0.22.5
Binary sha 61b504cd1b3c22cca85d9d510a0f3517d6704ba9e70c29f9f5f59b5b77c15b1b (also published as the agent release at seed-v0.22.5 and live on fleet auto-update via gs://cognitum-apps/firmware/latest.json).
Image provenance
Image is xz-compressed, zerofree'd, partition-truncated — captured via the manual workstation-side flow (per PR #163's --sanitize-only) which produces ~50% smaller output than the in-script dd+gzip path. Raw .img would be 14.56 GB (just the partitioned region of a 29 GB SD card); xz output is 1.14 GB.
Quick install
Fresh SD card (Linux / macOS):
xz -d -c cognitum-seed-v0.22.5.img.xz | sudo dd of=/dev/sdX bs=4M conv=fsync status=progress
syncWindows: Raspberry Pi Imager → "Use custom" → select the .img.xz directly.
First boot
- Power on the Pi Zero 2 W (~30-45 s).
- Join WiFi
Cognitum-Setup-XXXX(XXXX = last 4 of fresh device-id), passwordcognitum. - Captive portal auto-opens
http://192.168.4.1/setup. - Scan → pick your home WiFi → password → "You're all set". The AP self-tears-down (PR #162 fix) and the seed joins your network.
- Reach the seed at
https://cognitum.local:8443/afterwards.
Or onboard over USB
Plug the seed's inner micro-USB into a host, wait ~30 s, browse http://169.254.42.1/guide.
- Linux gets DHCP automatically (ADR-098).
- macOS / Windows APIPA still works as before.
Verified
- ✅ cognitum-3ffe (Pi Zero 2 W, 29 GB SD): full v0.22.5 flash + boot + setup-AP + phone-wizard + station-connect + persistence over reboot.
- ✅ cognitum-8b40 (canary): sideload agent + mesh/witness/MCP regression sweep — all green.
- ✅ Fresh-flash on a different SD card: new device-id
4f6b5b0d-…-c9f1, gadget-DHCP from boot, setup-AP broadcasting, all 7 critical endpoints 200.
Known issues
- BCM43430/1 brcmfmac chip variant still falls back to exclusive AP mode (kicks station off) per #152. BCM43436b0 fleet works correctly with #162.
framework.htmlIdentity card 403 on AP-side paired phone (#151) — separate MCP auth issue, fix pending.
🤖 QE pairing session