Skip to content

fix(dashboard): generate settings PATCH contracts - #4275

Open
ScriptedAlchemy wants to merge 12 commits into
masterfrom
fix/settings-patch-contract
Open

ScriptedAlchemy wants to merge 12 commits into
masterfrom
fix/settings-patch-contract

Conversation

@ScriptedAlchemy

@ScriptedAlchemy ScriptedAlchemy commented Oct 18, 2026 •

Copy link
Copy Markdown
Owner

Project PATCH returns { outcome: "effect", value: ... }, while the dashboard expected { Effect: ... }. A saved change could therefore appear to have failed. The dashboard also treated every HTTP 409 as a revision conflict, including idempotency conflicts and cancellation.

This exports the PATCH wrapper and typed configuration refusals from Rust, regenerates their dashboard contracts, and consumes those generated decoders. A changed result is saved when execution and its durable committed receipt are complete and the returned current revision advances. The receipt's recorded reconciliation state is displayed separately, including the daemon's real Pending result. Explicit-null no-ops succeed; partial or uncertain effects require loading current values before another write. Refusals retain validation, revision, authority and application-problem semantics with canonical status checks. The temporary artifact-export workflow is removed.

The shared success fixture now comes from the mounted daemon HTTP journey and its real configuration effect construction. That journey checks durable read-back, receipt/current revision agreement, no-op, validation, idempotency and stale-CAS responses. The constructed effect fixture is deleted.

Validation:

  • Exact Bazel daemon settings journey: 1 passed, 133 filtered; invocation c46fdaf2-c1df-46e5-96fa-9d38c60e5c84, with stable inputs and the updated embedded dashboard bundle.
  • 98 focused generator, consumer, settings DOM/reducer and scoped-write tests passed using the emitted daemon fixture. A final consumer-file rerun passed all 9 tests after a test-helper type annotation.
  • Dashboard typecheck and production build passed. The receipt-label follow-up passed all 36 settings DOM tests and typecheck.
  • Canonical contracts:generate and contracts:check passed for dashboard, TypeScript SDK and Rust descriptor outputs; the reconciliation correction changes no wire schema.
  • Bazel API presentation tests (2) and API unit tests (60) passed after migrating the remaining test caller to typed refusals; validation and revision-conflict wire assertions remain intact.

Fixes #4184

@changeset-bot

changeset-bot Bot commented Oct 18, 2026 •

Copy link
Copy Markdown

⚠️ No Changeset found

Latest commit: c4ffcea

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@ScriptedAlchemy
ScriptedAlchemy marked this pull request as ready for review October 18, 2026 21:30
devin-ai-integration[bot]

This comment was marked as resolved.

devin-ai-integration[bot]

This comment was marked as resolved.

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Devin Review found 1 new potential issue.

1 flag not posted on this PR by your GitHub settings — view it in Devin Review. (Configure)

Devin Review

Comment thread dashboard/src/workspaces/settings/SettingsReviewPanel.tsx

This branch has not been deployed

No deployments
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.

fix(settings): generate the PATCH response contract and accept canonical effect outcomes

1 participant