Skip to content

Releases

CalendarStream 0.2.8-beta.39

Pre-release

Choose a tag to compare

@github-actions github-actions released this 07 Nov 13:46
10dce20

Fixed

  • Build mistake: 0.2.8-beta.38 was published from a commit whose GitHub Tests run was red (app/google/traffic_log.py's header was missing Holds:, so suite 75 failed; build_rules/dependencies.md was stale). The code was otherwise unaffected; this beta only fixes the header, regenerates dependencies.md, and updates the three suites (31, 34, 61) that counted the page's sections, icons and Expand lines before F59 added one.

CalendarStream 0.2.8-beta.38

Pre-release

Choose a tag to compare

@github-actions github-actions released this 07 Nov 13:32
fc75943

Added

  • Beta: Google Traffic (F59): a section below History, Undo & Logs to start a Google module's sync by hand and watch every call this app makes to Google and Google's answer, nothing redacted (not tokens or the client secret) — for developing a real fix to I5. Each module's health chip and Sync Now button are duplicated there; a Clear button empties the log, which is never saved (memory only, cleared on restart).

CalendarStream 0.2.8-beta.37

Pre-release

Choose a tag to compare

@github-actions github-actions released this 07 Nov 11:40
6428a20

REVIEW 2 fixes for review issue #11 (google, beta.36).

Fixed

  • Google sync: a sync that fails with an unexpected error (not a Google one, say a malformed event) is now classified and remembered in the account's health too, as an unknown failure (#11 #1).
  • Google sign-in: the account's e-mail is taken from Google's ID token only when its audience is this OAuth client; a missing audience is no longer trusted (#11 #4).
  • Code: GoogleHealth.check_and_recover's comment says what its decision does (state and back-off, honored by the next scheduled syncs; the 401 refresh-and-retry is in GoogleApi.api()) (#11 #2, Partly). #3 was kept as designed.

CalendarStream 0.2.8-beta.36

Pre-release

Choose a tag to compare

@github-actions github-actions released this 07 Nov 06:05
0e3eb04

F58: the Google code split into small modules in app/google/ (ten checkpoints), with review #9 findings 2 and 3 and review #8's test-runner follow-ups; rules R18–R20. Still open for the next build: GoogleSync becomes an injected client instead of a mixin, and main.py and the routes (an import cycle) are split.

Fixed

  • F58 checkpoint 1 (I5): a Google module whose account has no sign-in was skipped by every sync without a word; History now says so once ("not signed in … so it isn't synced: open it and Connect me"). New suite 68.
  • F58 checkpoint 9 (R19): build_rules/dependencies.md, made by tests/tools/deps.py, maps which app file imports which, leaves first, with import cycles marked (main.py and the routes are the cycle: that is the next thing to split). New suite 75 checks it is current and that every app/google/ file has its header. GoogleSync stays a mixin of Google for now; handing it an injected GoogleApi instead is the next step.
  • F58 checkpoint 8: the calendar and event code moves to app/google/sync.py (GoogleSync, SyncResult, event_body…); gsync.py is now a small facade (Google(GoogleApi, GoogleSync) plus re-exports and the endpoints/limit the suites set). No behavior change. New suite 74.
  • F58 checkpoint 7: app/google/health.py (GoogleHealth) remembers each Google account's health in the database (state, kind of failure, attempts, next retry); a failing sync is classified and recorded, an account waiting out a back-off is skipped quietly, a success or a new sign-in clears it. No setting, mapping or token is touched. New suite 73; suite 68 covers the wiring.
  • F58 checkpoint 6: app/google/failure_classifier.py (what kind of failure a Google error is) and recovery_policy.py (retry or not, the account's new state, bounded backoff with jitter, Retry-After respected); GoogleError carries optional status, transient and retry_after. New suite 72 (no app or database). The Tests workflow no longer cancels a run when the next push arrives.
  • F58 checkpoint 5 (review #9 finding 2): app/google/readiness.py tells apart the OAuth client, the sign-in, Google's answer and a sync; the Google Calendar API Sync's last step now says the client is "set up" (never "ready") and names each Google module that isn't signed in, has a Google error or hasn't synced. New suite 71; suite 68 covers the step.
  • F58 checkpoint 4 (review #9 finding 3): a Google sign-in's PKCE verifier (encrypted) and an invite's sign-in state are saved in the database (google_signins, google_invite_states), expire after 15 minutes and are used once, so restarting between Continue with Google and Google's answer no longer loses them.
  • F58 checkpoint 3: the Google sign-in, tokens and requests move to app/google/api.py (GoogleApi); gsync.Google builds on it with the same public behavior and the same module-level endpoints the suites set. New suite 70 (no app, database or network).
  • F58 checkpoint 2: app/google/ begins: errors.py (the Google errors, moved out of gsync.py, which still offers them), health_state.py, failure_kind.py, recovery_decision.py, each with a Dart-ready header. New suite 69 (no app, database or network).

Added

  • Checkpoints (2-build.md, R20): a build is a series of small checkpoint commits, pushed as made; VERSION is bumped only by the last; BUILD runs through as many as it can; the full suite runs on GitHub.
  • Code structure rules (AGENTS.md, R18, R19): new code is a module; one class per file, laid out like a Flutter feature (data, domain, ui); every file's header says what it depends on, who uses it and its Dart note; a dependency map for the Dart port.
  • Tests workflow (.github/workflows/tests.yml): runs tests/run.sh, pip-audit and bandit on GitHub for every push to main, so the Reviewer can read an independent result (4-review.md, step 0).
  • Test-runner self-test (tests/tools/harness_selftest.sh, review #8): injects a database that can't be made or seeded, a silent nonzero exit, a time-out and a leftover process, and checks run.sh catches each (TEST_SUITE_TIMEOUT sets the suite time-out, default 600 s). Runs first in the Tests workflow.

CalendarStream 0.2.8-beta.35

Pre-release

Choose a tag to compare

@github-actions github-actions released this 07 Nov 04:01
6a4da29

REVIEW 2 fixes for review issues #8 (tests) and #9 (Google API).

Fixed

  • Invite someone no longer moves the owner's working module to a new account when the invite is made; the module changes account only when the invitee signs in (#9).
  • Sync Now / ready log warns for each Google module not signed in yet, "open it and Connect me" (#9).
  • Tests: each Google-mock suite has its own port and waits for its server; run.sh fails fast on a missing database, kills a suite's leftovers and fails on a non-zero exit status or a time-out (#8).

CalendarStream 0.2.8-beta.34

Pre-release

Choose a tag to compare

@github-actions github-actions released this 07 Nov 03:34
51e0e8e

Ships what beta.33 announced but never contained: its image was built from the first of three commits
(the release workflow builds only when VERSION changes), so F46–F52, F56, F57, I22, I32 and R7 were missing from
it. No new code; the same items as beta.33's entry below.

Changed

  • Release rule (2-build.md): the commit that bumps VERSION carries all the code, and the workflow's run is
    checked to be for HEAD.

CalendarStream 0.2.8-beta.33

Pre-release

Choose a tag to compare

@github-actions github-actions released this 06 Nov 21:42
3098701

Build 9.

Fixed

  • I35 A rule's All Rules badge no longer says "No calendar yet" for a rule whose calendar was later
    removed — it keeps naming that calendar (by its own last-known name, or a generic fallback) instead of
    looking indistinguishable from a rule that was genuinely never given one.
  • I37 Escape in the rule dialog now cancels exactly like the Cancel button. Writing a new rule from the
    event pop-up and pressing Escape (instead of clicking Cancel) used to close the rule dialog the plain way,
    which left the event pop-up closed too; now it comes back, the same as Cancel already did (I18).

Changed

  • I21 / F45 A collapsed status word now vanishes entirely (giving its line the space back) unless it's an
    ongoing health check the Developer should keep seeing (something that can become unhealthy, e.g. CCS+ or a
    feed's "Validated"); a plain one-off confirmation such as History's "Saved" after changing how many changes
    are remembered goes all the way, instead of keeping its ✓ forever.

CalendarStream 0.2.8-beta.32

Pre-release

Choose a tag to compare

@github-actions github-actions released this 06 Nov 17:46
caf2601

Build 8: Fixes + Settings + Calendar + History + Setup. Left for later, with reasons: I13 (needs steps to reproduce),
I25 (needs steps), F24 (needs a change to the updater's protocol), I7 (on hold); F36.2 deleted by the Developer.

Added

  • F44 History's headers reorder by dragging them (or ← → when one is focused); Undo moves to the end, no longer
    between Type and Event.
  • F40 The calendar grid turns the page on a horizontal swipe on a touch screen (left: next, right: previous);
    vertical scrolling is unchanged.
  • F37 The installer asks for a subdomain (also the stack name and the container prefix), defaulting to
    calendarstream; the app's default path is the current path plus the subdomain, with etc and data as its
    default subfolders. A path that's already taken is called out ("are you aware of it?") with a choice: use it
    anyway, a numbered name, another path, or cancel.

Changed

  • I2 Default greys out and disables, with a tooltip saying why, on any read-only calendar.
  • I18 Cancel in the rule dialog, opened from the event pop-up, reopens it exactly as it was, unsaved edits included.
  • I21 A status word always keeps its icon and words together inside a Status/Action button; elsewhere it shows
    both, then collapses to just its icon, after a hold that follows the Animation duration setting.
  • I22 Administrator's public addresses are one list of rows (the page's own address first), each with its own
    trash can; + sits at the end of the first row; trashing the only row left clears it.
  • I26 A calendar's On | Off switch sits inline with its note, instead of on its own line.
  • I27 The 2/3-line box is invisible (no border or fill), right-aligned next to the Status/Action button, instead
    of centered across the header.
  • I28 The Calendars module is renamed Sources.
  • I29 History's Accepted sign-in is a ✓ with no words (the word stays as its tooltip and accessible name).
  • I31 Different end time zone's tooltip is "End Time zone"; the event pop-up never resizes as All-day Event or
    Different end time zone are ticked.
  • F38 The first theme after a fresh install is System; every section's card padding is 12 px, not 18 (the margin
    is unchanged); the reorder grips move in to match.
  • F39 Look is renamed Appearance (translated at Deploy).
  • F41 Time Zone is a globe icon; its tooltip names the zone, and it opens the same picker.
  • F42 A rule's key name is cut to 25 characters, with the full name as its tooltip.
  • F43 12h | 24h is one clock icon that toggles on a click, the current mode in its tooltip.

CalendarStream 0.2.8-beta.31

Pre-release

Choose a tag to compare

@github-actions github-actions released this 06 Nov 08:06
7ed74b0

Build 7: Calendar + carryover + F22 pictures + R1. Left for later, with reasons: I13 (no way to
reproduce it), I21 (which status box is meant?), F24 (needs a change to the updater's protocol), F36.2
(unclear), I7 (on hold), I25 (record only).

Added

  • F34/F35 Reorder grips can sit on the right: Settings › Look › "Reorder grips" Left | Right.
  • F36.1 Print Preview chooses the paper's orientation (Landscape | Portrait), remembered; page margins 5 mm.
  • I11 / hour handle A handle under the Week and Day grid stretches the height of an hour (keyboard too); remembered.
  • F22 The Theme Rules pictures are recomposed with Part 2 on top (see theme.md).

Changed

  • I14 / I20 Full page: the button sits in the title bar beside ☰ (its icon changes to Back's), the page fills the window and its footer is hidden.
  • I19 The event pop-up's rows: All-day Event beside the end date's label, Different end time zone beside the end Time's label.
  • I22 The event pop-up's icons shrink to fit instead of wrapping.
  • Administrator status box on the right of its header, with ✕ / ✓ icons on the idle buttons.

Fixed

  • I15 Switching the last hidden calendar back on was never saved (an empty value was read as not sent).
  • I3 An event added in CalendarStream and then deleted no longer comes back as a struck-through item.
  • I17 Deleted and hidden events no longer count in the cell's overflow.
  • I18 The pop-up's Rule button works from an unsaved Add-event (it reads the live title and date).

CalendarStream 0.2.8-beta.30

Pre-release

Choose a tag to compare

@github-actions github-actions released this 06 Nov 04:53
dbf6000

Part of the 6 Fixes + Settings build (the rest — I13, I15, I18, I22, F36, F24 — needs more reproduction
or is bigger new UI work, and is left for the next build so it isn't guessed at).

Fixed

  • I24 The server crashed on every page load once a rule had a "Change field to text" or "Add text to
    field" action (e.g. a title/notes/location change): the translator's own text parameter collided with
    the {text} placeholder's keyword, two layers deep (the per-call wrapper, and i18n.tr itself). Fixed
    at the root: i18n.tr's text parameter is now positional-only, and the wrapper that was shadowing it
    (and two others that could have hit the same thing) renamed.
  • I23 A new rule saved with no title now gets one from its If/Then (as a calendar's color already
    defaults when none is chosen), instead of failing on save (a consequence of I24: generating a name from
    an untitled rule's actions is exactly what crashed).
  • I2 The default calendar's "Default" label stays beside its title on narrow screens instead of
    dropping to its own line under Close.
  • I12 The margin added for the rule-line reorder handle trimmed from 16px to 14px (the handle's actual
    width), in response to "the padding in Rules increased."

Waiting

  • I7 still on hold. I13, I15, I18, I22, F36, F24, F22 still waiting.