← Commit history
README.md+8−7
@@ -11,12 +11,13 @@ wiki notification email ──poll──> per-item state ──render──> ONE  The board is a single card holding a **table**: a colored STATUS rail column (OPEN green / CLOSED gray) beside a content column, one divider-ruled row per-issue. Every row has the same pipe-delimited shape - **page + issue #** |-title, then **actor** | **origination date** | last activity | **View link-at the end of the row**. New activity bubbles to the top. (Chat cards have no native-table widget and free-flowing pipe columns wrap unreadably at card width, so-the table is two aligned columns with controlled line breaks; set-`"style": "blocks"` for the chunkier per-item layout with View buttons.) Open items stay on the board until resolved; when an item+issue. Every row stacks the same fields in the same order, one per line -+**page + issue #**, title, **actor**, **origination date**, last activity,+and the **View link on the last line**. New activity bubbles to the top.+(Chat cards have no native table widget: the columns widget caps at 2 and+grid tiles are equal-width and unreadable, so the table is a 2-column layout+with one field per line; set `"style": "blocks"` for the compact per-item+layout with View buttons.) Open items stay on the board until resolved; when an item is closed it shows CLOSED - so you get the satisfaction of seeing it done - then drops off at **6am the next day** to keep the board fresh. @@ -103,7 +104,7 @@ inbox. A failed board post never sweeps the email; it retries next pass. | `timezone` | container local | IANA zone for dates + the purge | | `maxRows` | `40` | card row cap | | `boardTitle` | `Wiki Notifications` | card header |-| `style` | `table` | `table` (status rail + content column, divider-ruled rows) or `blocks` (per-item blocks with View buttons) |+| `style` | `table` | `table` (status rail + one field per line, divider-ruled rows) or `blocks` (per-item blocks with View buttons) |  ## Commands 
bin/__pycache__/wiki-notify-gchatcpython-312.pyc
⋯ 1 unchanged line ⋯
bin/wiki-notify-gchat+11−8
@@ -310,15 +310,18 @@ def render_table_widgets(shown, tz):         status = (f'<font color="{OPEN_COLOR}"><b>OPEN</b></font>' if is_open                   else f'<font color="{CLOSED_COLOR}"><b>CLOSED</b></font>')         item = it["page"] + (f" #{it['num']}" if it["num"] else "")-        max_title = max(24, 84 - len(item))-        title = it["title"][:max_title] + ("…" if len(it["title"]) > max_title else "")+        title = it["title"][:110] + ("…" if len(it["title"]) > 110 else "")         title = html_mod.escape(title, quote=False)-        meta = [f"by {it['actor']}" if it["actor"] else "by -",-                f"opened {fmt_date(it['openedAt'], tz)}",-                f"last {EVENT_LABEL.get(it['lastEvent'], it['lastEvent'])} {fmt_datetime(it['lastAt'], tz)}",-                f'<a href="{it["url"]}">View</a>' if it["url"] else "-"]-        content = (f"<b>{item}</b> | {title}<br>"-                   f'<font color="#8a94a6">{" | ".join(meta)}</font>')+        dim = lambda s: f'<font color="#8a94a6">{s}</font>'+        fields = [+            f"<b>{item}</b>",+            title,+            dim(f"by {it['actor']}" if it["actor"] else "by -"),+            dim(f"opened {fmt_date(it['openedAt'], tz)}"),+            dim(f"last {EVENT_LABEL.get(it['lastEvent'], it['lastEvent'])} {fmt_datetime(it['lastAt'], tz)}"),+            f'<a href="{it["url"]}">View</a>' if it["url"] else dim("-"),+        ]+        content = "<br>".join(fields)         widgets.append({"columns": {"columnItems": [             {"horizontalSizeStyle": "FILL_MINIMUM_SPACE", "verticalAlignment": "TOP",              "widgets": [{"textParagraph": {"text": status}}]},
docs/board.png
⋯ 1 unchanged line ⋯
docs/hero.png
⋯ 1 unchanged line ⋯
package.json+1−1
@@ -2,7 +2,7 @@   "slug": "wiki-notify-gchat",   "title": "Wiki Notify for Google Chat",   "type": "app",-  "version": "1.1.2",+  "version": "1.1.3",   "description": "Turn wiki.adom.inc notification emails into a live Google Chat board. One card, one row per issue - newest first, OPEN/CLOSED status, origination date, actor, and a View link - continuously updated in your own Chat space via your own webhook. Emails are swept out of your inbox (trash, archive, or label). Closed items linger until 6am the next day, then drop off. Delegates all auth to adom-google; the only secret is your webhook URL, kept in your private config.",   "tags": [     "cli",
page.json+1−1
@@ -2,7 +2,7 @@   "slug": "wiki-notify-gchat",   "title": "Wiki Notify for Google Chat",   "type": "app",-  "version": "1.1.2",+  "version": "1.1.3",   "description": "Turn wiki.adom.inc notification emails into a live Google Chat board. One card, one row per issue - newest first, OPEN/CLOSED status, origination date, actor, and a View link - continuously updated in your own Chat space via your own webhook. Emails are swept out of your inbox (trash, archive, or label). Closed items linger until 6am the next day, then drop off. Delegates all auth to adom-google; the only secret is your webhook URL, kept in your private config.",   "tags": [     "cli",