rsvp_announcement — Kanban Cards
rsvp_announcement — Kanban Cards
Project: RSVP-System Recipe Cookbook Feature: rsvp_announcement Source: D7 Whitinghamvt.org Announcement content type audit (2026-03-12) Depends on: ADR-0018 (Announcement Entity Architecture)
Card 1: ADR-0018 — Announcement Entity Architecture
Priority: Blocker Status: Proposed Assignee: Stephen
Decide: composed entities with references (recommended) vs. single content type with conditional fields. This decision gates all other cards. See ADR-0018 for full analysis.
Acceptance: ADR status moved to Accepted. Architecture documented. Bridge recipe structure confirmed.
Card 2: rsvp_announcement recipe — Core Fields
Priority: High Status: Backlog Blocked by: Card 1
Create the rsvp_announcement Drupal recipe with core fields:
- Title (required)
- Body with Summary (text_with_summary, Full HTML)
- Highlight Image (media reference, image type, reuse from library)
- External Link (link field — title + URL, optional)
- Publishing Date Range (daterange field — start/end, default: now + 180 days). Controls announcement visibility. This is the auto-expire mechanism.
- Read More toggle (boolean or taxonomy — controls whether "More Information" link displays. If External Link is set, link points there; otherwise points to node.)
- Show Posted Date (boolean, default on)
Notes from D7 audit:
- The 180-day default publishing range is critical to the town clerk workflow. Announcements expire without manual cleanup.
- The Summary field is used for teaser displays. In D7 it's a separate textarea above the body. In D11 this is native to text_with_summary.
- Highlight Image in D7 uses the Media module with a dedicated
announcement/highlightsfile directory and 4MB limit. D11 should use Media Library with similar constraints. - External Link in D7: "If left empty, the Announcement will link back to itself." This self-linking default must be preserved.
Acceptance: Recipe installs cleanly. Content type available with all fields. Default form display configured. Default view display configured.
Card 3: rsvp_announcement recipe — Display Location Taxonomy
Priority: High Status: Backlog Blocked by: Card 1
Replace the D7 field_display_location (hardcoded list_text with ~60 string values like "Home - Village Announcements", "Library - Main - Footer") with a taxonomy vocabulary.
D7 values to migrate (sample):
- Home - Frontpage
- Home - Frontpage - Footer
- Local Government - Main
- Local Government - Town Departments
- Our Town - Happenings
- Library - Main
- Library - Kids
- Visit Us - See and Do
- (and ~50 more, each with a paired "-Footer" variant)
Design considerations:
- The D7 values encode a two-level hierarchy: Section + Subsection, plus a "Footer" flag. In D11 this should be a hierarchical taxonomy with a boolean "Footer placement" field on the term, not separate terms for main vs. footer.
- This vocabulary is Whitinghamvt-specific. The recipe should provide the vocabulary structure and the field, but not the terms. Terms are site-specific configuration or seed data.
- For RSVP-System as a redistributable recipe, consider whether this becomes a generic "Placement" vocabulary or stays announcement-specific.
Acceptance: Taxonomy vocabulary created. Entity reference field on Announcement. D7 display location values mapped to D11 terms with hierarchy. Footer flag field on taxonomy term.
Card 4: rsvp_announcement recipe — Department Reference
Priority: High Status: Backlog Blocked by: Card 1
Add field_department as an entity reference to the Community taxonomy (per ADR-0003 Community taxonomy architecture).
D7 context:
- In D7, Department is a content type (not taxonomy). Announcements reference Department nodes via entity reference, multi-value, required. Default: "General".
- ~30 departments: Selectboard, Town Clerk, Library, Transfer Station, Planning Commission, Fire Department, Zoning Administrator, etc.
D11 mapping:
- In RSVP-System, departments map to the Community taxonomy (ADR-0003) as children of the Municipal community type, or as a dedicated "Department" vocabulary.
- Decision: use Community taxonomy with a "Department" parent term, or create a separate Department vocabulary? Leaning toward Community taxonomy for consistency with the broader RSVP-System model.
- Required field. Default term TBD.
Acceptance: Entity reference field on Announcement. Multi-value. Required. Default value configured. Existing D7 departments mapped to D11 taxonomy terms.
Card 5: rsvp_announcement_event bridge recipe
Priority: Medium Status: Backlog Blocked by: Cards 1, 2, and rsvp_event recipe
Create the rsvp_announcement_event bridge recipe that connects Announcements to Events.
Fields added to Announcement:
- Post to Calendar (boolean toggle)
- Calendar (taxonomy reference — which calendar(s) to post to, checkboxes. D7 values: "Events & Happenings", "Town Calendar", "Library")
- Event Reference (entity reference to EventSeries, inline entity form)
Conditional field behavior:
- "Post to Calendar" checkbox reveals Calendar selection and Event Reference fields.
- Inline Entity Form (or equivalent) allows creating a new EventSeries directly from the Announcement form.
- Event inherits: title from Announcement title, body from Announcement body (or empty). Date/time, recurrence, all-day are set on the Event entity.
D7 recurrence features to preserve:
- All Day checkbox
- Show End Date checkbox
- Repeat toggle with RRULE: Daily (every N days, every weekday, MWF, TuTh), Weekly (every N weeks, select days), Monthly (by day of month or by weekday position), Yearly
- Stop repeating: after N occurrences or on date
- Exclude dates (EXDATE) and Include dates (RDATE)
- All of this is already handled by the Recurring Events module in the existing rsvp_event architecture.
Acceptance: Bridge recipe installs on top of rsvp_announcement + rsvp_event. Conditional field behavior works. Inline event creation works. Events created from announcements appear on calendar Views.
Card 6: rsvp_announcement_document bridge recipe
Priority: Medium Status: Backlog Blocked by: Cards 1, 2, and rsvp_document recipe
Create the rsvp_announcement_document bridge recipe that connects Announcements to Documents.
Fields added to Announcement:
- Include File Cabinet Attachment (boolean toggle)
- Document Reference (entity reference to Document, inline entity form, unlimited cardinality)
Conditional field behavior:
- "Include File Cabinet Attachment" checkbox reveals Document Reference field.
- Inline Entity Form allows creating a new Document directly from the Announcement form.
Document entity fields (from D7 audit, for rsvp_document recipe):
- File upload (txt, jpg, png, pdf, doc, docx, xls, xlsx — 20MB max)
- Document Type (taxonomy or list: Meeting Minutes & Agendas, Informational, Public Hearing Notice, Ordinances/Bylaws/Policies, Forms, Event Attachment, Town Warning, Annual Town Meeting / Town Reports & Election Results)
- Document Filed Date
- List as Important Department Doc (boolean)
Acceptance: Bridge recipe installs on top of rsvp_announcement + rsvp_document. Conditional field behavior works. Inline document creation works. Documents created from announcements appear in File Cabinet search/Solr.
Card 7: Migration — D7 Announcement to D11
Priority: Medium Status: Backlog Blocked by: Cards 2-6
Migrate D7 Announcement nodes to D11 entity structure.
Migration mapping:
| D7 Field | D11 Entity | D11 Field |
|---|---|---|
| title | Announcement | title |
| body + summary | Announcement | body |
| field_announcement_time | Announcement | field_publishing_date_range |
| field_highlight_image | Announcement | field_highlight_image (media) |
| field_external_link | Announcement | field_external_link |
| field_read_more_link | Announcement | field_read_more |
| field_show_posted_date | Announcement | field_show_posted_date |
| field_display_location | Announcement | field_display_location (taxonomy ref) |
| field_department | Announcement | field_department (taxonomy ref) |
| field_post_to_calendar = 1 | EventSeries | (create new entity) |
| field_calendar | EventSeries | field_calendar (taxonomy ref) |
| field_date_and_time | EventSeries | field_event_date (smart_date + rrule) |
| field_attach_doc = 1 | Document | (create new entity) |
| field_additional_information | Document | field_file |
| field_document_type | Document | field_document_type |
| field_document_date | Document | field_document_date |
| field_list_important | Document | field_list_important |
Migration phases:
- Migrate taxonomy terms (Calendar, Department/Community, Document Type, Display Location)
- Migrate Announcement nodes (core fields only)
- Migrate Documents (from announcements with field_attach_doc = 1), create entity references
- Migrate Events (from announcements with field_post_to_calendar = 1), create entity references
- Verify: all D7 announcements have D11 counterparts, all references resolve, publishing date ranges preserved
Acceptance: All D7 announcements migrated. Entity references correct. Calendar events display on calendars. Documents appear in File Cabinet search. Publishing date ranges enforce visibility correctly.
Card 8: Admin Settings & Publishing Options
Priority: Low Status: Backlog Blocked by: Card 2
Port the D7 "Admin Settings" vertical tab fields:
- Workflow / moderation state (D7 uses Workflow module; D11 uses Content Moderation or Workflows)
- Pathauto pattern for announcement URLs
- Metatag defaults (title:
[node:title] | [site:name], description:[node:summary]) - Revision enabled by default
- Published by default
Notes:
- D7 has Node Class (CSS class assignment per node) — evaluate if needed in D11 or if Layout Builder/Canvas handles this.
- D7 has "Exclude from search" checkbox — map to Search API index exclusion in D11.
- D7 authored by defaults to current user. Preserve.
Acceptance: URL aliases generate correctly. Meta tags populate. Content moderation workflow configured. Revisions enabled.