Skip to content

fix(auth): make farm configuration owner-only - #870

Merged
mforce merged 1 commit into
mainfrom
chore/foundational-thinking-729
Sep 14, 2026
Merged

mforce merged 1 commit into
mainfrom
chore/foundational-thinking-729

Conversation

@mforce

@mforce mforce commented Sep 14, 2026 •

Copy link
Copy Markdown
Owner

What and why

Closes #729.

Farm settings reads/writes and logo/banner mutations now require the Owner role. Managers retain the role-agnostic account and branding reads needed by the SPA, while their navigation and Help links keep operational destinations and omit Farm settings.

The product specification, canonical glossary, in-app Help, localized role guidance, and user-facing allocation errors now state the same boundary. The historical #727 design has a supersession note instead of rewritten history.

Review order: authorization policies and account endpoints; navigation gate; Help and localized copy; integration and Playwright coverage; specification and decision record.

Risk: this deliberately narrows an existing Manager permission. There is no schema or data change.

How it was verified

  • dotnet build Cluckwork.sln: 0 warnings, 0 errors.
  • dotnet test for Domain, Application, and AppHost: 491, 290, and 10 passed.
  • Targeted Testcontainers integration runs: 9 passed, covering Manager settings denial, role-agnostic branding reads, non-Owner logo/banner mutations, and Owner-only allocation guidance.
  • npm test in web/: 126 files and 2,999 tests passed; the new Manager navigation assertion was observed red before the implementation.
  • npm run build in web/: passed.
  • Focused Playwright runs against freshly rebuilt simulation stacks: Manager operational links remained visible, Owner-only links were absent, and the Help page rendered the new Owner-only guidance.

Checklist

  • The PR title is a conventional commit, and is the release note I want.
  • Tests cover the change, and I watched the new navigation test fail first.
  • The product specification, canonical glossary, and in-app Help are updated.
  • A non-obvious decision is recorded in docs/decisions/.
  • No hardcoded credential, in application or test code.
  • No hardcoded hosting-provider name in code, config, or a committed doc.

@coderabbitai

coderabbitai Bot commented Sep 14, 2026 •

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Advanced

Run ID: bf279093-03e5-46fb-8608-95d1351211a5


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@mforce

mforce commented Sep 14, 2026

Copy link
Copy Markdown
Owner Author

Manager navigation from the rebuilt simulation stack. Operational Setup links remain available; Owner-only Farm settings and Users are absent.

Manager navigation after #729

@mforce
mforce force-pushed the chore/foundational-thinking-729 branch from 8c6d273 to efc50c6 Compare September 14, 2026 15:31
@mforce

mforce commented Sep 14, 2026 •

Copy link
Copy Markdown
Owner Author

Manager view of the updated Help section from a simulation stack rebuilt from the same application sources as current PR head 629d70d (the later amend changed one test comment only). The guide names Farm settings as Owner-only, and no Open Farm settings action is offered.

Owner-only Farm settings Help shown to a Manager

@mforce
mforce force-pushed the chore/foundational-thinking-729 branch from efc50c6 to 629d70d Compare September 14, 2026 15:34
@mforce
mforce merged commit 42f9036 into main Sep 14, 2026
17 checks passed
@mforce
mforce deleted the chore/foundational-thinking-729 branch September 14, 2026 15:51
mforce pushed a commit that referenced this pull request Sep 16, 2026
🤖 I have created a release *beep* *boop*
---


## [0.1.2](v0.1.1...v0.1.2)
(2026-09-16)


### Features

* **data:** standardize business record chronology
([#820](#820))
([6231b31](6231b31))
* **infra:** optional leader-lease endpoint for pooled deploys
([#869](#869))
([e9bc6a7](e9bc6a7))
* **sim:** seed a second farm for the README dashboard capture
([#867](#867))
([de407c6](de407c6))
* **web:** adopt MUI, themed from the farm palette tokens
([#674](#674))
([#860](#860))
([6c83c5c](6c83c5c))
* **web:** convert Daily entry to MUI, field-first on the phone
([#888](#888))
([b66f8b8](b66f8b8))
* **web:** convert the Dashboard and app shell to MUI
([#829](#829))
([#883](#883))
([2e94277](2e94277))
* **web:** retire the Slack-blue link colour for ink + a rule underline
([#884](#884))
([c08f9d8](c08f9d8))
* **web:** serve a per-request CSP nonce so Emotion's styles apply under
style-src 'self'
([#874](#874))
([ba4e6f3](ba4e6f3))
* **web:** visual language theme overrides for the MUI revamp
([#864](#864))
([#882](#882))
([0bb6b73](0bb6b73))
* **web:** whole-app MUI baseline, theme policy guard and the
[#740](#740) phone action rule
([#823](#823))
([#871](#871))
([af565e4](af565e4))


### Bug fixes

* **auth:** fail closed on unresolved flock-scope actors
([#787](#787))
([#868](#868))
([16d0350](16d0350))
* **auth:** make farm configuration owner-only
([#870](#870))
([42f9036](42f9036))
* **e2e:** repoint the canary at the markup two PRs replaced
([#844](#844))
([18b45dc](18b45dc))
* **i18n:** tl glossary uses the standard passive of ilagay
([#813](#813))
([20dec10](20dec10)),
closes [#738](#738)
* **sim:** stop the k6-baseline EXIT trap masking a clean run as failed
([#838](#838))
([f5ec96f](f5ec96f))
* **web:** declare the rule tokens the Dashboard reads, and guard
undeclared custom properties
([#885](#885))
([5bead1f](5bead1f))


### Performance

* **ci:** start the serialized integration collection first
([#861](#861))
([1dcc7f6](1dcc7f6)),
closes [#839](#839)


### Documentation

* **auth:** record the OAuth 2.1 decision for MCP authentication
([#801](#801))
([0510854](0510854))
* **designs:** MUI revamp design doc, component map, layout system, IA
([#862](#862))
([da49481](da49481))
* **readme:** recapture the daily entry, reports and sales screenshots
([#865](#865))
([f18e336](f18e336))
* **specs:** correct the sales_order_items column list in §10.5
([#812](#812))
([afe4a02](afe4a02)),
closes [#737](#737)

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

Co-authored-by: cluckwork-lockfix[bot] <309265648+cluckwork-lockfix[bot]@users.noreply.github.com>
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.

Farm configuration and identity become Owner-only, matching spec §5.1

1 participant