diff --git a/CHANGELOG.md b/CHANGELOG.md index da3bfd3..2d36602 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,8 +7,26 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.0.11] - 2026-07-26 + +### Added + +- Notes now include a focused Markdown toolbar for headings, bold, italic, + lists, code, and links, plus Write and Preview modes that render the current + unsaved draft. +- Configured Photon workspaces now show a private **Texts** tab only in the + Captain's personal `#main`. It lists every Skipper conversation, preserves + each thread, and lets the Captain select, resume, and continue it on desktop. + ### Changed +- Notes use a cleaner searchable sidebar, friendly titles without a visible + `.md` suffix, and a more spacious editor layout. +- Photon is now channel-agnostic: the configured Captain phone always texts + Skipper, one conversation remains current until `/new`, and legacy mapped + conversations move to the Captain's private Texts inbox during migration. + Desktop continuations share the same context without echoing to iMessage; + returning to the phone continues the conversation selected on desktop. - GitHub Releases now require the complete numbered acceptance ledger from a multi-item request, plus artifact and verification evidence. Generated commit summaries can no longer replace the user-facing change list. @@ -16,6 +34,21 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 clean build, signing, notarization, public-download installation, launch, smoke verification, and Application Support preservation. +### Fixed + +- New notes accept titles with or without `.md`, add the suffix when omitted, + and reject another extension with a corrected `.md` suggestion. +- Theme, reconnect, and service-worker update refreshes no longer discard or + replace the active Notes editor. The exact editor node, unsaved draft, focus, + selection, and preview state survive shell rebuilds. +- Long channel descriptions remain single-line and truncated at narrower + desktop widths instead of expanding the top bar into a one-character column. +- Newly provisioned residents prefer an unused character/color avatar + combination, eliminating stochastic duplicate identities in small fleets. +- Photon content is excluded from channel Chat, channel/global Threads, Board, + and unread counts, and the obsolete resident Photon tools and mapping UI are + removed. + ## [0.0.10] - 2026-07-25 ### Fixed @@ -301,7 +334,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 notarization, stapled tickets, Gatekeeper verification, persistent Application Support, and isolated Apple container machines. -[Unreleased]: https://github.com/gitcommit90/1Helm/compare/v0.0.10...HEAD +[Unreleased]: https://github.com/gitcommit90/1Helm/compare/v0.0.11...HEAD +[0.0.11]: https://github.com/gitcommit90/1Helm/releases/tag/v0.0.11 [0.0.10]: https://github.com/gitcommit90/1Helm/releases/tag/v0.0.10 [0.0.9]: https://github.com/gitcommit90/1Helm/releases/tag/v0.0.9 [0.0.8]: https://github.com/gitcommit90/1Helm/releases/tag/v0.0.8 diff --git a/README.md b/README.md index 8e0f7e0..7512a4b 100644 --- a/README.md +++ b/README.md @@ -196,9 +196,10 @@ keys per member. Connections are host-owned brokers, not secrets copied into every resident's shell. Gmail exposes scoped account listing, search, read, and draft creation; -sending remains disabled by default. Photon maps allowlisted inbound iMessage -threads to a resident and permits narrow replies in an already-authorized -conversation. Provider, Gmail, and Photon credentials stay on the host. +sending remains disabled by default. Photon gives the Captain one direct line +to Skipper: every text stays in a private Texts thread until `/new`, and that +same context can continue on desktop without echoing desktop-only turns back to +iMessage. Provider, Gmail, and Photon credentials stay on the host. New connection types have to earn their place with least-privilege scoping, secret isolation, reconnect and recovery, deduplication, deterministic tests, @@ -256,7 +257,7 @@ A fresh data directory opens first-run setup. The source runtime defaults to | `PORT` | `8123` | HTTP/WebSocket control-plane port. | | `CTRL_DATA_DIR` | `./data` | Databases, routing state, uploads, and narrow workspace mirrors. | | `HELM_CHANNEL_COMPUTER_BACKEND` | `apple` on macOS, `lxc` on Linux, `wsl` on Windows | Host isolation backend; `native` and `mock` are explicit development/test overrides. | -| `HELM_CHANNEL_MACHINE_IMAGE` | `local/1helm-channel-machine:0.0.10` | Versioned channel-machine image contract. | +| `HELM_CHANNEL_MACHINE_IMAGE` | `local/1helm-channel-machine:0.0.11` | Versioned channel-machine image contract. | ### Agent-first JSON CLI diff --git a/docs/RELIABILITY.md b/docs/RELIABILITY.md index 17cbcba..d2381e5 100644 --- a/docs/RELIABILITY.md +++ b/docs/RELIABILITY.md @@ -59,9 +59,10 @@ ownership, recovery, and tests rather than depend on a prompt alone. - Delivery state records pending, attempting, delivered, failed, or uncertain. A restart may resume a never-attempted reply. An interrupted attempt is surfaced as uncertain and is not blindly replayed into a duplicate. -- An external message received through Photon defaults to the Captain's - `#main`/Skipper mapping, invokes the mapped partner, and returns the final - response to the originating authorized conversation. +- An external message received through Photon is private Captain ↔ Skipper + state. It appears only in `#main` Texts, returns the final response to the + originating phone conversation, and continues until the Captain sends + `/new`; desktop continuations share context without producing iMessage echo. - Timers, recurring workflows, long-running follow-ups, and connector replies are durable obligations. Sleep, restart, or a closed renderer must not erase them. diff --git a/docs/USER_GUIDE.md b/docs/USER_GUIDE.md index e45dc14..bf4d3d7 100644 --- a/docs/USER_GUIDE.md +++ b/docs/USER_GUIDE.md @@ -248,15 +248,16 @@ running on that host. ## Photon / iMessage Connections guides Photon device authorization, project setup, secret rotation, -phone registration, sidecar health, and conversation mapping. The first mapping -defaults to the Captain's `#main` and Skipper. - -An allowlisted inbound text creates a real 1Helm thread, invokes the mapped -agent, retains its reply in 1Helm, and sends that final reply to the exact inbound -conversation once. If the agent explicitly uses `photon_send`, the automatic -return suppresses its duplicate. New unrelated outbound destinations remain -blocked unless explicitly granted. Rich attachment fidelity is not yet part of -the verified contract. +phone registration, and sidecar health. There are no channel mappings: the +Captain's configured phone always talks directly to Skipper. + +The first inbound text creates a private conversation in `#main`'s **Texts** +tab. Phone messages and Skipper's iMessage replies are retained there, and the +conversation keeps one context across connector restarts and Photon space-ID +changes until the Captain sends `/new`. The Captain can continue the same +thread inside 1Helm and return to the phone later; desktop-only turns stay in +1Helm rather than being replayed as iMessages. Rich attachment fidelity is not +yet part of the verified contract. ## Workflows, follow-ups, and computer care diff --git a/package-lock.json b/package-lock.json index 299fe53..f30380e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "1helm", - "version": "0.0.10", + "version": "0.0.11", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "1helm", - "version": "0.0.10", + "version": "0.0.11", "license": "AGPL-3.0-only", "hasInstallScript": true, "dependencies": { diff --git a/package.json b/package.json index 4e7aac7..c8af99b 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "1helm", "productName": "1Helm", - "version": "0.0.10", + "version": "0.0.11", "private": true, "type": "module", "license": "AGPL-3.0-only", diff --git a/public/index.html b/public/index.html index 9e3e5cc..9d3bad2 100644 --- a/public/index.html +++ b/public/index.html @@ -29,11 +29,11 @@ document.querySelectorAll('meta[name="theme-color"]').forEach(function (m) { m.setAttribute("content", color); }); })(); - +
- +