Skip to content

docs: close out the journey gap list - data directories, fresh-namespace recipe, and protocol surface details (#325) - #327

Merged
turinglambdaai merged 1 commit into
mainfrom
docs/journey-gaps-325-closeout
Oct 25, 2026
Merged

turinglambdaai merged 1 commit into
mainfrom
docs/journey-gaps-325-closeout

Conversation

@turinglambdaai

Copy link
Copy Markdown
Owner

Summary

Closes #325 (with #326, which landed the five high-impact items). This PR documents the remaining findings from the second (revalidation) journey — the items both journey agents independently had to invent. Every fact was verified against the implementation first, and the two recipes were executed for real before being written down:

  1. Application data directories (configuration.md — the top-priority gap, hit by both rounds): platform convention roots (Windows %APPDATA%\<publisher>\<name>, macOS ~/Library/Application Support/<identifier>, Linux XDG), the prohibition on home-root/install-dir/generated-roots writes, the env-override hook that acceptance suites inject disposable roots through, atomic writes, and defensive loading. Rivet intentionally ships no API here — the convention is now canonical instead of per-product folklore.
  2. Fresh-namespace restart recipe (product-acceptance.md): the exact namespace-require/copy-by-file-path pattern with serve (and record-ref) taken from the same namespace. Executed against a real backend before documenting; the revalidation agent converged on this via two probes.
  3. Full rivet/protocol export list (product-acceptance.md): message:response/message:error/frame accessors etc. — tests stop relying on naming symmetry.
  4. Error payload disambiguation (protocol.md): the v1 error payload is an RVT1-encoded String value, not raw UTF-8 bytes; Swift surfaces it as ClientError.backend(String) with a generic fallback.
  5. Zero-argument RPC syntax (protocol.md): (define-rpc (ping : String) "pong"), wire request ["ping"]. Executed.
  6. Pre-session state-set! guarantee (protocol.md): commits the cell and emits no event when no session exists — initialization writes are ordinary mutation.
  7. raco rivet package launch-smoke default (native-ui-testing.md): --skip-launch-smoke keeps a native-ui suite hermetic.
  8. Suite cwd contract (product-acceptance.md): suite commands run with the project root as the current directory.

Out of scope (unchanged): raco docs emptiness (item 9 — Scribble documentation build, its own project).

Validation

  • The fresh-namespace recipe and the zero-arg RPC form were both executed against real backends before being documented (the first draft of the recipe also caught a wrong assertion on my side — the fresh namespace starts from declared initial state, which is exactly the semantics the doc now states).
  • raco test rivet/tests/documentation.rkt: 732 passed.
  • raco test rivet/ rivet-cli/: all green.

…ace recipe, and protocol surface details

Second round of #325 findings from the revalidation journey: the two
agents independently invented the same things. Each item below was
verified against the implementation (and executed where it is a recipe)
before being documented.

- configuration.md: an application data directories section - the
  platform convention roots, the env-override hook acceptance suites
  inject disposable roots through, atomic writes, and defensive loading.
  Rivet intentionally ships no API for this; the convention is now
  written down instead of per-product folklore.
- product-acceptance.md: the fresh-namespace restart recipe for the
  in-process backend loop (namespace-require/copy by file path, serve
  taken from the same namespace); the full rivet/protocol export list so
  tests stop relying on naming symmetry; and the statement that suite
  commands run with the project root as their current directory.
- protocol.md: error payloads are RVT1-encoded String values, not raw
  UTF-8 bytes (with the Swift ClientError.backend surface); zero-argument
  RPC syntax (define-rpc (ping : String)) with its single-element wire
  request; and the guarantee that a pre-session state-set! commits
  without emitting an event.
- native-ui-testing.md: raco rivet package runs a launch smoke by
  default; --skip-launch-smoke keeps a native-ui suite hermetic.
@turinglambdaai
turinglambdaai merged commit 9d766b4 into main Oct 25, 2026
23 checks passed
@turinglambdaai
turinglambdaai deleted the docs/journey-gaps-325-closeout branch October 25, 2026 12:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

docs: document the Racket-side value model and the backend/native-ui testing paths (taskboard journey findings)

1 participant