Tags give the ability to mark specific points in history as being important
-
v2.2.1
protectedc9766b2c · ·v2.2.1 - The automatic-share verdict is now written. It is worked out once a block's operations are all applied, because the beneficiaries arrive in comment_options after the comment they belong to, and a post carrying no comment_options at all -- the obvious way to pay nobody -- would never reach a per-operation hook. Only ProcessBlock drained that queue, and live sync does not go through it: it batches through ProcessBatchOpsTx. So nothing was ever judged in production. Measured on both nodes after v2.2.0 went out: 22 posts indexed, 10 of them in a community and so owing a share, none with a verdict. - The queue also grew for the life of the process, and queueShareAudit deduplicates with a linear scan, so the per-post cost grew with the number already queued. Harmless at the volumes seen, and emptied by a restart, but unbounded. - Both remaining callers of processOps now flush, and both discard the queue when the transaction is rolled back rather than carrying it into the retry. - template_delete records a tombstone even where the row is absent. It was a bare UPDATE, and a delete is fanned out to every node: a node that never received the original save has no row to update, so it recorded nothing. That loses a delete whenever the node holding the template is down while it happens -- the reachable nodes report success, the client counts the delete as persisted, and when the holder returns its live copy has nothing to lose the merge against, so the template reappears. Writing the tombstone unconditionally costs an otherwise empty row on nodes that never held it, and buys that a delete cannot be undone by an outage. - Both defects were found by testing the deployed nodes rather than by reading the code: each is a missing call, not a wrong value, so everything looked right and nothing failed. The share-audit regression test asserts the shape for that reason -- every caller of processOps must drain -- which catches the next one added without it.
-
v2.2.0
protected28eea3ef · ·v2.2.0 - Server-side post templates: bridge.template_save / template_update / template_get / template_list / template_delete, over a new nexus_post_templates table. Templates used to live in the browser's localStorage, so they were per-browser and per-device, lost with site data and absent from a private window; they now belong to the account. - Templates get a table of their own rather than a flag on nexus_post_drafts: expireOldDrafts deletes drafts untouched for 30 days, and templates do not expire, so a separate table is immune by construction instead of by remembering to exclude them from a sweep. - Template operations take a per-operation signature and deliberately do not accept a draft session grant, so that bearer credential stays bounded to drafts as documented. The op name is inside the signed message, so no signature crosses between operations or between drafts and templates. - template_list returns { templates, tombstones }, the shape draft_list uses, so a client fanning the read across nodes can let a delete win the last-write-wins compare instead of the template coming back. - Media referenced only by a template is no longer reclaimed as an orphan: reclaimOrphanCompletedMedia now treats a template as pinning its media. - Record whether a post pays the automatic beneficiary shares it owes (3% to the community it is published in, 3% to the author's referrer) on nexus_posts_cache.honours_automatic_shares. Those shares are a client-side convention the chain knows nothing about, and the transaction is signed in the author's browser, so the indexer is the first place that both sees the final beneficiary list and sits outside the author's control. Judged at the end of the block, since a post carrying no comment_options at all -- the obvious way to pay nobody -- would never reach a comment_options hook. Nothing acts on the verdict yet. Migrations v47->v48 (audit column) and v48->v49 (templates table). -
v0.4.8
protected053c99f0 · ·nexus-go v0.4.8 Journal/Council posting authority (L2) enforcement + community moderation parity: flagPost, comment moderation (no depth limit), muted-author suppression in Topic, reply propagation under hidden ancestors, account profile URL/NUL sanitization, and an authority parity harness. Fleet-visible: non-member posts in Journal/Council communities are marked invalid (hidden from community feeds). No schema change. MR !91.
-
v0.4.7
protectedb09a1f52 · ·nexus-go v0.4.7 Process delete_comment (mark is_deleted), restoring parity with the legacy indexer so on-chain deletes are reflected in feeds/threads/blogs and parent child counts. Adds cmd/backfill_deletes to repair phantoms left before the handler existed. No schema change. MR !90.
-
v0.4.6
protected4a8ae520 · ·nexus-go v0.4.6 Enforce the custom_json signer for the follow and reblog handlers. Closes a reblog impersonation forgeable via id:"reblog" (no chain evaluator) and hardens follow as defense in depth. No schema change. MR !89.
-
v0.4.5
protected19b8f78b · ·v0.4.5 — enforce community role authority (setRole/setUserTitle/moderation); communities reference docs
-
v0.4.4
protected0813d5d8 · ·v0.4.4 Method-aware condenser_api compatibility: get_content and -32602 for nonexistent entities. - condenser_api serializes json_metadata as a JSON string (bridge.* keeps the object form), on get_content and the condenser list handlers (ranked, account posts, replies). - get_content returns the comment_api_object fields bridge.* omits: body_length, cashout_time, last_payout, root_title. - A nonexistent account, post or community returns -32602 instead of an empty result; bridge.get_post on a missing post returns -32602, while condenser_api.get_content keeps the empty identity stub. GetPost is split so each namespace keeps its own contract. - Updates the legacy-parity contracts (json_metadata string, bridge.get_post -32602). Compatibility fixes aligning condenser_api with the legacy contract; no new API method.
-
v0.4.3
protected36560484 · ·v0.4.3 Return the empty identity stub for missing or deleted posts. - get_content of a non-existent or deleted post now returns id 0 with empty author/permlink, matching classic blurtd and the legacy nexus, instead of echoing the requested author/permlink. - Client libraries rely on the empty author/permlink to detect non-existence; the previous echo could make a deleted post look valid. - Aligns the legacy-contract regression check with the corrected behavior. No new API method or response-shape change.
-
v0.4.2
protected7e4dce02 · ·v0.4.2 Keep active_at fresh for account_update and custom_json ops, and floor it at the account creation date. - ensureAccount seeds active_at = created_at, so accounts no longer default to the epoch. - account_update and custom_json now advance active_at at index time. - The enrich active_at computation includes created, for parity with legacy. Fixes accounts whose only recent activity was a referral/custom_json or an account_update rendering as "Active 57y ago". No new API method or response-shape change.
-
v0.4.1
protected7327fbca · ·v0.4.1 Follow-up to v0.4.0: the drafts v47 migration now advances db_version itself (GREATEST), matching the other migrations, so the migrate runner no longer logs a WARN and repairs nexus_state. No behavior change; idempotent and a no-op on nodes already at db_version 47.
-
v0.4.0
protected0760333b · ·v0.4.0 Drafts: soft-delete tombstones and reusable session grant. - draft_delete soft-deletes (deleted_at) and draft_list returns a tombstones array, so a client can reconcile deletes across nodes. - Optional draft-session grant: sign once per session instead of per op, verified against the author's on-chain posting key; backward compatible with per-op signatures. - Migration v47 adds the nullable deleted_at column.
-
v0.3.1
protected1517784e · ·v0.3.1 Patch release. The deploy fallback for NEXUS_MEDIA_ALLOWED_MIME now includes video/quicktime, matching the application default, so a node deployed without an explicit value accepts .mov uploads instead of refusing them at media_upload_init. No code or API change: the binary is functionally identical to v0.3.0; only the deploy script and deployment docs changed.
-
v0.3.0
protecteda62fc4bf · ·v0.3.0 Media uploads accept any video codec. The codec probe and the video_codec_not_supported rejection are removed, so a video is no longer refused on codec. The QuickTime->mp4 remux is dropped; .mov is served by relabelling its MIME to video/mp4 (both are ISO base-media containers). Video posters are unaffected: they are generated on demand from a seekable presigned URL and decode any codec. No API surface change: the media upload methods keep their shape; the server just no longer emits video_codec_not_supported.
-
v0.2.2
protected5dbf71bf · ·Fix: an account's "last active" time (active_at) now advances on votes, not only on posts and comments. - Accounts that participate mainly by voting no longer show a stale "Active Xd ago" frozen at their last post. - active_at is derived from the maximum of an account's activity timestamps (including last_vote_time) during enrich, and is bumped at index time on each vote. - Reblogs remain excluded, matching legacy behaviour (the chain carries no reblog timestamp). No API surface change: the `active` field keeps its shape and type; only its value is corrected. No new RPC method, no schema change.
-
v0.2.1
protected26d6ab52 · ·v0.2.1 Patch release; CI only. Deploy jobs resolve the image reference produced by the build, so a tagged release deploys the artefact published for that tag (!73). No runtime or API changes: the binary is functionally identical to v0.2.0.
-
v0.2.0
protecteda5830129 · ·v0.2.0 First tag-driven release (see !70), replacing the hand-edited version that published 23 different images as 0.1.0-alpha. Includes the paid-out payout repair and the author/curator split (!72).