Skip to content

v0.1.0

Choose a tag to compare

@github-actions github-actions released this 08 Nov 09:17
· 602 commits to main since this release
2743c55

Changelog

  • 2743c55 Merge pull request #1 from patrache/integration
  • a6a1517 build: check release binaries before goreleaser publishes
  • 7b4f076 build: checksum-verified install scripts for unix and windows
  • f0d2e53 build: goreleaser config for darwin/linux/windows amd64/arm64
  • 65162c8 build: homebrew tap formula template
  • 015ebea build: init Go module with pinned client dependencies
  • 91442ac build: ship under the MIT license (owner decision D6)
  • cb75ed1 build: verify release default server without go version -m
  • 9ddad66 chore(deps): tidy module, make golang.org/x/text a pinned direct dependency
  • 9a266c7 chore(server): scaffold worker, bindings, D1 schema and vitest pool
  • 016e5ab ci(server): type-check test files too via npm run typecheck
  • 44fd165 ci: pin every GitHub Action to a commit SHA (pending item 2)
  • 3ed513e ci: server vitest workflow and tag-only release workflow
  • ec5e8dc docs(contract): add x/text, CR-A..D and config ErrNotLoaded to client-architecture
  • d3c7a6e docs(contract): move masil admin ownership to sns-fun (CR-S3)
  • 94a8a5f feat(admincli): masil admin reports, resolve, remove, suspend and audit commands
  • a63a542 feat(autostart): launchd, systemd --user and HKCU Run registration
  • 308cdef feat(autostart): launchd/systemd/run-key renderers and stable executable path
  • cbd9f18 feat(chat): DM and group DM creation, channel settings overlay
  • 75da3a7 feat(chat): author menu in msg.actions reports the author as a user
  • 05258e8 feat(chat): channel and DM list pane with badges and presence
  • df07ba3 feat(chat): channel view with history paging, read marking, new-message highlight
  • 35a9ab4 feat(chat): composer with optimistic send, retry, IME cursor, edit-last
  • 23603e1 feat(chat): create and join spaces, invite link and direct invite screens
  • a1be007 feat(chat): friends and requests screen, user picker, friend.add
  • 83a7416 feat(chat): home route with DMs, friends, invites entry points
  • 53b09b3 feat(chat): invite management and public/private channel creation
  • 3777192 feat(chat): mention, emoji and slash-command autocomplete
  • 60fdc22 feat(chat): message actions, reactions, pin, delete, copy, report, block, poll vote
  • 637e291 feat(chat): message renderer for full/line/bubble/minimal densities
  • b29f6a4 feat(chat): message search with scopes, highlights, jump to message
  • 1dbe1da feat(chat): package scaffold, shared helpers, menu and form overlays
  • 2dd7dd8 feat(chat): pinned messages overlay and palette command coverage
  • 981abad feat(chat): slash commands /me /shrug /poll /status /focus /roll /invite
  • 058b74a feat(chat): space rail pane
  • 19f71ec feat(chat): space settings overview, member roles, kicks and bans
  • 14c7cb3 feat(chat): thread panel with per-mode placement
  • 93d6f81 feat(chat): typing indicator, presence polling and members pane
  • 7781114 feat(chatstore): REST page merge, optimistic reactions, resync
  • 9ebce2a feat(chatstore): apply realtime message/thread/reaction/pin/poll events
  • 268fd5f feat(chatstore): reducer skeleton, windows, pending sends, typing
  • 8b203f4 feat(cmd): masil daemon run/install/uninstall/status
  • 525e61e feat(core): alert decision policy, shared shown-ledger, OS backend
  • 983f163 feat(core): api client core, error envelope, cooldowns, fake server
  • d3d3f4f feat(core): api endpoints messages through admin
  • 1c2de9b feat(core): api endpoints meta/auth/me/users/social/dms/spaces/invites/channels
  • e376c99 feat(core): api wire types mirroring api.md section 2
  • 4aa6a84 feat(core): app shell rendering, status/tab bars, harness driver and shell goldens
  • ce39090 feat(core): command palette with chosung fuzzy search, core commands, run-command dispatch, live theme switch
  • d1042cb feat(core): config paths, toml load/save with defaults, atomic writes
  • 444a424 feat(core): credentials, device id, tui/daemon file locks
  • 9cdad4f feat(core): drawing widgets (frame, badges, chips, poll, tabs, toasts, spinner, fade)
  • c570133 feat(core): focus intents, key routing, ctrl+w prefix, mouse, pins; preservation tests
  • ad766fc feat(core): four themes with derived styles and code colors
  • 37cf534 feat(core): id-anchored list and IME-safe normalizing composer
  • a54a2e3 feat(core): korean humanize, slash command parser, terminal caps
  • 049cab2 feat(core): layout modes, pins and exhaustive geometry
  • 5acaa2c feat(core): login and signup screens with client validation
  • 26f5fbf feat(core): markdown subset parser and themed renderer with chroma
  • aa9588d feat(core): masil entrypoint with command registry and core commands
  • 4618770 feat(core): mode-independent navigation state and slot projection
  • 9714369 feat(core): overlay stack with clamping/degrade, help, confirm, emoji picker, report dialog
  • 700c8c8 feat(core): persist ui state.json and run the tea program under the tui lock
  • 5b8ea99 feat(core): phase-0 stubs for every core public signature and live registries
  • f51697e feat(core): realtime bridge, bootstrap/resync, idle, watch, unauthorized/logout handling
  • 224b6eb feat(core): realtime client with resume, heartbeat, backoff, rate-limited outbox
  • ad2e555 feat(core): realtime wire protocol and typed event decoding
  • 41208bf feat(core): settings screen with local, server, blocks, sessions and password sections
  • b9d435d feat(core): shared store, event reducers, bootstrap, ordered windows
  • df8ec77 feat(core): status bar right items, toasts with timed expiry, error toasts
  • 39ae669 feat(core): tui alert handling with ledger dedupe, toasts and focus summary trigger
  • 18b97ca feat(core): ui contracts, timers, keymap and raw-timer static check
  • 8a8370f feat(core): version user-agent and ULID helpers
  • 7de19b3 feat(core): width-stable unicode sanitize, truncate, wrap, fit
  • 9a5e1be feat(daemon): judge local TUI presence via tui.lock with server-signal fallback
  • 0c8bda2 feat(daemon): notify-mode run loop with credential wait, live config, restart on upgrade
  • 09d1996 feat(daemon): persist daemon-state.json and derive resume point
  • 9e92601 feat(daemon): rotating daemon.log and status report from the daemon's own view
  • 606129e feat(daemon): unbounded ordered alert queue with grace re-judgement and ack marking
  • 185aad9 feat(feed): feed poll voting, retract, close and live results
  • 0654d0a feat(feed): full-screen media viewer with kitty and iTerm2 support
  • 5a5c448 feat(feed): hashtag feed, top-10 trends with hashtag and post search
  • 13f2983 feat(feed): notifications inbox for command pane and single-pane modes
  • ccc1f3b feat(feed): palette commands, sns registration and cross-mode integration tests
  • dc9c99e feat(feed): post actions, menu, report/block and user list overlays
  • 767c4ef feat(feed): post and story composer with uploads, polls, reply and quote
  • 9337d3f feat(feed): post card renderer with four densities and hit regions
  • 1eb24c4 feat(feed): post detail with ancestors and expandable reply tree
  • adf57d2 feat(feed): profile route with follow, private requests, edit, block and report
  • fafad68 feat(feed): story viewer with auto-advance, report and delete
  • 26173d4 feat(feed): timeline route with tabs, story ring, discover polling and command-mode column
  • d5f895a feat(feedstore): add feed reducer with timeline, post, story and notification rules
  • 827a404 feat(feedstore): resync open timelines, posts, stories and notifications
  • 9dc4ecd feat(fun): focus mode commands and once-only missed-items summary overlay
  • 3a152be feat(fun): guestbook tab on profiles and write dialog
  • d0b7837 feat(fun): status message and presence mode commands and dialogs
  • 74927bd feat(imgrender): decode, metadata-stripping upload prep and half-block renderer
  • 19d1e79 feat(imgrender): kitty placeholder renderer, iTerm2 inline helper and media cache
  • d75a059 feat(server): 24h stories with feed rings, views and author-only viewers
  • e51bdb5 feat(server): R2 uploads, media serving with ETag and access rules
  • d56dd82 feat(server): TopicHub watcher leases and watch frame
  • 15dd4e2 feat(server): UserHub seq log, resume replay, device acks, epochs and alarms
  • b5a7955 feat(server): UserHub websocket upgrade, hello/resume/ready and frame validation
  • 75b304d feat(server): admin forced content removal with R2 deletion and report resolution
  • cb61733 feat(server): admin report triage, suspension and audit listings
  • 2b5c25b feat(server): app shell, api/event types, error envelope, validation, version gate
  • 47db744 feat(server): blocking with relation cleanup and public-switch follow approval
  • b8add90 feat(server): channel serialization with unread state, dms and group dms
  • efebb73 feat(server): content and user reports with snapshots
  • 17d71c2 feat(server): create/get/delete posts with media, hashtags, mentions, idempotency
  • 9e201c1 feat(server): cyworld-style guestbook with secret entries
  • aaec607 feat(server): d1 helpers, cursors and row types
  • 1324c04 feat(server): emoji reactions and message pins
  • cc4eceb feat(server): following/discover timelines with since/gap and profile post tabs
  • 011354c feat(server): follows with private-account approval and follower lists
  • 3a75d8c feat(server): friends and friend requests
  • 1cf570a feat(server): hashtag feed and 5-minute trends top10 cron
  • 811d609 feat(server): hourly cleanup cron incl. story expiry and orphan uploads
  • f6ad62f feat(server): inbox notifications and desktop alert generation
  • 6b55ea9 feat(server): invite links and direct space invites
  • 8b94ece feat(server): likes and reposts with guarded counters and timeline events
  • f3d959b feat(server): logout, session management and password change with socket revocation
  • 5d75811 feat(server): me, profile, settings, status and user lookup routes
  • ca1c582 feat(server): mention and @here resolution, message notifications, edit and delete
  • 6dac641 feat(server): message search with trigram FTS and short-term LIKE fallback
  • bba1c4b feat(server): message threads with participants and reply notifications
  • 4035942 feat(server): notifications inbox and pinned notification hooks
  • d737ea2 feat(server): permission rules for dm, spaces, channels, posts and presence
  • 0072d64 feat(server): poll voting and closing for chat and feed polls
  • c650cd0 feat(server): post serialization, post search and hashtag search
  • 5cc3d24 feat(server): presence computation, focus mode and presence routes
  • 234f917 feat(server): publishEvent fan-out with notify-mode split and tui_state signal
  • b14eba6 feat(server): read markers, unread counts and typing indicators
  • 169651c feat(server): realtime protocol constants and online audience resolution
  • 483720d feat(server): replies, quotes, context and reply tree listing with visibility filter
  • 56a41e4 feat(server): send/list/get messages with nonce idempotency, rolls, polls and system messages
  • 99473a9 feat(server): signup, login, bearer auth middleware and rate limiters
  • 29266db feat(server): spaces, roles, membership removal, bans and transfer
  • 29073b5 feat(server): text channel management, private channel members and prefs
  • 5acf707 feat(server): text normalization, mentions, hashtags, dice, snippets
  • 2be571c feat(server): ulid, time and password/token crypto helpers
  • 23dd7ac fix(admin): handle help and usage errors before loading credentials
  • 957c999 fix(api): FetchMedia only GETs /v1/media/ on the API origin
  • f65f321 fix(api): client limiters follow api.md 6; guard limiter calls the scanner cannot read (8-a)
  • 06ac8dd fix(api): refuse request paths a URL normaliser would reroute
  • 846f187 fix(api,markup,ui): keep server and link text from writing terminal escapes
  • cd57c52 fix(api,server): path IDs only from escPath on the client; malformed IDs 404 before lookup on the server (pending item 5)
  • 72a9589 fix(app): open masil join's invite on the home tab, not the restored channel
  • c28638f fix(app): report a 4001 during the user's own logout as logout, not unauthorized
  • d3547ae fix(app): show OS notifications from a tea.Cmd, off the Update goroutine
  • 13830fd fix(autostart): probe the systemd user manager and roll back failed installs
  • 132830b fix(chat): DM header presence falls back to the friend entry like the sidebar
  • d744c34 fix(chat): failed first history page shows a retry notice instead of a stuck spinner
  • 38801bd fix(chat): grapheme-whole search highlights; transfer picker loads every member page
  • 9dc6903 fix(chat): member lists follow membership events; space members tab polls presence
  • ee2de22 fix(chat): my own messages never start the "새 메시지" divider
  • a8f4973 fix(chat): space.leave confirmation waits for and lands its result from any route
  • 4b5d220 fix(chat): stop members presence polling when no channel is viewed
  • 1d4cbd2 fix(chatstore): crossed events never regress held copies; pin lists replay their flight
  • 73a27a3 fix(chatstore): late creation payloads never regress a held message copy
  • 6e9c0fa fix(chatstore): learn message authors from REST pages, threads, upserts and pins
  • 03b1c7c fix(chatstore): replay what replacing pages miss, discard stale pages, resync that cannot go stale
  • dbcd9a0 fix(cli): warn on install when credentials belong to another server
  • a2bd9d5 fix(config): never overwrite a config.toml that failed to load
  • 36a57fe fix(config): per-field reset on wrong-typed values, retry rename on windows
  • 5a3dd1e fix(daemon): log duplicate alerts as skipped, not shown
  • 3bc82d3 fix(daemon): reconnect after the realtime client halts on a second 4009
  • 971f3d9 fix(daemon): stay offline after the realtime client halts on a second 4009
  • 77673d4 fix(daemon): treat an unreadable or unparsable config.toml as a reload failure
  • 9426a94 fix(dms): group DM refusals over a block pair no longer name who blocked whom (D2)
  • ae584c5 fix(feed): a click on the selected card, reply or list row opens it
  • b72eae0 fix(feed): back off stale story-ring refetches after a failed stories/feed
  • c343e99 fix(feed): discover new-posts check runs on empty and small windows
  • 7969218 fix(feed): inbox loads its first page even after realtime notifications
  • 30c7528 fix(feed): keep the composer draft read-only while a post is being sent
  • 61ee3dc fix(feed): name a mention's space from the store, never "스페이스"
  • 9841e9d fix(feed): profiles follow guestbook and friendship events live
  • 498e537 fix(feed): quiet automatic first-page retries; the inbox retries a failed load
  • b096138 fix(feed): reply/quote composer watches its target post
  • 08502cf fix(feed): the new-card fade leaves the card's closing rule full width
  • 8d5577f fix(feed): trends paste, timeline load/cursor in FeedStore, raced events, bounded images
  • aa08e49 fix(feed,admincli): clear stale iTerm2 images; ended suspensions show 정상
  • 322dc1d fix(feedstore): refetch expanded reply windows under open posts on resync
  • 899a0ee fix(imgrender): bound the lossless WebP pre-decode scan by the canvas and byte limit (pending item 0-d)
  • 45c83e7 fix(imgrender): cap remote decodes by decoded bytes and run two at a time
  • 237b63f fix(imgrender): cost a lossless WebP's Huffman groups from its bitstream (pending item 13)
  • b51b649 fix(imgrender): cost the bomb check by what each decoder allocates (pending item 13)
  • 42851c0 fix(imgrender): count the Huffman groups a VP8L bitstream declares in the bomb check (pending item 13)
  • 5472c9d fix(imgrender): memoize half-block Peek and bound decoded media memory
  • 80d129c fix(imgrender): refuse WebP whose ALPH is not right before its VP8 (pending item 12)
  • 3cb5d26 fix(imgrender): refuse over-long VP8 chunks; shrink without kernel temporaries (pending item 13)
  • 9a85620 fix(imgrender): strip WebP/GIF metadata before upload (pending item 12)
  • 1c8dca5 fix(imgrender): the VP8L walk reads only the canvas-sized stream and only within the limit (pending item 13)
  • 8b59229 fix(invites): a direct invite dies once its invitee is in the space by any route (9-b)
  • c6ab2fb fix(invites): no invite_received for a direct invite canceled right after its INSERT (9-b)
  • 96b0ece fix(invites): unfriending cancels pending direct invites both ways; accept re-checks the friendship (D3)
  • 896b27d fix(markup): a backslashed * or _ is not emphasis, so /shrug shows ¯_(ツ)_/¯
  • 4b638fb fix(markup): hyperlink only when the shown text is the target up to NFC (pending item 0-c)
  • 33eb358 fix(markup): percent-encode OSC 8 hyperlink targets
  • 44f7f3c fix(markup): strip control bytes from link URLs before OSC 8
  • 59865a5 fix(markup): underline link runs as one SGR run so flag graphemes keep their width
  • 60d2f60 fix(markup,uitest): close the 0-b review gaps on bare URLs, OSC 8 scope and escape tests
  • b114362 fix(notify): show OS notifications without pasting user text into scripts
  • 31d9513 fix(notify): test the real show path of every platform; quote plain D-Bus bodies
  • 6960f46 fix(presence): D1 mirror keeps the exact focus start; serializeMe reports it (D4)
  • 70f400e fix(presence): a suspended account shows others no presence or last_seen_at (D1)
  • 1c03b44 fix(presence): suspending a dnd/focus account tells its watchers; friends order treats it offline (D1)
  • 6822d6a fix(realtime): replay masks a suspended friend-request sender; notify replay and focus block tested (4-a)
  • 3cc82b8 fix(realtime): resume replay and focus summary drop notifications of hidden actors (4-a)
  • f4f192e fix(server): GET/HEAD with body framing no longer 500s in the body cap
  • f075196 fix(server): UserHub re-checks the session before accepting a socket
  • 58ac113 fix(server): a 0-row write's error code comes from its own batch, not a re-read (10-a)
  • f945d73 fix(server): declining an active follower no longer decrements follow counters
  • 06ea6d4 fix(server): enforce body caps on received bytes, not Content-Length
  • b34b39c fix(server): event Posts no longer leak a hidden reply parent's author
  • c0b2c5d fix(server): every friend-accept statement checks the block itself (pending item 10)
  • 131ebed fix(server): final-review fixes for Me presence, poll visibility, dnd reconnect, suspend bound
  • e174cf5 fix(server): friend accept checks the sender's suspension in its write (pending item 10)
  • c67e62c fix(server): gate invite creation and every link use on the issuer's right
  • 8e11773 fix(server): hide a suspended actor's notifications; pin suspension on sibling paths
  • 702f19b fix(server): hide a suspended owner's SNS content from other viewers
  • 3f937df fix(server): invites die with the inviter's right to issue them
  • 267eace fix(server): log calls are a constant message plus a fields object (pending item 7)
  • a0c336f fix(server): notify fan-out in one scheduled task, 50 RPCs at a time
  • 32d74a3 fix(server): poll vote, retract and close are writes in the conversation (pending item 11)
  • a10f92b fix(server): put the block and suspension rule into the relation writes (pending item 10)
  • 67b4b97 fix(server): rate-limit current-password checks on POST /auth/password
  • f088833 fix(server): re-check blocks inside the group DM member-add batch; RL_SOCIAL on member add
  • b3ffda8 fix(server): refuse WebP/GIF uploads that carry EXIF/XMP/ICC or comment blocks (pending item 12)
  • 812dbb4 fix(server): refuse group DMs that put two participants who block each other together
  • 081a935 fix(server): reject direct space invites to a suspended user
  • b80e1a9 fix(server): skip global JSON parse check on POST /v1/uploads
  • b48e1b5 fix(server): space delete / member role / direct-invite liveness answer from their own batch (10-a)
  • d05e85e fix(server): substring search without LIKE patterns (D1 50-byte limit)
  • 6f18d4f fix(server): the four 0-row paths 58ac113 missed answer from their own batch (10-a)
  • 989a8d9 fix(server): total errFields, single-object log shape, tighter log scanner (pending item 7 follow-up)
  • 403c3fa fix(store): re-apply events from the bootstrap flight over the snapshot
  • 76c4bd1 fix(store): treat partial bootstrap lists as failed requests
  • 5b43317 fix(textwidth): NFC-compose before rule 7 and keep runes of jamo clusters
  • 75dc245 fix(textwidth,notify): drop bidi/format chars and line separators; pin Show's own sanitize
  • 19cecb2 fix(textwidth,ui): drop every invisible rune and never show a blank name
  • 26c216e fix(ui): copy only what the screen shows to the clipboard
  • f9d707f fix(ui): final-review findings — home reachable, load retries, resize selection, pre-bootstrap states, resumed backfill
  • 5c02707 fix(uploads): server refuses metadata inside ANMF frames and odd GIF blocks, matching the client (pending item 12)
  • 5294610 fix(uploads): server refuses metadata inside WebP frames and GIF sub-blocks the client strips (pending item 12)
  • 534c561 fix(users): a suspended account shows others only its handle and display name (D1)
  • c42930f fix(widgets): drop List render cache on ctx.Mode change
  • f36ffa0 merge: integ-cli gap fixes (pending 0-d, 5, 12, 13)
  • 70438bc merge: integ-cli into integration
  • 738e62f merge: integ-srv gap fixes (pending 8-b, 9-a, 12, 13, D4)
  • bfcfd23 merge: integ-srv into integration
  • 3cbbb2d merge: track/chat into integration
  • aa78e92 merge: track/daemon into integration
  • bdf9f07 merge: track/server into integration
  • a32eb09 merge: track/sns into integration
  • 62e4a7f perf(uitest): count a rune's column only when it is reported
  • c9a1651 test(api,imgrender): pin checkPath's encoded-dot and backslash branches
  • acfec02 test(chat): per-mode goldens, mode-switch preservation and read, tab completion gate, sweeps
  • 5c30a00 test(ci): read workflows as YAML so every uses spelling is pin-checked (pending item 2)
  • 88fc9c0 test(contract): api.md 6 limiter column is checked against the routes both ways (8-a)
  • 40b8eba test(contract): limiter table check reads limit() at runtime and lints every other path; rate tests survive window rollover (8-a)
  • 699dd48 test(core): end-to-end product goldens and integrity sweeps
  • 451ea69 test(core): fake clock, size sets, key parser, frame integrity checker
  • 47fd43f test(core): mockup fixtures, hostile set, fake api routes, stub screens
  • e6d902f test(daemon): M4 gate — daemon e2e and idle footprint flood against wrangler dev
  • ce5f00a test(dms): pin the group DM pre-check's block gate both ways; race test budget verified (8-b)
  • a9ace9d test(dms,invites): pin the newcomer half of the group DM room and the space scope of link revokes (8-b, 9-a)
  • 649f995 test(e2e): M1 gate — auth, sessions and realtime against wrangler dev
  • 018cfb8 test(e2e): M2 gate — chat flows delivered live against wrangler dev
  • 06b5131 test(e2e): M3 gate — feed, follow, stories, trends and inbox against wrangler dev
  • 288ddbc test(imgrender): pin the stripped-bytes downscale path for >5MB GIF/WebP (pending item 12)
  • 3262bf1 test(invites): direct invites stay canceled after the inviter rejoins (9-a)
  • 1270c52 test(presence): pin the pre-0003 focus start fallback; Focus says extending keeps started_at (D4)
  • b051a4b test(realtime): pin finishFocus re-check and resume's one-block replay against a slow actor lookup (4-a)
  • a5c1821 test(release): normalize CRLF before checking goreleaser and release.yml
  • e164ec7 test(server): feed NFD input to normalizeText test
  • 305c18f test(server): local end-to-end smoke script against wrangler dev
  • 2bd9703 test(server): mirror the in-batch block check test; per-round adder in the member-add race; RL_SOCIAL in api.md section 6
  • 49156d4 test(server): pin a suspended author's embedded quote / reply parent; document suspended-owner 404s
  • bf2009c test(server): pin custom status message and focus mode endpoints
  • 26e88b7 test(server): pin post search and hashtag search behaviour
  • 5b1b60d test(server): pin the link revoke on removal (pending item 9)
  • c203477 test(server): seed group-dm friendships with one D1 batch to stay under the 5s timeout
  • b41b9e0 test(server): wait for stored acks in the use_device_ack resume test
  • 4abe1f7 test(uitest,textwidth): pin pending-fixes 1 on every screen and CLI output