Skip to content

chore: v1.4.0 dev -> main - #956

Merged
r0ssing merged 31 commits into
mainfrom
dev
Oct 1, 2026
Merged

r0ssing merged 31 commits into
mainfrom
dev

Conversation

@r0ssing

@r0ssing r0ssing commented Oct 1, 2026

Copy link
Copy Markdown
Member

Release preparation for v1.4.0

r0ssing and others added 30 commits September 27, 2026 14:26
fix(formulus): defer QR camera binding until provider is ready
A contributor-facing trail map that follows a single observation from the
form on a device to server storage and back out through export, so a newcomer
can see where rendering, local persistence, push, server storage and
pull/export each happen.

- Mermaid sequence diagram of the happy path
- a table of the ten steps, each naming the responsible project and linking
  to the source symbol that implements it
- what changes when the device is offline: the write path makes no network
  call, and "pending" is derived from synced_at/updated_at rather than
  stored
- why attachments are a separate pipeline: observation JSON stores a
  GUID-shaped basename, binaries move over /api/attachments and are tracked
  on their own cursor
- five existing tests that exercise the path, two of which need PostgreSQL
- a short list of what the map deliberately does not cover

Every source link was opened and confirmed before writing, and the Mermaid
diagram parses cleanly.

Refs #912
The Parquet export flattened nested objects (photo, audio, video, file
fields) into JSON strings before extracting attachment basenames.
walk_attachment_refs could not find filename/attachmentId keys inside
the stringified blobs, so zero files were copied.

Preserve the original payload on ExportRow as raw_payload and use it
for attachment basename extraction instead of the flattened data.
fix(desktop): export not copying attachments from nested observation data
…-formulus-build-code

chore(release): reserve next Formulus build code
`r0ssing` pointed out that the sequence diagram showed push before pull, which
is not what the code does: `syncObservationsImpl` awaits `pullObservations`
and only then `pushObservations`.

- reorder the diagram so `/api/sync/pull` precedes `/api/sync/push`, and show
  `applyServerChanges` where it actually happens
- reorder the steps table so the pull steps come before the push steps
- add a short section on why the order matters: a device reconciles against
  fresh server state before offering its own changes
- note that ODE Desktop drives the two as separate operations
  (`synkPull`, `synkPush` in useCustodianStore.ts)

Verified before changing: `syncObservationsImpl` in
`formulus/src/api/synkronus/index.ts` pulls first, and both Desktop
operations exist in `desktop/src/store/useCustodianStore.ts`.

Refs #947
Add compact form descriptions, reusable agent skills, and public setup guidance. Migrate the documentation site to pnpm and document privacy-gated MCP workflows.
feat(desktop): add local AI agent support
…-formulus-build-code

chore(release): reserve next Formulus build code
docs(development): add a code map for one observation's journey
fix(desktop): honor includeDeleted in observation queries
…lumn

perf(desktop): index deleted observations
@r0ssing r0ssing changed the title v1.4.0 dev -> main chore: v1.4.0 dev -> main Oct 1, 2026
@r0ssing
r0ssing merged commit ab6898b into main Oct 1, 2026
33 of 34 checks passed
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.

4 participants