v1.2.0 Phase A: formatter migration, segment-aware SMS, redirect links, config validation #99
No reviewers
Labels
No labels
area:ai
area:ci-cd
area:notifications
area:observability
area:public-pages
backlog
bug
duplicate
enhancement
help wanted
invalid
question
type:decision
type:feature
type:infra
type:maintenance
type:security
v1.0.1
v1.1.0
v1.2.0
v1.3.0
v2.0.0
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
rbrooks/WeatherBot!99
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/v1.2.0-phaseA-formatter"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
First v1.2.0 slice — the notification formatting & channel-config cluster.
Formatter (#14, #15, F-32, #56)
compose()(required / droppable-optional / pinned) that keeps one "Details" link in a predictable place (#15 decision 3).FormattedMessagenow carries char/link/omitted/encoding/segment metadata.asyncio.to_thread.Links (#13 + #15 decision 1)
redirect_tokenstable + an open-redirect-safeGET /r/{token}resolver — the 302 target is read only from the store, never the request; external hosts must be explicitly allowlisted (SHORT_LINK_EXTERNAL_ALLOWLIST).SHORT_LINK_REDIRECT_MODEwires notification links to mint{SHORT_LINK_BASE_URL}/r/{token}short links (deduped per target). Default off preserves the existing compact-base proxy model ({base}/p/{token}) — no behavior change unless you enable it.Channel config validation (#55)
Decisions recorded (#15)
Internal-only URL shortening (external passthrough unless allowlisted), type-level budgets (no per-instance override), one primary Details link.
Testing
Full suite green on the dev server: 544 passed (54 new tests). Migration
0019applies cleanly through to head on real Postgres. discord/matrix/webex notifier paths verified with deps installed.Closes #14, #15, #56, #13, #55
🤖 Generated with Claude Code