Skip to content

Align extension property handling#92

Open
eikopf wants to merge 7 commits intomainfrom
align-extension-property-handling
Open

Align extension property handling#92
eikopf wants to merge 7 commits intomainfrom
align-extension-property-handling

Conversation

@eikopf
Copy link
Copy Markdown
Owner

@eikopf eikopf commented Mar 14, 2026

Summary

Breaking changes

  • The x_* flat fields on imported iCalendar records are replaced by the structured icalendar property. Any code or gnomon files that reference x_custom_field style keys from iCalendar imports will need updating.

Test plan

  • All 571 workspace tests pass
  • Zero clippy warnings
  • Manual round-trip: iCal with X-properties → import → verify icalendar.properties structure → export → verify X-properties match
  • Manual round-trip: gnomon record with vendor property (com.example:foo) → export iCal → verify JSPROP emission
  • Verify JSCalendar export includes new property mappings (locations, participants, etc.)
  • Verify warning emitted for unknown non-vendor fields in JSCalendar export

Closes #90, closes #50, closes #54.

🤖 Generated with Claude Code

eikopf and others added 7 commits March 14, 2026 17:43
Replaces flat x_custom_field mangling with structured icalendar property
using jCal format (RFC 7265) for iCal→gnomon import, and JSPROP emission
for JSCalendar vendor properties in gnomon→iCal export. Adds ~15 missing
JSCalendar export mappings (locations, participants, recurrenceRules,
links, relatedTo, created, updated, etc.) and warnings for unrecognised
non-vendor fields.

Closes #90, closes #50, closes #54.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Fix weekday string mismatch in build_jscal_rrule ("mo" → "monday")
- Extract import_value_to_json as ImportValue::to_json() method
- Deduplicate calendar-level x-property handling via XPropertySink for Calendar
- Deduplicate build_participants/build_task_participants via macro
- Extract magic strings to constants (ICALENDAR_FIELD, JSPROP_NAME, JSPTR_PARAM)
- Add @type and name fields to ICalComponent records
- Implement convertedProperties: preserve unknown params on known iCal properties
  through the gnomon import/export round-trip
- Remove empty components field from ICalComponent when unused
- Add tests for all changes

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The iCalendar TRANSP property was being translated to/from "opaque" and
"transparent" strings, but the spec and shape validator expect the
JSCalendar convention of "busy" and "free". Also fixes the spec mapping
table which incorrectly named the target field "transparency".

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Same issue as the TRANSP fix: iCalendar CLASS:CONFIDENTIAL was being
lowercased directly to "confidential" instead of translated to the
JSCalendar/Gnomon value "secret". Also corrects the spec mapping tables
to use the field name "privacy" (matching JSCalendar) instead of "class".

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
get_datetime now handles flat date records {year, month, day} from
date-only DTSTART values, matching the iCalendar export's existing
behavior. The icalendar field is preserved in JSCalendar output without
a spurious unrecognised-field warning.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.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

1 participant