Repository navigation
Conversation
maebeale
commented
Oct 14, 2026
| accepts_nested_attributes_for :contact_methods, allow_destroy: true, reject_if: :all_blank | ||
| # A new row's hidden kind is always filled in, so a row counts as blank by its number. | ||
| accepts_nested_attributes_for :contact_methods, allow_destroy: true, | ||
| reject_if: proc { |attrs| attrs["id"].blank? && attrs["value"].blank? } |
Collaborator
Author
There was a problem hiding this comment.
🤖 From Claude: This also changes the admin form: a blank cocoon-added phone row is now silently skipped instead of failing validation. Its hidden kind made :all_blank never match.
maebeale
force-pushed
the
maebeale/profile-page-edit-requests
branch
3 times, most recently
from
October 14, 2026 14:16
81369d4 to
df5cad7
Compare
maebeale
commented
Oct 14, 2026
| owner_params = permitted.except(*ADMIN_ONLY_FIELDS) | ||
| owner_params[:user_attributes] = owner_params[:user_attributes].except(*ADMIN_ONLY_USER_FIELDS) if owner_params[:user_attributes] | ||
| owner_params[:sectorable_items_attributes] = without_admin_sector_flags(owner_params[:sectorable_items_attributes]) if owner_params[:sectorable_items_attributes] | ||
| owner_params[:affiliations_attributes] = owner_affiliation_fields(permitted[:affiliations_attributes]) if permitted[:affiliations_attributes] |
Collaborator
Author
There was a problem hiding this comment.
🤖 From Claude: Owners can now send affiliations_attributes, narrowed to id + organization_address_id on existing rows. The model validation keeps the address within that affiliation's organization, and nested attributes only find rows in the person's own association. Person's affiliation reject_if was loosened to new rows only so this update isn't dropped.
maebeale
marked this pull request as ready for review
October 14, 2026 14:37
maebeale
force-pushed
the
maebeale/profile-page-edit-requests
branch
from
October 14, 2026 14:39
b0ef2c4 to
cd49411
Compare
maebeale
force-pushed
the
maebeale/profile-page-edit-requests
branch
from
October 14, 2026 15:57
f653771 to
a0a7f85
Compare
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Facilitators are a very low-tech audience. They didn't know the edit form existed and couldn't tell which details they could change and which needed staff. The profile now spells that out: one big Edit button, labeled buttons for the staff-kept details, and an Edit button on each section. Change requests and Cancel both return to the profile. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The visibility checkboxes sat near the bottom of a long form, mixed with fields staff use. Low-tech users need a short checklist they can't get lost in. Saving goes through the regular update and returns to the profile. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
People need a way to ask for changes that aren't their email or an organization, so an "other" request carries just a free-text description that staff resolve by hand. The visibility page now uses on/off switches and name cards that show the person's real name in each style, so it's easier to scan. New specs check that every setting on the page saves for an owner and lands on the person's change log. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
People with several organizations had to find theirs in a dropdown buried in the form. They now pick from cards first, or add a new one. Someone with one organization goes straight to the form. Also fixes the request form showing a plain text box for an affiliation request that already has a category, which broke editing a pending request. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
After picking an organization, people now pick what to change from cards and get a form with only those inputs, such as native date pickers for dates. The dropdown that revealed fields with JavaScript is gone. Facilitator affiliations read "AWBW Facilitator", and the visibility labels say whose work each switch covers. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The full person form is long and full of staff-only controls. Owners now get a single page of plain-language cards: photo, name, bio and birthday, phone, address, social media, sectors and ages as checkboxes, and licenses. Every edit link on their profile leads there. Blank add-new rows are skipped, and a new phone row with no number no longer trips validation. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
People can't change their main sector or age range here, so they need to see which one it is before unchecking it. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Sectors and age ranges now use the same on/off switches as the visibility page, through one shared switch partial. The name card groups pronunciation with legal first name and puts pronouns on its own row. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
A star beside each sector and age range sets the main one. It reuses the primary-tag controller, so starring a row turns it on and turning a row off clears its star. If JavaScript doesn't run, the server still rejects two main sectors. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Main made time zone, best time to call, and program settings owner-editable, so the simple page now has them too. ADR-0006 now lists the owner pages. The full form keeps its admin wording when an admin edits their own record. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Owners can now see both email addresses, set each one's type, and jump to a change request for that exact address. The secondary email gets its own request type, which admins approve like the primary one. The request form returns to the email card. Both owner forms now warn before leaving with unsaved changes. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The ↗ icon promises a new tab, and opening one keeps the edit page and any unsaved changes in place. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The add-an-organization request needed an existing organization from the search, which left people stuck if theirs wasn't in the portal. They can now type its name instead. Staff create it by hand, so these requests skip Approve. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
"Show my name as" now says it applies throughout the site. The free-text request reads "Request a profile data change" everywhere it's offered. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The Your name heading and the hint already say what the choices do. The label stays for screen readers. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
… card People with more than one address had no way to add another or say which one we should mail to. A native details toggle adds one address at a time, with no JS. The existing primary-tag star picks the main address, and someone's first address is starred by default. The phone number, type, and best time to call now share one row on desktop. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
… types An unlit star alone didn't say what it did, so it now reads "Mark as main" until picked (CSS only). Licenses use the same "Add a license" toggle as addresses. Each email's type now sits beside the address, not at the far right. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
People can add more than one phone and pick the one to call first. This uses the same details toggle and star as addresses, and the first phone is starred when none is marked. The stars line up with the field labels. Only the free-text request form is titled "Request a profile data change". The banner and link go back to their earlier wording. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Low-tech users who get stuck can reach staff in one click. The contact form comes prefilled with a profile-question subject and leads back to the edit page. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Owners can reach staff from their profile too, not only from the edit page. The contact form leads back to the profile. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The edit page stays focused on editing. Questions start from the profile. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Owners can see each organization on the edit page, with a button to request a change and one to add an organization. The request steps carry return_to and come back to the card. The banner's question button now reads "Ask an unrelated question". Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Main brought back the collapsed Hidden from profile card. Its "Change sharing settings" link went to the full form, which owners aren't linked to. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The banner is now the heading plus two buttons, "Choose what others can see" and "Edit my data". Change requests live on the edit page next to what they change. On that page, phones, addresses, and licenses share one add pattern: chained details toggles add several before saving, and every card can be removed. Affiliations name each organization once, with its titles nested under it. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
People had no way to see or set which of an organization's addresses is their work address. The edit page now shows it under each title as a plain dropdown of that organization's addresses. The policy lets owners change only that field on affiliations they already have. A missing address goes to staff through a new "Add my work address" request. Person's affiliation reject_if now applies only to new rows, so the narrowed update isn't dropped. Also: "Your activity" and consistent "you" wording on Choose what others see. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
An owner who toggled their bio off still saw a standalone "Add a bio" section, as if a bio would show publicly. The prompt now sits with the other hidden pieces so the page reflects what others will actually see. Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
A blank bio shows nothing to others even with sharing on, so a standalone "Add a bio" card still read as a public section. The prompt now always sits in the owner-and-admin card. The card's "turned off in sharing settings" note shows only when something really is turned off. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Reverts the previous commit. With bio sharing on, the owner should see the standalone prompt in its usual spot. Only a bio switched off folds into Hidden from profile, as in #2688. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
It matches the collapsible lilac cards beside it. It starts open, and the title and a chevron toggle it through the existing expandable-card controller. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The work address card under every title made the list long and pulled titles apart. On desktop each title is now one row: title and dates, a compact work address dropdown, then Request a change. "Address not listed?" is the dropdown's hint link. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
maebeale
force-pushed
the
maebeale/profile-page-edit-requests
branch
from
October 15, 2026 00:26
a0a7f85 to
50834a5
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
🤖 suggested review level: 5 Inspect 🔬 four new owner pages, a nested-attributes change, and a reworked change-request flow
Facilitators (a very low-tech audience) can now open their own profile and change things one step at a time, without the long admin form.
Profile as the hub
people/_own_profile_banner): heading plus two buttons, "Choose what others can see" and "Edit my data". Pending change requests show below.PersonPolicy#edit_own_profile?(owner and not production). Production doesn't change.New owner pages (each saves through
updatewithreturn_to, then returns to the profile)people#details, "Edit my data": cards for photo, name and pronouns, emails (address read-only, type editable, a request link per address), bio, birthday, time zone, phone, best time to call, mailing address, social media, sectors and ages, program settings, and licenses. Sectors, ages, and program settings use slider switches._destroyboxes. Child indexes must be numeric, or strong params drop them.primary-tagcontroller (no new JS files), and the server still rejects two main sectors.people#visibility, "Choose what others can see": on/off switches and name-style cards that preview the person's real name.Change requests
<details>toggles (people/_add_more_chain) add several before saving, with no JS. Every card has a Remove box, and an unsaved card marked Remove is skipped.return_to=detailsbrings an email request back to the edit page's email card.otherfield: free text, resolved by staff by hand.auto_appliable?. So an affiliation request with a category already set (when editing a pending one, or re-rendering after an error) showed a plain text box.Worth a look
secondary_emailrequest type: Approve writesemail_2directly. The primary email still goes through the confirmation flow.Personcontact methods:reject_ifnow skips a new row with no number. Its hiddenkindused to defeat:all_blank.🤖 Generated with Claude Code