Skip to content

feat(calendar): resolved days, range delete; list tables keep rows beside extra fields - #228

Merged
ysyneu merged 1 commit into
mainfrom
feat/calendar-days
Oct 14, 2026
Merged

ysyneu merged 1 commit into
mainfrom
feat/calendar-days

Conversation

@ysyneu

@ysyneu ysyneu commented Oct 14, 2026

Copy link
Copy Markdown
Contributor

What

SDK v0.15.17 (regenerated with cligen + make gen-cards)

  • calendar event-list: response carries days — the resolved state of every date in scope (is_off, event_id, layer).
  • calendar event-delete: --start-at / --end-at clear the calendar's own events off a date range; --event-id is optional; <cal-id> can be positional and --cal-id keeps working.
  • calendar event-upsert: --summary is optional.
  • Also from the spec: schedule fixed-time notify week/month cycles + --days, license list release_limited, work item status docs.

List tables with extra fields

listEnvelope (runtime) only treated {items, total, …pagination} as a list, so a response with any other field beside the rows printed as a flattened FIELD/VALUE dump — for a year of event-list that is ~1,000 lines of DAYS.2026-… keys. Now, when the rows field is Items/Docs/List, the table prints the rows as before and names the rest:

ACCOUNT_ID  CAL_ID  CREATED_AT        …  EVENT_ID           IS_OFF
1           cal.x   2026-01-10 08:00  …  cale.a             false
Showing 2 results (total 2).
Also in the response: days (use --json to see it).

Detail objects whose nested slice has another name stay vertical (TestGenericListPage_NestedRowsInDetailObject). HasMore is now pagination metadata. Affected today: calendar event-list, license list, work item list / post-mortem bind. --json/toon output is unchanged; output bounding (listEnvelopeKey) stays scalar-siblings-only on purpose, since a year's days map alone exceeds the 16 KB limit and cannot be shortened.

cligen's listEnvelope accepts object/array siblings the same way, so help and cards describe event-list as {items: [...], days, total}.

Card: calendar.md explains reading days (layer order), range reset, positional <cal-id>.

Checks

  • go test ./... — all packages pass (new: TestRenderGenericTable_EnvelopeWithSiblings, …EmptyEnvelopeWithSiblings, TestGenericListPage_NestedRowsInDetailObject, …HasMoreIsMetadata, cligen TestListEnvelope)
  • make check-cards — OK
  • Built binary against a local mock API: event-list table/JSON as above; event-delete --cal-id X --event-id Y sends {"cal_id","event_id"}; event-delete X --start-at … --end-at … sends the range.

…side extra fields

Bump go-flashduty to v0.15.17 and regenerate:
- calendar event-list returns days (resolved state per date).
- calendar event-delete clears a date range with --start-at/--end-at;
  <cal-id> may be positional (--cal-id still works), --event-id optional.
- calendar event-upsert --summary is optional.
- schedule fixed-time notify week/month cycles, license list
  release_limited, work item status docs.

A list envelope with fields beyond pagination metadata (event-list's
days, license list's release_limited, work item list's
idempotent_replay) used to render as a flattened key/value dump. When
the rows field is items/docs/list, the table now prints the rows and
names the other fields ("Also in the response: days (use --json to see
it)."). HasMore counts as pagination metadata. cligen describes such
responses as {items: [...], <siblings>} page wrappers.

Calendar card: how to read days, range reset, positional cal-id.
@ysyneu
ysyneu merged commit 06c9331 into main Oct 14, 2026
12 checks passed
@ysyneu
ysyneu deleted the feat/calendar-days branch October 14, 2026 11:52
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.

1 participant